Avatar billede atheist Nybegynder
26. januar 2009 - 14:10 Der 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>&nbsp;</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?

På forhånd tak
-Atheist
Avatar billede fennec Nybegynder
26. januar 2009 - 14:15 #1
Du skal ikke have " omkring en kolonne i en count pluds du mangler et mellemrum tilsidst i where:

RS2.open "SELECT COUNT(Mad) AS MealCount FROM Tilmelding WHERE LejrID=" + ID + " AND Maaltid=" + i + " AND Mad",Drejer,3
Avatar billede atheist Nybegynder
26. januar 2009 - 19:05 #2
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?
Avatar billede atheist Nybegynder
26. januar 2009 - 19:44 #3
Fandt ud af det. Det skulle være
"&i&" og ikke "+i+", nogen der kan forklare hvorfor så?
Avatar billede fennec Nybegynder
27. januar 2009 - 08:15 #4
Gud ja. Den havde jeg slet ikke set...

ASP (VBScript) bruger & når man lægger 2 tekststrenge sammen. Og + når man lægger tal sammen.

Det er nu engang sådan sproget er, så der er ikke nogen "forklaring" på det. Sådan er det bare :)
Avatar billede fennec Nybegynder
27. januar 2009 - 08:16 #5
Kørte du JScript i stedet skulle du bruge + til at lægge tekster sammen, men så er det et helt andet sprog du er ovre i...
Avatar billede softspot Forsker
28. januar 2009 - 20:11 #6
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 :-)).
Avatar billede atheist Nybegynder
28. januar 2009 - 20:14 #7
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?
Avatar billede softspot Forsker
28. januar 2009 - 20:24 #8
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).
Avatar billede softspot Forsker
28. januar 2009 - 20:25 #9
Velbekomme :)
Avatar billede fennec Nybegynder
29. januar 2009 - 08:54 #10
.o) <-- One Eyed Jack
Avatar billede softspot Forsker
01. februar 2009 - 21:43 #11
Tak for point :)
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

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