[ASP/forum] DO...LOOP probleem

Pagina: 1
Acties:

  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Ik ben bezig een forum te maken.

Het probleem is dat wanneer ik met een DO...LOOP de categorieen en de fora uit de database wil trekken, hij wel alle categorieen laat zien maar, alleen de fora die hangen onder de eerste categorie weergeeft.

Even een screenie ter illustratie:

Afbeeldingslocatie: http://www.probetrading.com/tweakers/screenshot_forum.gif

Ik heb al verschillende LOOPS en IF statements geprobeerd maar het wil niet lukken.

Ik heb de volgende code:

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<!--#INCLUDE FILE="connection.asp" -->
<!--#INCLUDE FILE="header_test.asp" -->

<%
Set rs = Server.CreateObject("ADODB.Recordset")
strSql = "SELECT " & strPrefix & "CATEGORY.CAT_ID, " & strPrefix & "CATEGORY.CAT_STATUS, " 
strSql = strSql & strPrefix & "CATEGORY.CAT_NAME, " & strPrefix & "CATEGORY.CAT_ORDER "
strSql = strSql & " FROM " & strPrefix & "CATEGORY "
strSql = strSql & " ORDER BY " & strPrefix & "CATEGORY.CAT_ORDER ASC"
strSql = strSql &  ", " & strPrefix & "CATEGORY.CAT_NAME ASC;"
set rs = my_Conn.Execute (strSql)

        Set rsforum = Server.CreateObject("ADODB.Recordset")
        strSql = "SELECT " & strPrefix & "FORUM.FORUM_ID, " 
        strSql = strSql & strPrefix & "FORUM.F_STATUS, " 
        strSql = strSql & strPrefix & "FORUM.CAT_ID, " 
        strSql = strSql & strPrefix & "FORUM.F_SUBJECT, " 
        strSql = strSql & strPrefix & "FORUM.F_URL, " 
        strSql = strSql & strPrefix & "FORUM.F_DESCRIPTION, " 
        strSql = strSql & strPrefix & "FORUM.F_TOPICS, " 
        strSql = strSql & strPrefix & "FORUM.F_COUNT, " 
        strSql = strSql & strPrefix & "FORUM.F_LAST_POST, " 
        strSql = strSql & strPrefix & "FORUM.F_STATUS, " 
        strSql = strSql & strPrefix & "FORUM.F_TYPE, " 
        strSql = strSql & strPrefix & "FORUM.F_PRIVATEFORUMS,  " 
        strSql = strSql & strPrefix & "FORUM.F_ORDER, " 
        strSql = strSql & strMemberPrefix & "MEMBERS.MEMBER_ID, " 
        strSql = strSql & strMemberPrefix & "MEMBERS.M_USERNAME " 
        strSql = strSql & "FROM " & strPrefix & "FORUM " 
        strSql = strSql & "LEFT JOIN " & strMemberPrefix & "MEMBERS ON "
        strSql = strSql & strPrefix & "FORUM.F_LAST_POST_AUTHOR = "
        strSql = strSql & strMemberPrefix & "MEMBERS.MEMBER_ID "
        strSql = strSql & " WHERE " & strPrefix & "FORUM.CAT_ID = " & rs("CAT_ID") & " "
        strSql = strSql & " ORDER BY " & strPrefix & "FORUM.F_ORDER ASC"
        strSql = strSql &  ", " & strPrefix & "FORUM.F_SUBJECT ASC;"
        'response.write strSQL
        set rsForum =  my_Conn.Execute (strSql)

Do while not rs.Eof
%>
<table width="98%" border="0">
  <tr bgcolor="#9D64DD"> 
    <td width="4%">&nbsp;</td>
    <td width="68%"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#CCCCCC">&nbsp;<%=rs("CAT_NAME")%>&nbsp;</font></b></td>
    <td width="15%"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#CCCCCC">&nbsp;Queued</font></b></td>
    <td width="13%">&nbsp;</td>
  </tr>
</table>

<%
if rsForum.eof or rsForum.bof then
response.write ("Geen fora gevonden")
Else

do until rsforum.Eof
%>
<table width="98%" border="0">
  <tr bgcolor="#CEB0EE"> 
    <td width="4%">&nbsp;</td>
    <td width="33%"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#333333">&nbsp;<a href="forum.asp?forumid=<%=rsforum("FORUM_ID")%>"><%=rsforum("F_SUBJECT")%></a></font></td>
    <td width="11%"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#333333">&nbsp;<%=rsforum("F_TOPICS")%></font></td>
    <td width="11%"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#333333">&nbsp;</font></td>
    <td width="13%"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#333333">&nbsp;</font></td>
    <td width="15%">&nbsp;</td>
    <td width="13%">&nbsp;</td>
  </tr>
</table>

<%
rsforum.MoveNext
loop
%>
<%
End If
%>

<%
rs.MoveNext
loop
%>

<%
rs.Close
rsforum.Close
my_Conn.Close
%>

<!--#INCLUDE FILE="inc_footer.asp" -->

[ Voor 23% gewijzigd door Manual op 18-12-2002 12:27 ]

Specs


Verwijderd

Leuk! Een afgeleide van Snitz Forums. Heb ik ook veel mee gedaan. ;)

Wat er bij jou fout gaat, is dat je binen een loop (van categorieën) nog een loop zet (de forums). Dat is op zich wel goed, maar je zal dan wel in de loop van forums eerst een rsForum.MoveFirst zetten omdat je deze recordset herhaaldelijk aanroept. En dan zal daar ook nog een check moeten komen of een forum uit die recordset bij die categorie hoort, denk ik.

Succes.

:7

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 13:53

chem

Reist de wereld rond

ASP:
1
strSql = strSql & strPrefix & "FORUM.F_STATUS, " 

kan dat niet mooier?
ASP:
1
strSql &= strPrefix & "FORUM.F_STATUS, " 
oid?

Klaar voor een nieuwe uitdaging.


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Verwijderd schreef op 18 december 2002 @ 11:48:
Leuk! Een afgeleide van Snitz Forums. Heb ik ook veel mee gedaan. ;)

Wat er bij jou fout gaat, is dat je binen een loop (van categorieën) nog een loop zet (de forums). Dat is op zich wel goed, maar je zal dan wel in de loop van forums eerst een rsForum.MoveFirst zetten omdat je deze recordset herhaaldelijk aanroept. En dan zal daar ook nog een check moeten komen of een forum uit die recordset bij die categorie hoort, denk ik.

Succes.

:7
Is idd afgeleid van Snitz :) Don't hit me ;) Ik gebruik nu het snitz forum maar er zitten een aantal functies niet ingebouwd die ik wel wil hebben en ze gaan het niet maken dus maak ik het zelf maar (als het allemaal goed gaat) :)

Ik ben even bezig met het movefirst verhaal.
chem schreef op 18 december 2002 @ 12:11:
ASP:
1
strSql = strSql & strPrefix & "FORUM.F_STATUS, " 

kan dat niet mooier?
ASP:
1
strSql &= strPrefix & "FORUM.F_STATUS, " 
oid?
Dat kan idd mooier. Wanneer het geheel werkt pas ik de query's aan en maak de code wat fatsoenlijker en niet te vergeten de lay-out :)

Specs


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Het wil niet echt lukken en mijn provider wordt er ook niet vrolijk van, al die 'endless loops' die ik een paar keer gecreeerd heb...

Dit heb ik geprobeerd:

ASP:
1
2
3
4
5
6
7
8
9
10
do while not rsForum.EOF
rsForum.movefirst
%>

Blaat

<%
rsforum.movenext
loop
%>


en dit

ASP:
1
2
3
4
5
6
7
8
9
10
rsForum.movefirst
do while not rsForum.EOF
%>

Blaat

<%
rsforum.movenext
loop
%>


Ik heb al aardig wat doorgelezen over DO...LOOP maar komt er nog niet uit.

Is er misschien een andere/betere manier om dit voor elkaar te krijgen?

Specs


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:14

gorgi_19

Kruimeltjes zijn weer op :9

Spreek eens hardop uit wat je doet bij de eerste:

1. Als je niet aan het einde van je recordset bent.
2. Ga naar de eerste record
3. doe een actie
4. Ga naar de volgende record
5. Ga naar de eerste record

Kortom, endless loop (door 2)

Tweede constructie lijkt te kloppen....

