Avatar billede fauer Nybegynder
04. juni 2005 - 23:45 Der er 12 kommentarer og
1 løsning

Hvordan laver jeg loop inde i loop?

Jeg har lavet nedstående og vil gerne flette loop'sne sammen.
Alle steder I BestilTabel hvor KundeTabel.IDkunde = BestilTabel.KundeID. Listes følgende  FFtabel.BilledeID, SortID, NavnID hvor BestilTabel.PlanteID = FFtabel.ID. Sammen med listes også BestilTabel.AntalID, IDpris, UdregnID. Indtil der ikke er flere hvor KundeTabel.IDkunde = BestilTabel.KundeID.

Her er hvor jeg er kommet til og kan ikke længere overskue det, er der mon en anden der kan?

strSQL = "Select * From KundeTabel where LoginID = '" & Session("navn") & "'"
Set rs = Conn.Execute(strSQL)
If rs.eof Then

    Response.Write "Bruger findes ikke"
Else

    strNav = "" & rs("IDkunde") & ""

    'Response.Write strNav
End If
strSQL1 = "Select * From BestilTabel where KundeID = " & strNav & ""
Set rs = Conn.Execute(strSQL1)
Do

        strPlan = "" & rs("PlanteID") & ""

          'Response.Write strPlan

          strAntal = "" & rs("AntalID") & ""

          'Response.Write strAntal

          strUdr = "" & rs("UdregnID") & ""

          'Response.Write strUdr   
strSQL2 = "Select * From FFtabel where ID = " & strPlan & ""
Set rs = Conn.Execute(strSQL2)

        strPlant = "<br>" & rs("NavnID") & "" & strAntal & "" & strUdr & ""

          Response.Write strPlant       
rs.MoveNext
Loop While Not rs.EOF
Avatar billede softspot Forsker
05. juni 2005 - 00:01 #1
Du skal nok bruge to forskellige resultsets, en til det ydre loop (BestilTabel) og en til det indre loop (FFTabel). Hvis det stadig ikke fungerer, kan du forsøge med en forbindelse mere som du udfører det indre loop på (jeg er nemlig ikke sikker på om du kan have to forspørgsler kørende på den samme forbindelse).

Det skulle give noget kode i stil med dette:

'TODO: Opret en ny connection her som du kalder ConnFF
'      Den skal benyttes til at lave opslag i den FFTabel

strSQL = "Select * From KundeTabel where LoginID = '" & Session("navn") & "'"
Set rs = Conn.Execute(strSQL)
If rs.eof Then
    Response.Write "Bruger findes ikke"
Else
    strNav = "" & rs("IDkunde") & ""
End If

strSQL1 = "Select * From BestilTabel where KundeID = " & strNav & ""
Set rs = Conn.Execute(strSQL1)
While Not rs.EOF
  strPlan = "" & rs("PlanteID") & ""
  strAntal = "" & rs("AntalID") & ""
  strUdr = "" & rs("UdregnID") & ""

  strSQL2 = "Select * From FFtabel where ID = " & strPlan & ""
  Set rsFF = ConnFF.Execute(strSQL2)

  While Not rsFF.EOF
    strPlant = "<br>" & rsFF("NavnID") & strAntal & strUdr
    Response.Write strPlant       
    rsFF.moveNext
  Loop

  rs.MoveNext
Loop


Prøv det og lad høre om det kan bruges :)
Avatar billede fauer Nybegynder
05. juni 2005 - 00:11 #2
Jeg får følgende fejlmeddelese:

Microsoft VBScript compilation error '800a0408'
Invalid character
/bestil/kurv2.asp, line 36
Ê Ê Response.Write "Bruger findes ikke"
^
Og brugeren er logget ind.
Avatar billede softspot Forsker
05. juni 2005 - 00:16 #3
Prøv at fjerne mellemrum foran Response.Write i den linie der fejler (eller erstat dem med nogle nye)...
Avatar billede fauer Nybegynder
05. juni 2005 - 00:26 #4
Microsoft VBScript compilation error '800a040e'

'loop' without 'do'
/bestil/kurv2.asp, line 52
Loop
^
Det er den næst sidste loop... hvor skal do ind?
Avatar billede softspot Forsker
05. juni 2005 - 00:33 #5
CRAP! Sorry, der skal vist nok "Do" foran "While", når man slutter med "Loop". Alternativt skal "Loop" udskiftes med "Wend" (den gamle måde at loope med "While" i VB)...
Avatar billede fauer Nybegynder
05. juni 2005 - 00:45 #6
Prøv at kigge det igennem... jeg kan ikke få Do og Loop og Wend til at fungere, uanset hvor og hvordan jeg sætter dem ind.

