[ASP] While in while loop? Mogelijk?

Pagina: 1
Acties:

  • MADG0BLIN
  • Registratie: Juni 2001
  • Laatst online: 27-05 15:45
We willen met de gegevens uit een access database een menu maken.
Dit moet er zo uit komen te zien:

code:
1
2
3
4
5
6
7
8
9
10
11
12
Fabrikant Soort
- Type
- Type
- Type
Fabrikant Soort
- Type
- Type
- Type
Fabrikant Soort
- Type
- Type
- Type


Nu moeten we uit de database Fabrikant, Soort en Type halen wat allemaal in dezelfde tabel (tabelnaam: modellen)staat.

Wat we geprobeerd heben is het volgende:

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%
Session.lcid = 1043
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open(Server.Mappath("database/intertechno.mdb"))
set rs = Server.CreateObject("ADODB.recordset")
set rs2 = Server.CreateObject("ADODB.recordset")
switch = True
sql = "SELECT modellen.fabrikant, modellen.Soort FROM modellen WHERE (((modellen.fabrikant)='Atlas' Or (modellen.fabrikant)='Bobcat')) GROUP BY modellen.fabrikant, modellen.Soort"
sql2 = "SELECT modellen.type FROM modellen WHERE (((modellen.fabrikant)='Atlas' Or (modellen.fabrikant)='Bobcat')) GROUP BY modellen.fabrikant, modellen.Soort, modellen.type"
rs.Open sql, conn
rs2.Open sql2, conn

                
                Do While not RS.EOF
                RS.movefirst
                  response.Write("<tr>")
                  response.Write("<td height=18 >"+rs.fields("fabrikant") + " " + rs.fields("soort")+"</td>")
                  response.Write("</tr>")
                     While not RS.EOF
                        RS2.MoveFirst
                      response.Write("<tr>")
                      response.Write("<td height=18>"+rs2.fields("type")+ "</td>")
                      response.Write("</tr>")
                        RS2.movenext
                    wend
                rs.movenext 
                Loop

%> 


We hebben een tabel weggehaald, anders wordt het zoveel code. :)
Maar dit werkt dus niet.
We hebben het idee dat hij blijft doorgaan. :?
Iemand een tip hoe we verder kunnen gaan, of waarom dit niet werkt?
We hoeven geen kant en klare oplossing, maar we komen gewoon niet verder.
Ik hoop dat het genoeg info is, anders hoor ik het graag. :Y)
Alvast bedankt. :)

[ Voor 11% gewijzigd door MADG0BLIN op 01-03-2004 12:47 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Als dit je code is, klopt er idd geen donder van. Je creert een endless loop,omdat je steeds naar je eerste record gaat. Verder zal hij nooit je 2e loop in gaan, omdat je in je 2e loop RS.EOF nooit zal bereiken, aangezien dit al eerder afgevangen wordt door je 1e While loop.

Verder klopt je groepering ook niet van je subitems; deze worden nu allemaal weergegeven en niet begrensd door de hoofdloop.

[ Voor 46% gewijzigd door gorgi_19 op 01-03-2004 12:52 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Edd
  • Registratie: Januari 2001
  • Laatst online: 00:01

Edd

Misschien dat je ipv de 2de "While not RS.EOF" er "While not RS2.EOF" van maakt en de MoveFirst voor de While doet dat het dan wel gaat werken.

-


  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 21-07-2025

Fatamorgana

Fietsen is gezond.

ff een gokje, ben geen ster in VB script... Maar zoiets zal meer in de richting komen lijkt me:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
                RS.movefirst
                Do While not RS.EOF
                  response.Write("<tr>")
                  response.Write("<td height=18 >"+rs.fields("fabrikant") + " " + rs.fields("soort")+"</td>")
                  response.Write("</tr>")
                     RS2.MoveFirst
                     While not RS2.EOF
                      response.Write("<tr>")
                      response.Write("<td height=18>"+rs2.fields("type")+ "</td>")
                      response.Write("</tr>")
                        RS2.movenext
                    wend
                 rs.movenext 
                Loop

  • MADG0BLIN
  • Registratie: Juni 2001
  • Laatst online: 27-05 15:45
Fatamorgana schreef op 01 maart 2004 @ 12:52:
ff een gokje, ben geen ster in VB script... Maar zoiets zal meer in de richting komen lijkt me:

code:
1
      Werkt...
Deze werkt dus, alleen krijg ik nu onder Fabrikant Soort elke type wat in de database staat, en niet het type wat bij de Fabrikant en Soort hoort.
Zo krijg ik hem:

Fabrikant 1 Soort 1
- Type 1
- Type 2
- Type 3
- Type 4
- Type 5
- Type 6
Fabrikant 1 Soort 2
- Type 1
- Type 2
- Type 3
- Type 4
- Type 5
- Type 6

Terwijl het zo moet:

Fabrikant 1 Soort 1
- Type 1
- Type 2
- Type 3
Fabrikant 1 Soort 2
- Type 4
- Type 5
- Type 6

Is het dan verstandig om een extra sql/rs te gebruiken of kan ik beter heel mijn ontwerp gaan aanpassen?
Alvast bedankt voor zover. :)

  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 27-05 11:53
MADG0BLIN schreef op 01 maart 2004 @ 14:03:
[...]


Deze werkt dus, alleen krijg ik nu onder Fabrikant Soort elke type wat in de database staat, en niet het type wat bij de Fabrikant en Soort hoort.
Zo krijg ik hem:

Fabrikant 1 Soort 1
- Type 1
- Type 2
- Type 3
- Type 4
- Type 5
- Type 6
Fabrikant 1 Soort 2
- Type 1
- Type 2
- Type 3
- Type 4
- Type 5
- Type 6

Terwijl het zo moet:

Fabrikant 1 Soort 1
- Type 1
- Type 2
- Type 3
Fabrikant 1 Soort 2
- Type 4
- Type 5
- Type 6

Is het dan verstandig om een extra sql/rs te gebruiken of kan ik beter heel mijn ontwerp gaan aanpassen?
Alvast bedankt voor zover. :)
Je loopt nu elke keer door de ZELFDE instantie van RS2 heen. Je moet RS2 elke keer opnieuw declaren bij elke Fabrikant

