Avatar billede heenet Novice
10. december 2009 - 10:55 Der er 10 kommentarer og
1 løsning

Longtext felt med data bliver pludselig til null i ASP koden?

Jeg har lavet en side hvor jeg mere praktisk kan opdaterer min database. Siden er lavet i ASP vbScript og har kørt ok i flere år.
Min webudbyder lavede i weekenden en større opdatering i deres system, og flere opdateringer i mandags.
Jeg sidder og bruger siden i mandags, som pludselig holder op med at fungerer, og det er i koden det går galt, og det var ikke det jeg arbejdede med.

Problemet er, at jeg henter txt fra MySQL tabellen, hvor jeg udskifter linieskift med <br> med en replace funktion, men nu får jeg fejlen:
Microsoft VBScript runtime  error '800a005e'
Invalid use of Null

Jeg kan godt skrive teksten ind på siden direkte, men når jeg vil bruge replace eller len så er værdien pludselig null.

Det har som sagt virket i flere år, og holder pludselig op samtidig med at min udbyder opdaterer. Burde det så ikke være en fejl eller lignende i deres system?

Eller kan det være noget andet?

Feltet jeg henter fra er Datatypen Longtext og jeg tillader ikke værdien null. Det mest mystisk er, at problemet ikke er konsekvent, for fejlen sker hvor jeg administrerer teksten, men en næsten identisk kode til præsentation af samme tekst på min hjemmeeside, virker.
Det holdt dog op med at virker alle steder i første omgang, hvor jeg havde en funktion til replace, men efter at have droppet funktionen og lagt replace koden ind alle steder i stedet, så er det kun det ene sted, at det ikke virker. Lige inden jeg får fejlen laver jeg en replace af data fra et andet longtext felt, som ikke fejler.

Hvis nogen kan se logikken, og fortælle mig hvad jeg skal gøre, eller endnu bedre, hvad jeg skal bede min udbyder gøre, så er der max point!
Avatar billede erikjacobsen Ekspert
10. december 2009 - 11:03 #1
Du skal gøre følgende:

Aflæs felterne i dit record set i samme rækkefølge som de står i SELECT-sætning, og præcis en gang. (måske skal du endda have de store felter til sidst)

...og sådan har man egentlig altid skullet gøre...
Avatar billede heenet Novice
10. december 2009 - 11:17 #2
det er lidt hårdt ved fleksibiliteten, og lyder i mine øre lidt underligt, og hvordan skal det have indflydelse på at der er tekst i feltet ved response.write(longtext) og værdien er null ved len(longtext)?
Avatar billede erikjacobsen Ekspert
10. december 2009 - 11:26 #3
Ikke spor underligt - disse krav gør det muligt at have en mere effektiv kode i databasedriveren. Nogle implementationer tillader så at man tager den i tilfældige rækkefølger osv - du har bare være heldig indtil nu.

Jeg forstår ikke den sidste del af dit spørgsmål - kan du vise noget konkret kode?
Avatar billede pi-hus Nybegynder
10. december 2009 - 11:46 #4
Ja, det er forskelligt fra driver til driver, og database-version til database-version.

Men hvis du:
- Sætter TEXT og lign til sidst i SELECT-sætningen
- Kun henter dem ud af record-sættet een gang
Så burde det virke hver gang.


Når jeg skal se om der er indhold i et TEXT-felt gør jeg følgende:


indhold = RS("feltnavn")
If len(indhold) > 0 Then
  response.write indhold
End If


På den måde hentes feltet een gang fra record-sættet, og derefter kigges der på variablen i stedet for.
Avatar billede heenet Novice
10. december 2009 - 12:04 #5
Jeg var lige ved at sende dig koden, men ville lige overskueliggøre den lidt, og så virkede det.

Jeg havde fået det lidt uoverskuligt ved at skulle få det til at vise ete eller andet, og derfor hentede jeg data fra databasen flere gange. dette lavede jeg om til kun at hente det en gang ind i en variabel.
Det synes jeg, at jeg prøvede igår også, men der har måske været sneget sig noget andet ind.
Lidt længere nede i koden henter jeg igen samme data ind fra databasen, men det fejler ikke?

Nok om det, for nu virker det, og det med udgangspunkt i det du skrev.

Jeg er ved at lave det hele om, og jeg er ikke begyndt at kode endnu, så jeg vil gerne have styr på dit indlæg.

Når jeg henter data med select * from tabel, skal jeg så tage alle kolonner ind i rækkefølge? da jeg ikke altid bruger data i samme rækkefølge, så må jeg jo kunne lægge det i variabler og bruge dem i vilkårlig rækkefølge?
Hvis du ikke skal modsige dig selv, skal jeg så have de tungeste felter til sidst i rækken i tabellen, i dette tilfælde min 2 longtext felter?

Sidste spørgsmål: Vil du ikke have pointene?
Avatar billede heenet Novice
10. december 2009 - 12:09 #6
Jeg havde så ikke lige set pi-hus indlæg inde jeg sendte, og det svarer jo egentlig på mine spørgsmål.

Hvis erikjacobsen mener han ikke vil have pointene, så er det fint med mig, så får pi-hus dem jo bare, selvom han jo bare omskriver erikjacobsens svar.
Så erikjacobsen, smid et svar, eller skriv nej tak :-)
Avatar billede erikjacobsen Ekspert
10. december 2009 - 12:20 #7
Nej tak ;)
Avatar billede erikjacobsen Ekspert
10. december 2009 - 12:21 #8
Hovsa:  Man bør ikke bruge

  select * from tabel

men nævne felterne

  select felt1,felt2 from tabel

og så tage dem i samme rækkefølge
Avatar billede heenet Novice
10. december 2009 - 12:32 #9
Bør man aldrig bruge select *
Hvad hvis man skal bruge alle felter, eller f.eks. 18 af 20 felter.
Bør man så stadig tage hvert enkelt felt som du skriver.
har man en tabel med 4 kolonner, så er den eneste forskel på "select felt1,felt2,felt3,felt4 from tabel" og "select * from tabel" vel at det sidste er hurtigere at skrive, eller?

Jeg er også lige nød til at høre hvad der irriterer dig så meget ved pointsystemet, at du har valgt at boykotte det :-)

Der er snart nogle billigere point på vej til pi-hus..
Avatar billede pi-hus Nybegynder
10. december 2009 - 12:49 #10
Meget forsimplet.... 

Hvis du bruger SELECT *, så skal systemet først slå op hvilke felter der findes i tabellen.

Hvis du bruger SELECT felt1, felt2, felt3 så er felterne allerede givet, og der spares et opslag.


På den sidste måde kan du også styre hvor i rækkefølgen dine TEXT (og lign) felter ligger.
Avatar billede heenet Novice
10. december 2009 - 13:30 #11
Det giver mening :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester