Avatar billede loukas Mester
24. august 2003 - 11:39 Der er 18 kommentarer og
1 løsning

loop i loop i loop

Jeg har 3 tabeller i databasen
1.: hovedkategori
2.: kategori1
3.: kategori2

Der skal laves en dropdown/selectbox
Problemet opstår når sidste kategori skal skrives ud.

strSQL2 = "SELECT * FROM kategori2 WHERE Kat1id=7;" virker fint, men
strSQL2 = "SELECT * FROM kategori2 WHERE Kat1id=2&strKat1id&";" virker ikke ??





KODEN:

strSQL = "SELECT * FROM hovedkategori;"
Set rs = Conn.Execute(strSQL)


        Response.Write "<SELECT id=select1 name=select1>"
        Do
        intKatid = rs("Katid")
        Response.Write "<OPTION value="""">"&rs("Katnavn")&"</OPTION>"
       
       
                                strSQL1 = "SELECT * FROM kategori1 WHERE HovedKatid="&intKatid&";"
                                Set rs1 = Conn.Execute(strSQL1)
                                    Do
                                    strKat1id= rs1("Kat1id")
                                    Response.Write "<OPTION value="""">- - "&rs1("Kat1navn")&"</OPTION>"
                               
                                                       
                                                       
                                                        strSQL2 = "SELECT * FROM kategori2 WHERE Kat1id=7;" '<----------------HER ---------
                                                        Set rs2 = Conn.Execute(strSQL2)
                                                            Do
                                                            Response.Write "<OPTION value=""""> - - - -"&rs2("Kat2navn")&"</OPTION>"
                                                            rs2.movenext
                                                            Loop while not rs2.EOF
                                                        Set rs2 = nothing
                                                       
                                   
                                    rs1.movenext
                                    Loop while not rs1.EOF
                                Set rs1 = nothing
       
       
        rs.movenext
        Loop While Not rs.EOF
Avatar billede martinhh Nybegynder
24. august 2003 - 11:43 #1
Prøv med strSQL2 sådan her:

strSQL2 = "SELECT * FROM kategori2 WHERE Kat1id=" & strKat1id
Avatar billede loukas Mester
24. august 2003 - 11:51 #2
nææ, desværre martinhh
Avatar billede martinhh Nybegynder
24. august 2003 - 11:51 #3
Hvilken fejlmeddelelse får du?
Avatar billede loukas Mester
24. august 2003 - 11:57 #4
ingen.
den stopper bare

Den skriver således:

Hovedkategori
- - kategori1

og så kommer den ikke videre ?
Avatar billede loukas Mester
24. august 2003 - 11:58 #5
det lader til at intKat1id = rs1("Kat1id") ikke har nogen værdi ?
men hvorfor :-(
Avatar billede martinhh Nybegynder
24. august 2003 - 12:00 #6
Må jeg se HELE din sourcekode...?
Avatar billede loukas Mester
24. august 2003 - 12:00 #7
jo da


KODEN:

<!-- #include file="../img/conn.inc" -->

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
Conn.Open strConnect

strSQL = "SELECT * FROM hovedkategori;"
Set rs = Conn.Execute(strSQL)


        Response.Write "<SELECT id=select1 name=select1>"
        Do
        intKatid = rs("Katid")
        Response.Write "<OPTION value="""">"&rs("Katnavn")&"</OPTION>"
       
       
                                strSQL1 = "SELECT * FROM kategori1 WHERE HovedKatid="&intKatid&";"
                                Set rs1 = Conn.Execute(strSQL1)
                                    Do
                                    intKat1id = 7
                                    Response.Write "<OPTION value="""">- - "&rs1("Kat1navn")&"</OPTION>"
                               
                                                       
                                                   
                                                        strSQL2 = "SELECT * FROM kategori2 WHERE Kat1id=" & intKat1id
                                                        Set rs2 = Conn.Execute(strSQL2)
                                                            Do
                                                            Response.Write "<OPTION value=""""> - - - -"&rs2("Kat2navn")&"</OPTION>"
                                                            rs2.movenext
                                                            Loop while not rs2.EOF
                                                        Set rs2 = nothing
                                                       
                                   
                                    rs1.movenext
                                    Loop while not rs1.EOF
                                Set rs1 = nothing
       
       
        rs.movenext
        Loop While Not rs.EOF
       

   
   
Conn.Close

Set Conn = Nothing
set rs= nothing
%>
</SELECT>
Avatar billede nielle Nybegynder
24. august 2003 - 12:02 #8
Oversat til korrekt ASP bliver:

strSQL2 = "SELECT * FROM kategori2 WHERE Kat1id=2&strKat1id&";"

- til

strSQL2 = "SELECT * FROM kategori2 WHERE Kat1id=2" & strKat1id

Spørgsmål:

1) Er det med vilje at du havde et 2-tal lige efter dit =-tegn?
2) Er du sikker på at variablen strKat1id overhovedet indeholder noget?
Avatar billede martinhh Nybegynder
24. august 2003 - 12:03 #9
Skift den her linje:

Conn.Open strConnect

ud med dene:

Conn.Open DSN

Og fjern " ; " det tegn fra dine SQL-sætninger
Avatar billede martinhh Nybegynder
24. august 2003 - 12:04 #10
Nej, vent hvad står der i conn.inc ??
Avatar billede loukas Mester
24. august 2003 - 12:04 #11
strKat1id = er tom, men hvorfor ???
Avatar billede loukas Mester
24. august 2003 - 12:06 #12
Den fungere fint.

conn.inc :
<%
strconnect = "Data Source=C:\Inetpub\wwwroot\test\db\database1.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"
%>
Avatar billede loukas Mester
24. august 2003 - 12:10 #13
hvis jeg skriver:
intKat1id = 7
så virker det

men intKat1id = rs1("kat1id")
virker ikke, fordi intKat1id er tom
Avatar billede martinhh Nybegynder
24. august 2003 - 12:16 #14
loukas du skal fjerne alle de sjove semi-kolons du har ( ; )! Og så ændre du i din conn.inc, så den ser sådan her ud:

conn.inc :
<%
strconnect = "Data Source=C:\Inetpub\wwwroot\test\db\database1.mdb;Provider=Microsoft.Jet.OLEDB.4.0;" & DSN
%>

Og i øvrigt er jeg i tvivl om at ADODB.connection kan eksekvere 3 SQL sætninger på én gang...!
Avatar billede nielle Nybegynder
24. august 2003 - 12:19 #15
Blot en kommentar... I stedet for at bruge:

do
  ...
  rs.MoveNext
loop until rs.eof

- bør du bruge

do while not rs.eof
  ...
  rs.MoveNext
loop

Den første version vil nemlig forsøge at køre løkken mindst en gang, også selv om SQL forespørgelsen giver et tomt resultat. Dette vil give dig en fejlmeddelelse.
Avatar billede martinhh Nybegynder
24. august 2003 - 12:19 #16
Og det jeg sagde lige ovenover er selvfølgelig noget lort, du skal ikke ændre i conn.inc, men hvorfor har du strengen "DSN"?? Ser ikke ud til at den bliver anvendt i scriptet
Avatar billede nielle Nybegynder
24. august 2003 - 12:21 #17
Hvis rs1("kat1id") er tom så forklare det fint problemet. Den resulterende kode er nemlig ikke korrekt SQL. Så spørgsmålet er vel snarer "hvorfor er rs1("kat1id") tom"?
Avatar billede martinhh Nybegynder
24. august 2003 - 12:23 #18
Fordi Semikolons hører ikke med i sql sætningener
Avatar billede loukas Mester
24. august 2003 - 14:17 #19
ok, her er forklaringen.
Hvis resultatet i sidste sql-sætning var tom stoppede hele koden.
Tak for hjælpen.
nielle var tæt på, oog fik mig til at finde fejlen.



                                                        strSQL2 = "SELECT * FROM kategori2 WHERE Kat1id=" & intKat1id
                                                        Set rs2 = Conn.Execute(strSQL2)
                                                       
                                                            if rs2.eof then
                                                                Response.Write ""
                                                            Else
                                                           
                                                                Do
                                                                Response.Write " - - - -"&rs2("Kat2navn")&"<br>"
                                                                rs2.movenext
                                                                Loop while not rs2.EOF
                                                            End if
                                                           
                                                        Set rs2 = nothing
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