Dat is dus het hele eieren eten

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Ik zou proberen of je het niet met een query kan doen met een simpele join. Ik weet niet precies wat je wil doen maar dat moet denk ik ook wel kunnen hier.
offtopic:
Even tussendoor: het is een goeie gewoonte om alle variabelen die je in ASP gebruikt te declareren met Dim. En bij de meeste mensen staat option explicit ook aan bovenaan de code (waardoor je MOET declareren).

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • MADG0BLIN
  • Registratie: Juni 2001
  • Laatst online: 27-05 15:45
Bedankt voor de hulp mensen. _/-\o_

Hebben het wel iets anders gedaan, maar hier nog even de oplossing:

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<%
Session.lcid = 1043
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open(Server.Mappath("database/intertechno.mdb"))
set rs = Server.CreateObject("ADODB.recordset")

sql = "SELECT modellen.fabrikant, modellen.Soort, modellen.type FROM modellen GROUP BY modellen.fabrikant, modellen.Soort, modellen.type"
rs.Open sql, conn
dim fab, soort

%>
<table> 
  <%
                RS.movefirst
                Do While not RS.EOF
                  if fab <> rs.fields("fabrikant") then
                    response.Write("<tr>")
                    response.Write("<td height=18 ><b>"+rs.fields("fabrikant")+" "+rs.fields("Soort")+"</b></td>")
                    response.Write("</tr>")
                  else
                  if soort <> rs.fields("soort") then
                    response.Write("<tr>")
                    response.Write("<td height=18 ><b>&nbsp;"+rs.fields("fabrikant")+" "+rs.fields("Soort")+"</b></td>")
                    response.Write("</tr>")
                 end if
                    response.Write("<tr>")
                    response.Write("<td height=18 >&nbsp;&nbsp;"+rs.fields("type")+"</td>")
                    response.Write("</tr>")
                end if                            
                fab = rs.fields("fabrikant")
                soort = rs.fields("soort")
                  rs.movenext 
                Loop
%> 
</table> 

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Even wat tips voor het gebruik van SQL:
1) Wanneer je maar uit één tabel data haalt, hoef je niet overal tabel.veldnaam te gebruiken, en volstaat alleen de veldnaam.
2) Veldnamen als type zijn niet echt handig gekozen. TYPE is namelijk een SQL keyword.
3) Het is een goeie gewoonte jezelf aan te leren veld- en tabelnamen in kleine letters te schrijven, dus ook geen hoofdletter in het begin zoals bij jou "Soort".

Dan nog een kleine opmerking over je code. Die RS.MoveFirst op regel 15 is lichtelijk overbodig. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1