/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Read-once data mysql -> IIS/asp ?!?
Fra : Leif Neland


Dato : 13-11-08 17:07

IIS på win2003, mysql på linux

Jeg har noget asp, hvor jeg tilsyneladende kun kan læse svar fra
mysql'en een gang. Hvad f... sker der??

Her er noget af testkoden (forbindelsen til DB er ikke vist):

Sql = "select * from site where host='"&SiteName&"'"
Set SiteInfo = mysqlconn.Execute(Sql)
// Jeg henter det samme felt to gange:
response.write "<!--LOGO=["&SiteInfo("logo")&"]["&SiteInfo("logo")&"]
-->" &vbCrLf
response.write "<!-- ID =["&SiteInfo("id")&"]["& SiteInfo("id")&"]
-->"&vbCrLf

Resultat:

<!-- LOGO=[butikken.gif][] --> Første gang OK, anden gang tom!!
<!-- ID=[212][212] --> OK begge gange.

Struktur:
CREATE TABLE `c_site` (
`id` decimal(18,0) NOT NULL,
`host` char(100) collate latin1_danish_ci NOT NULL,
`base` char(50) collate latin1_danish_ci default NULL,
`startmenu` decimal(18,0) default NULL,
`forsidetekst` mediumtext collate latin1_danish_ci,
`meta` mediumtext collate latin1_danish_ci,
`description` mediumtext collate latin1_danish_ci,
`lev_id` decimal(18,0) NOT NULL,
`logo` mediumtext collate latin1_danish_ci,
`aff_id` decimal(18,0) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_danish_ci;

 
 
Stig Johansen (13-11-2008)
Kommentar
Fra : Stig Johansen


Dato : 13-11-08 19:56

Leif Neland wrote:

> IIS på win2003, mysql på linux
>
> Jeg har noget asp, hvor jeg tilsyneladende kun kan læse svar fra
> mysql'en een gang. Hvad f... sker der??

Det er vist generelt for BLOB felter og ODBC.

Jeg er lidt i tvivl om dit 'logo' er et filnavn eller indhold.

--
Med venlig hilsen
Stig Johansen

Leif Neland (13-11-2008)
Kommentar
Fra : Leif Neland


Dato : 13-11-08 22:10

Stig Johansen skrev:
> Leif Neland wrote:
>
>> IIS på win2003, mysql på linux
>>
>> Jeg har noget asp, hvor jeg tilsyneladende kun kan læse svar fra
>> mysql'en een gang. Hvad f... sker der??
>
> Det er vist generelt for BLOB felter og ODBC.
>
> Jeg er lidt i tvivl om dit 'logo' er et filnavn eller indhold.
>

Det er et filnavn, og det er jo ved nærmere eftertanke "spild" at have
det som "`logo` mediumtext collate latin1_danish_ci, "

Det er nu lavet til en varchar(255) i stedet.

Og så kan jeg trække det ud flere gange, som jeg vil.

Hvis jeg lavede
set res = conn.execute(sql)
set kopi = res

Ville jeg så få de samme problemer? Er "kopi" en kopi, eller bare et
alias til det samme?

Problemet var der i øvrigt ikke, nå jeg kører op mod en mssql.

Leif

Jørn Andersen (14-11-2008)
Kommentar
Fra : Jørn Andersen


Dato : 14-11-08 03:24

On Thu, 13 Nov 2008 22:10:04 +0100, Leif Neland <leif@neland.dk> wrote:

>Hvis jeg lavede
>set res = conn.execute(sql)
>set kopi = res
>
>Ville jeg så få de samme problemer? Er "kopi" en kopi, eller bare et
>alias til det samme?

Vil det ikke være mere logisk at gemme de enkelte værdier
(SiteInfo("logo") etc.) som variable i stedet?
Så kan de bruges uendeligt mange gange, og du kan formattere, validere
osv.


Mvh. Jørn

--
Jørn Andersen,
Brønshøj

Stig Johansen (14-11-2008)
Kommentar
Fra : Stig Johansen


Dato : 14-11-08 05:55

Leif Neland wrote:

> Hvis jeg lavede
> set res = conn.execute(sql)
> set kopi = res
>
> Ville jeg så få de samme problemer? Er "kopi" en kopi, eller bare et
> alias til det samme?

Når det er et objekt vil jeg gætte på det er det samme.
Hvis du skal bruge feltet flere gange skal du lægge feltet over i en
variabel og derefter bruge denne.

> Problemet var der i øvrigt ikke, nå jeg kører op mod en mssql.

Med MS SQLServer bruger du højst sandsynligt OLE DB og ikke ODBC.

Jeg skrev selv nogle ODBC klienter, men det er nok 10 år siden, så det er
lidt ud af hovedet, men groft sagt:
Hvis du laver en 'select *', hvori der indgår BLOB (felter > 255) returneres
kun de første 255 bytes i den dertil indretteede buffer.
Resten af blob feltet hentes on-demand med følgende pseudokode:
repeat
read datablock into buffer
until end of data.

Denne læsning kan ikke gentages, da den flytter nogle pointere internt.
Ved læsning 2. gang eller senere får man formentlig Null eller lign.

Jeg mener også at have haft problemer hvis BLOB ikke lå sidst i
recordsættet, da det 'ødelagde' resten af bufferne.

Jeg undgår generelt blob felter i selve tabellen, da det kan give sindsygt
dårlig performance ved søgninger.

Hvis jeg f.eks. skal knytte et billede til en person, laver jeg en
billedetabel og hægter det på med en eller anden id.

Mht. OLE DB, så gætter jeg på den selv laver en 'arbejdskopi' af felterne,
så man kan hente dem flere gange.

Om det er godt eller dårligt afhænger lidt af omstændighederne.

Ved større multiuser systemer vil det nok give et uforholdsmæssigt stort
memory forbrug, men så er det nok ikke ASP man bruger.

--
Med venlig hilsen
Stig Johansen

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste