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

Antwort per Email an