[ Voor 9% gewijzigd door gorgi_19 op 18-12-2002 13:02 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
gorgi_19 schreef op 18 december 2002 @ 12:59:
Spreek eens hardop uit wat je doet bij de eerste:

1. Als je niet aan het einde van je recordset bent.
2. Ga naar de eerste record
3. doe een actie
4. Ga naar de volgende record
5. Ga naar de eerste record

Kortom, endless loop (door 2)
Ja kwam ik net achter |:( :)

Die 2e werkt helaas niet.

[ Voor 4% gewijzigd door Manual op 18-12-2002 13:04 ]

Specs


Verwijderd

Zoiets?:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
If rsCategorieen.RecordCount > 0 Then
  Do While rsCategorieen.EOF
     Print categorie
     ' Per categorie alle fora tonen:
     If rsForums.RecordCount > 0 Then
       rsForums.MoveFirst
       Do While rsForums.EOF
         If rsForums("cat_id") = rsCategorieen("id") Then
           Print forum
         End If
         rsForums.MoveNext
       Loop
     End If
     rsCategorieen.MoveNext
  Loop
End If


:7

offtopic:
Hoe krijg je in godsnaam die mooie regelnummers in deze postings?????

[ Voor 24% gewijzigd door Verwijderd op 18-12-2002 13:16 ]


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Verwijderd schreef op 18 december 2002 @ 13:14:
Zoiets?:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
If rsCategorieen.RecordCount > 0 Then
  Do While rsCategorieen.EOF
     Print categorie
     ' Per categorie alle fora tonen:
     If rsForums.RecordCount > 0 Then
       rsForums.MoveFirst
       Do While rsForums.EOF
         If rsForums("cat_id") = rsCategorieen("id") Then
           Print forum
         End If
         rsForums.MoveNext
       Loop
     End If
     rsCategorieen.MoveNext
  Loop
End If


:7

offtopic:
Hoe krijg je in godsnaam die mooie regelnummers in deze postings?????
Er wordt niets weer gegeven. Groot wit vlak dus en geen foutmelding :'(

Ik heb er dit van gemaakt:

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
37
38
<%
If rsCat.RecordCount > 0 Then
  Do While rsCat.EOF
%>
<table width="98%" border="0">
  <tr bgcolor="#9D64DD"> 
    <td width="4%">&nbsp;</td>
    <td width="68%"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#CCCCCC">&nbsp;<%=rsCat("CAT_NAME")%>&nbsp;</font></b></td>
    <td width="15%"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#CCCCCC">&nbsp;Queued</font></b></td>
    <td width="13%">&nbsp;</td>
  </tr>
</table>
<%    
If rsForums.RecordCount > 0 Then
  rsForums.MoveFirst
   Do While rsForums.EOF
If rsForums("cat_id") = rsCat("id") Then
%>
<table width="98%" border="0">
  <tr bgcolor="#CEB0EE"> 
    <td width="4%">&nbsp;</td>
    <td width="33%"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#333333">&nbsp;<a href="forum.asp?forumid=<%=rsforum("FORUM_ID")%>"><%=rsforum("F_SUBJECT")%></a></font></td>
    <td width="11%"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#333333">&nbsp;<%=rsforum("F_TOPICS")%></font></td>
    <td width="11%"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#333333">&nbsp;</font></td>
    <td width="13%"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#333333">&nbsp;</font></td>
    <td width="15%">&nbsp;</td>
    <td width="13%">&nbsp;</td>
  </tr>
</table>
<%
           End If
         rsForums.MoveNext
       Loop
     End If
     rsCat.MoveNext
  Loop
End If
%>


Ik heb er even rsCat van gemaakt en natuurlijk overal aangepast.


Je kan die code maken door je code tussen

[codeasp] en [/code]

te zetten. Zet dan tussen code en asp een = teken. Het zelfde kan met php.

Ik zag het ook pas net toen chem het gebruikte :)

[ Voor 48% gewijzigd door Manual op 18-12-2002 13:39 ]

Specs


Verwijderd

Mooi, dus nu werkt de code ook?

ASP:
1
2
3
en dit 
ff testen
natuurlijk

  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Nou, het werkt dus niet..
Queued schreef op 18 december 2002 @ 13:35:
[...]
Er wordt niets weer gegeven. Groot wit vlak dus en geen foutmelding :'(

Specs


  • Greyfox
  • Registratie: Januari 2001
  • Laatst online: 12:27

Greyfox

MSX rulez

Wat zou je ervan denken om je code een beetje in te springen?
Dat maakt het geheel veel leesbaarder en bovendien makkelijker te debuggen.

MSX 2 rulez more


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Greyfox schreef op 18 December 2002 @ 14:28:
Wat zou je ervan denken om je code een beetje in te springen?
Dat maakt het geheel veel leesbaarder en bovendien makkelijker te debuggen.
Dat valt toch wel mee...

Specs


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
je bent niet echt consequent in je rs benaming en gebruik daarvan.

mischien ligt het daar aan.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
Je kijkt trouwens naar je recordcount of die groter is dan 0, maar is die dat wel. Hij is namelijk -1 als je een forward only cursor gebruikt.

Ik zou als ik jou was wat response.write neerzetten om wat waardes te controleren.

En je gebruikt Do While Rst_Cat.Eof, moet dit niet zijn Do While NOT Rst_Cat.eof :?

Ach omdat ik de beroerste niet ben ;)
Visual Basic:
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
37
38
39
40
<%
Response.write RsCat.Recordcount 'Alleen ff voor de zekerheid, als dit -1 is, klopt je connection etc niet
If rsCat.RecordCount > 0 Then
  Do While NOT rsCat.EOF
