|
| 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
| |
|
|