16. juni 2004 - 21:15Der er
10 kommentarer og 3 løsninger
Loop i loop
Hej Er gået i stå ved et "loop i loop", hvor jeg vil sammenligne indholdet fra en form med et recordset. Det skal bruges til at lave en UPDATE på en eller flere poster i databasen. Jeg får ganske enkelt ikke noget match overhovedet - og jeg har tjekket at der er "items" i min form.
with objRS .open strSQL, strConnect, adOpenForwardOnly, adLockReadOnly for each item in request.form() while not objRS.EOF if objRS("ProjektID") = item Then strSQL = "UPDATE tblProjekt SET Aktiv = -1 WHERE ProjektID = " & item end if conn.execute(strSQL) Response.Write strSQL & "<br>" objRS.movenext wend next .close end with
Kan det være noget med format på record vs. item ?
Jeg får ingen fejlmeddelser, min Response.Write skriver bare ikke noget ud (og det burde den hvis løkken fungerer) ProjektID er af typen tal, mens item er et element i min Form-collection. Hvordan kan jeg tjekke om den løber igennem løkken ?
Dim taellevar taellevar = 0 with objRS .open strSQL, strConnect, adOpenForwardOnly, adLockReadOnly for each item in request.form() while not objRS.EOF taellevar = taellevar +1 if objRS("ProjektID") = item Then strSQL = "UPDATE tblProjekt SET Aktiv = -1 WHERE ProjektID = " & item end if conn.execute(strSQL) Response.Write strSQL & "<br>" Response.Write taellevar objRS.movenext wend next .close end with
stoney96: jeg ønsker netop NAVNET på form-feltet og det fungerer fint har jeg testet. Men hvis jeg skriver CInt(item) fejler den: Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D) Typer stemmer ikke overens: 'CInt' /intranet/content/timesag.asp, line 437
lkekspert: tak for forslag til tællevariabel. Den viser korrekt at der er 10 poster i recordset (jeg har lavet en SELECT TOP 10 .....
Så det er noget med format på item, men CInt fungerer ikke rigtig. Kender I andre ?
Hvis det er navnet på form-feltet du bruger, så skal du ikke bruge CInt da denne funktion konverterer til en heltal.
Så skal det se ud som dette...: if objRS("ProjektID") = item Then ...... - som du oprindeligt havde.
Er du sikker på at database-feltet ProjektID ikke er nummerisk..?
Det ser ud som om din sql-sætning forventer at ITEM er nummerisk: strSQL = "UPDATE tblProjekt SET Aktiv = -1 WHERE ProjektID = " & item - da der ellers mangler enkeltplinger ' Hvis ProjektID er tekstfelt så skal din sqlsætning ændres til strSQL = "UPDATE tblProjekt SET Aktiv = -1 WHERE ProjektID = '" & item & "'" - altså, med enkeltplinger i.....
har lige studeret lidt nærmere på formater: objRS("ProjektID") er af type 3 = vbLong (Indicates a long integer) item er type 8 = vbString (Indicates a string) kilde: http://www.w3schools.com/vbscript/func_vartype.asp
Så jeg sammenligner altså pærer og bananer og derfor får jeg intet resultat af mit loop. Men hvad gør jeg så - jeg vil jo gerne have item til at være numerisk.
Hvis det er navnet på dine form-felter du skal bruge, de vil jo så altid være af typen vbString, kan jeg ikke se andre muligheder end du lavet din datatype om i din database.
Alternativt kan du prøve at konvertere ProjektID til en streng: If CStr(objRS("ProjektID")) = item Then
...det skulle der vel egentlig ikke være nogen problemer med, det eneste du bruger ProjektID til er at sammenligne med item - også i din update-sætning.
Tak for jeres indsats, jeg kom et stykke videre. Men jeg blev nødt at "bytte" rundt på de 2 loops således at recordsettet looper yderst og request.form inderst.
Synes godt om
Ny brugerNybegynder
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.