%>
<table width="98%" border="0">
  <tr bgcolor="#9D64DD"> 
    <td width="4%">&nbsp;</td>
    <td width="68%"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#CCCCCC">&nbsp;<%=rsCat("CAT_NAME")%>&nbsp;</font></b></td>
    <td width="15%"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#CCCCCC">&nbsp;Queued</font></b></td>
    <td width="13%">&nbsp;</td>
  </tr>
</table>
<%
Response.write rsForum.Recordcount 'Hier weer hetzelfde als hierboven
If rsForums.RecordCount > 0 Then
  rsForums.MoveFirst
   Do While NOT rsForums.EOF
If rsForums("cat_id") = rsCat("id") Then
%>
<table width="98%" border="0">
  <tr bgcolor="#CEB0EE"> 
    <td width="4%">&nbsp;</td>
    <td width="33%"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#333333">&nbsp;<a href="forum.asp?forumid=<%=rsforum("FORUM_ID")%>"><%=rsforum("F_SUBJECT")%></a></font></td>
    <td width="11%"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#333333">&nbsp;<%=rsforum("F_TOPICS")%></font></td>
    <td width="11%"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#333333">&nbsp;</font></td>
    <td width="13%"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="#333333">&nbsp;</font></td>
    <td width="15%">&nbsp;</td>
    <td width="13%">&nbsp;</td>
  </tr>
</table>
<%
           End If
         rsForums.MoveNext
       Loop
     End If
     rsCat.MoveNext
  Loop
End If
%>

[ Voor 91% gewijzigd door Phenomenon op 18-12-2002 15:54 ]


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Het ligt niet aan inconsequent gebruik van RS benamingen.

Supervisor: Ik krijg dus inderdaad -1 terug.

Wat is er dan in vredesnaam mis met de connection??

Ik heb net een dubbelcheck gedaan op de DB koppeling en de query gechecked en ik heb mezelf ervan overtuigd dat de records weldegelijk data bevatten door de DB nogmaals over te pompen.

Ik ga even proberen om ergens anders op te checken i.p.v. op het aantal records.

Bijv.
if rsCat("CAT_STATUS") = 1 then
...begin met de loop...

[ Voor 2% gewijzigd door Manual op 18-12-2002 16:12 . Reden: typo ]

Specs


  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
Ach in principe heb je die check op recordcount helemaal niet nodig. Is een beetje dubbel, omdat als hij .eof hij dat gebeuren toch niet uitvoerd.

Dus sloop dat er maar uit en kijk dan nog eens.

Om even terug te komen op 'Waarom is hij dan -1'

Je hebt zeer waarschijnlijk een forward-only cursor gebruikt. Dit is de 'default' bij ado dacht ik. Deze cursor-type ondersteund gewoon geen recordcount en zal dus altijd -1 teruggeven.

Wat je kunt doen is je curstor-type als static te openen (AdUseStatic), daarmee kun je dus wel je recordcount gebruiken. Volgens mij moet je dan nog wel nadat je deze geopend hebt een .movelast & .movefirst gebruiken om de recordcount de goede waarde te laten hebben.

[ Voor 57% gewijzigd door Phenomenon op 18-12-2002 16:23 ]


  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Nou. Na een dag zwoegen en nadenken is dan het resultaat daar :)

HET WERKT!!!111

Ik ga vanavond maar eens ff een lekker pilsje drinken om dit succes, waarin ook jullie geparticipeerd hebben, te vieren :Y)

Specs


  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
En wat was het nou :?

  • Manual
  • Registratie: Maart 2002
  • Laatst online: 11-05 12:58
Ik heb zoals je zei, die check eruit gegooit en toverde hij alles op mijn scherm.

Het lijkt er inderdaad op dat recordcount niet standaard ondersteund wordt.

Echter was het zo dat de categorieen wel goed werden weergegeven maar alle fora die in de DB zaten werden in alle categorieen gegooit. Dus in elke categorie dezelfde fora.

Toen heb ik de rsForums query bovenaan deze draad onder het volgende stukje code gezet:

ASP:
1
2
  rsCat.MoveFirst
  Do While NOT rsCat.EOF


en werden alle fora onder de juiste categorie gezet. Het was dus ook zo dat de query gewoon mega verkeerd stond 8)7 :X

Vanaf begin af aan ging het al verkeerd. Kijk maar eens naar dit:

ASP:
1
2
3
4
5
6
7
<%
if rsForum.eof or rsForum.bof then
response.write ("Geen fora gevonden")
Else

do until rsforum.Eof
%>


Hier staat dus feitelijk dat wanneer rsForum iets is, dat hij dan "Geen fora gevonden" moet weergeven en anders door moet gaan.....

Specs


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...

Pagina: 1