<%
' Databaseforbindelse1
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../db/FFdatabase.mdb")
Conn.Open DSN

' Databaseforbindelse2
Set ConnFF = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../db/FFdatabase.mdb")
ConnFF.Open DSN

' Den skal benyttes til at lave opslag i den FFTabel
strSQL = "Select * From KundeTabel where LoginID = '" & Session("navn") & "'"
Set rs = Conn.Execute(strSQL)

If rs.eof Then
    Response.Write "Bruger findes ikke"
Else
    strNav = "" & rs("IDkunde") & ""
End If
strSQL1 = "Select * From BestilTabel where KundeID = " & strNav & ""
Set rs = Conn.Execute(strSQL1)

While Not rs.EOF
    strPlan = "" & rs("PlanteID") & ""
    strAntal = "" & rs("AntalID") & ""
    strUdr = "" & rs("UdregnID") & ""

strSQL2 = "Select * From FFtabel where ID = " & strPlan & ""
Set rsFF = ConnFF.Execute(strSQL2)

Do

While Not rsFF.EOF
    strPlant = "<br>" & rsFF("NavnID") & strAntal & strUdr
    Response.Write strPlant
rsFF.moveNext
Loop

rs.MoveNext
Loop

Conn.Close
Set Conn = Nothing
%>
Avatar billede softspot Forsker
05. juni 2005 - 00:58 #7
Dette burde fungere (jeg har flyttet Do ned på samme linie som While for begge while-sætninger). Husk i øvrigt at lukke begge connections efter endt visning (lige nu lukker du kun Conn, men mangler at lukke ConnFF). Du kan godt bruge samme DSN-streng til at åbne begge connections med, da det er den samme streng for begge...

Jeg har rettet koden til i det følgende:

<%
' Databaseforbindelse1
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../db/FFdatabase.mdb")
Conn.Open DSN

' Databaseforbindelse2
Set ConnFF = Server.CreateObject("ADODB.Connection")
ConnFF.Open DSN

' Den skal benyttes til at lave opslag i den FFTabel
strSQL = "Select * From KundeTabel where LoginID = '" & Session("navn") & "'"
Set rs = Conn.Execute(strSQL)

If rs.eof Then
    Response.Write "Bruger findes ikke"
Else
    strNav = "" & rs("IDkunde") & ""
End If
strSQL1 = "Select * From BestilTabel where KundeID = " & strNav & ""
Set rs = Conn.Execute(strSQL1)

Do While Not rs.EOF
    strPlan = "" & rs("PlanteID") & ""
    strAntal = "" & rs("AntalID") & ""
    strUdr = "" & rs("UdregnID") & ""

strSQL2 = "Select * From FFtabel where ID = " & strPlan & ""
Set rsFF = ConnFF.Execute(strSQL2)

Do While Not rsFF.EOF
    strPlant = "<br>" & rsFF("NavnID") & strAntal & strUdr
    Response.Write strPlant
rsFF.moveNext
Loop

rs.MoveNext
Loop

Conn.Close
ConnFF.Close
Set Conn = Nothing
Set ConnFF = Nothing
%>
Avatar billede fauer Nybegynder
05. juni 2005 - 01:09 #8
Nu kommer følgend fejl:
ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
/bestil/kurv2.asp, line 45

Line =     strPlant = "<br>" & rsFF("NavnID") & strAntal & strUdr
Avatar billede softspot Forsker
05. juni 2005 - 01:18 #9
Findes der noget felt i tabellen FFTabel der hedder NavnID?
Avatar billede fauer Nybegynder
05. juni 2005 - 01:24 #10
Næh..... du har ret det hedder DKnavnID!!

Og nu ser det ud til at virke....

Tester lige
Avatar billede fauer Nybegynder
05. juni 2005 - 01:27 #11
Perfekt....
Så send mig lige et svar.

Tak for hjælpen

Mvh fauer
Avatar billede softspot Forsker
05. juni 2005 - 01:28 #12
Det var så lidt :)
Avatar billede fauer Nybegynder
05. juni 2005 - 01:35 #13
For mig var det løsningen på en halv dags arbejde.

Mvh fauer
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