26. januar 2009 - 14:10Der er
9 kommentarer og 2 løsninger
Type mismatch med ja/nej kolonne
ok, det er bare herligt at lære et nyt sprog:
Jeg prøver at lave en total af hvor mange der spiser til et bestemt måltid, og har noget kode der ser sådan her ud:
For i = 1 to RS1("Maaltider") RS2.open "SELECT COUNT(""Mad"") AS MealCount FROM Tilmelding WHERE LejrID=" + ID + "AND Maaltid=" + i + " AND Mad",Drejer,3 response.write("<td nowrap>" + RS1("MealCount") + "</td>") if ((count mod 3) = 0) then response.write("<td> </td>") end if count = count+1 RS2.close next response.write("<tr>")
Jeg får så fejlen Type Mismatch og den peger på mine dobbelte " i SELECT COUNT(""Mad"") Er der nogen der lige ligger inde med hvad jeg skal gøre for at det kommer til at virke?
ok, det var ikke det, men jeg har leget lidt mere med det, og er kommet frem til følgende:
Det her virker: RS2.open "SELECT COUNT(""Mad"") AS MealCount FROM Tilmelding WHERE LejrID=" + ID +" AND Maaltid= 5 AND Mad",Drejer,3
Det her virker ikke: RS2.open "SELECT COUNT(""Mad"") AS MealCount FROM Tilmelding WHERE LejrID=" + ID +" AND Maaltid= "+i+" AND Mad",Drejer,3
Jeg undersøgte i med Typename(), og den sagde at i er long. I access databasen, står kolonnen "Maaltid" som værende 'tal', er det noget der leder mod en løsning?
Man kan normalt godt benytte + til at lægge strenge samme i VBScript, men pga. den typekonvertering som VBS selv laver i baggrunden, kan man risikere at strenge med numeriske værdier bliver beregnet som tal i stedet for lagt samme som strenge. Derfor er det mere sikkert at benytte & til strengsammensætning i VBS, da man så undgår den faldgrube (det gælder om at få nogle gode solide vaner når man lærer et sprog, så man kan navigere udenom alle de basale fejlsituationer :-)).
ok, jeg takker for 2 gode svar, og jeg tillader mig at dele lige over, Fennec brugte tid på at komme med et forslag og samtidig svarede han på mit opfølgende spørgsmål.
Softspot kom med et længere og mere udtømmende svar, så hvis i smider et svar begge to?
Det lader dog til at VBS kigger på undertypen af en variabel og hvis begge variabler i et sammesætningsudtryk er strenge vil de blive sammensat som strenge - også selv om det er rene tal. Eksempelvis vil følgende ske
response.write "1" + "2" ' der udskrives "12" response.write 1 + "2" ' der udskrives "3" response.write 1 + "a" ' der rejses en type mismatch kørselsfejl!
Hvis man skulle have den sidste linie til at virke, ville det kræve en eksplicit konvertering af tallet 1 til en string, således:
response.write cstr(1) + "a" ' der udskrives "1a"
Det betyder at du i dit tilfælde nok skulle have skrevet:
RS2.open "SELECT COUNT(""Mad"") AS MealCount FROM Tilmelding WHERE LejrID=" + cstr(ID) +" AND Maaltid= "+cstr(i)+" AND Mad",Drejer,3
i stedet for din oprindelige version. At ID måske ikke skulle konverteres, skyldes givetvis at den hentes fra en Request.QueryString, som allerede er en streng (hvis den ikke er empty).
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.