Bei Rekursionen ist es immer sinnvoll ein bildchen zu malen... Ich muss das gerade intensiv in der Uni machen... Stehe gerade auch vor den Problemen... Aber mit Prolog... Da ist es noch schlimmer... Also mal doch mal ein bild der rekursion...
-----Urspr�ngliche Nachricht----- Von: Heiko Richler [mailto:[EMAIL PROTECTED]] Gesendet: Mittwoch, 26. Juni 2002 17:48 An: AspGerman Kaffeehaus Betreff: [aspdecoffeehouse] RE: logikfehler in Rekursivem Baum .... Hi, Worin besteht den das Problem genau? > private function showTree (element, prnt, level) Ich sehe nicht wozu bei "sauberer" rekursion "prnt" ben�tigt wird?! Folgenden Block w�rde ich nur einmal, au�erhalb der Rekursion ausf�hren. > if session("openReiseForum")="" then session("openReiseForum")="," > if Request.QueryString("actionReiseforum")<>"" then > select case Request.QueryString("actionReiseforum") > case "open" > session("openReiseForum") = session("openReiseForum") & _ > Request.QueryString("idForum") & "," > case "close" > session("openReiseForum") = replace(session("openReiseForum"), _ > "," & Request.QueryString("idForum") & ",",",") > end select > end if > if instr(1, session("openReiseForum"), "," & ID & ",")=0 then Zweig eingeblendet?! > HTMLNode = DisplayNode ("open", id, parent, author, > dateCreate, subject, > ReiseID, level) > Response.Write( HTMLNode ) > else Kein Zweig zeigen?! > HTMLNode = DisplayNode ("close", id, parent, author, dateCreate, > subject, ReiseID, level) > Response.Write( HTMLNode ) Wenn kein Zweig warum noch etwas anzeigen?! Die Folgende Schleife w�rde ich weglassen und statt dessen showTree trsc.Fields("frm_ReiseID").value, sc.Fields("frm_parent").value, level+1 > > set trsc=Server.CreateObject ("ADODB.RecordSet") > trsc.ActiveConnection=con > trsc.LockType = adLockReadOnly > trsc.CursorType = adForwardOnly > trsc.CursorLocation = adUseClient > > trsc.open "SELECT [frm_ID], [frm_parent], [frm_author], > [frm_dateCreate], "&_ > "[frm_subject], [frm_ReiseID] FROM [tbl_Reiseforum] WHERE > [frm_ReiseID] > = " &_ > ReiseID & " AND [frm_parent]=" & ID & " ORDER BY [frm_ID], > [frm_parent];" > > while not trsc.eof > showTree trsc.Fields("frm_ReiseID").value, > trsc.Fields("frm_parent").value, level+1 > trsc.movenext > wend > trsc.close > end if > Response.Write("</table>") > Ist falsch, oder?: rs.movenext? > trs.movenext > wend > trs.close Und statt der inneren Schleife dein Root-Element vorher anzeigen: ' ...Daten laden HTMLNode = DisplayNode ("open", id, parent, author, dateCreate, subject, ReiseID, level) Response.Write HTMLNode call showTree (reiseID, 0, 0) OK, sehr grob aber zum tiefer einsteigen fehlt mir jetzt die Zeit. Einfach noch mal fragen ... Gru� Heiko Richler Fachbereich Informatik Georg-Simon-Ohm-Fachhochschule N�rnberg http://www.informatik.fh-nuernberg.de/heiko.richler/ > -----Original Message----- > From: Mansur Esmann [OM] [mailto:[EMAIL PROTECTED]] > Sent: Wednesday, June 26, 2002 4:58 PM > To: AspGerman Kaffeehaus > Subject: [aspdecoffeehouse] logikfehler in Rekursivem Baum .... > > > Hi, > > ich hab ein logikproblem mit nem rekursiven Baum. > H�tte jemand Lust sich mal die Funktion anzusehen, um mir > einem Hinweis zu > geben? > > > Gru� Mansur > > > Wenn ja :-) > > > > der Code: > > > call showTree (reiseID, 0, 0) > > private function showTree (element, prnt, level) > > if session("openReiseForum")="" then session("openReiseForum")="," > if Request.QueryString("actionReiseforum")<>"" then > select case Request.QueryString("actionReiseforum") > case "open" > session("openReiseForum") = session("openReiseForum") & _ > Request.QueryString("idForum") & "," > case "close" > session("openReiseForum") = replace(session("openReiseForum"), _ > "," & Request.QueryString("idForum") & ",",",") > end select > end if > > set trs=Server.CreateObject ("ADODB.RecordSet") > rs.ActiveConnection=con > rs.LockType = adLockReadOnly > rs.CursorType = adForwardOnly > rs.CursorLocation = adUseClient > > rs.open "SELECT [frm_ID], [frm_parent], [frm_author], > [frm_dateCreate], > "&_ > "[frm_subject], [frm_ReiseID] FROM [tbl_Reiseforum] WHERE > [frm_ReiseID] = > " &_ > element & " AND [frm_parent] = " & prnt & " ORDER BY [frm_ID], > [frm_parent]" > > while not rs.eof > > ID = rs.Fields("frm_ID").value > parent = rs.Fields("frm_parent").value > author = rs.Fields("frm_author").value > dateCreate = rs.Fields("frm_dateCreate").value > subject = rs.Fields("frm_subject").value > ReiseID = rs.Fields("frm_ReiseID").value > > > if instr(1, session("openReiseForum"), "," & ID & ",")=0 then > else > HTMLNode = DisplayNode ("close", id, parent, author, dateCreate, > subject, ReiseID, level) > Response.Write( HTMLNode ) > > set trsc=Server.CreateObject ("ADODB.RecordSet") > trsc.ActiveConnection=con > trsc.LockType = adLockReadOnly > trsc.CursorType = adForwardOnly > trsc.CursorLocation = adUseClient > > trsc.open "SELECT [frm_ID], [frm_parent], [frm_author], > [frm_dateCreate], "&_ > "[frm_subject], [frm_ReiseID] FROM [tbl_Reiseforum] WHERE > [frm_ReiseID] > = " &_ > ReiseID & " AND [frm_parent]=" & ID & " ORDER BY [frm_ID], > [frm_parent];" > > while not trsc.eof > showTree trsc.Fields("frm_ReiseID").value, > trsc.Fields("frm_parent").value, level+1 > trsc.movenext > wend > trsc.close > end if > Response.Write("</table>") > > trs.movenext > wend > trs.close > > end function > > > | [aspdecoffeehouse] als > [EMAIL PROTECTED] subscribed > | http://www.aspgerman.com/archiv/aspdecoffeehouse/ = Listenarchiv Sie > | k�nnen sich unter folgender URL an- und abmelden: > | > http://www.aspgerman.com/aspgerman/listen/anmelden/aspdecoffee house.asp | [aspdecoffeehouse] als [EMAIL PROTECTED] subscribed | http://www.aspgerman.com/archiv/aspdecoffeehouse/ = Listenarchiv Sie | k�nnen sich unter folgender URL an- und abmelden: | http://www.aspgerman.com/aspgerman/listen/anmelden/aspdecoffeehouse.as | p | [aspdecoffeehouse] als [email protected] subscribed | http://www.aspgerman.com/archiv/aspdecoffeehouse/ = Listenarchiv | Sie k�nnen sich unter folgender URL an- und abmelden: | http://www.aspgerman.com/aspgerman/listen/anmelden/aspdecoffeehouse.asp
