Avatar billede jss Nybegynder
16. juni 2004 - 21:15 Der 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 ?
Avatar billede lkekspert Nybegynder
16. juni 2004 - 21:45 #1
Får du nogen fejlmeddelelser?
Løber den løkken igennem?
Hvad er datatyperne på projektID og item?
Avatar billede jss Nybegynder
16. juni 2004 - 22:06 #2
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 ?
Avatar billede lkekspert Nybegynder
16. juni 2004 - 22:15 #3
Det burde den, ja. Er du sikker på der er records i dit recordset?
Avatar billede stoney96 Nybegynder
16. juni 2004 - 22:16 #4
Din objRS("ProjektID") er givetvis en nummerisk værdi og item er nok en strengværdi.

Prøv med:

If objRS("ProjektID") = CInt(item)
Avatar billede stoney96 Nybegynder
16. juni 2004 - 22:26 #5
"for each item in request.form()"

- item giver NAVNET på form-feltet

- request.form(item) giver VÆRDIEN af formfeltet

Nu ved jeg jo ikke om det er navnet eller værdien du tester på. Hvis det er værdien så skal du have en sætning som:

if objRS("ProjektID") = CInt(request.form(item)) Then ......
Avatar billede lkekspert Nybegynder
16. juni 2004 - 22:34 #6
Tællevariabel:

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
Avatar billede jss Nybegynder
18. juni 2004 - 10:06 #7
Hej igen og undskyld ventetiden ....

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 ?
Avatar billede stoney96 Nybegynder
18. juni 2004 - 10:42 #8
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.....
Avatar billede jss Nybegynder
18. juni 2004 - 10:50 #9
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.
Avatar billede jss Nybegynder
18. juni 2004 - 10:53 #10
jeg er nødt til at smutte nu, kigger først på det i aften igen - EFTER landskampen ... :-)
Avatar billede lkekspert Nybegynder
18. juni 2004 - 11:40 #11
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.
Avatar billede lkekspert Nybegynder
18. juni 2004 - 11:47 #12
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.
Avatar billede jss Nybegynder
21. juni 2004 - 10:58 #13
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.
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
Kurser inden for grundlæggende programmering

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