![]() |
Datenbank: Mysql • Zugriff über: Zeos-Komponente
Baumstruktur - rekursive Prodzedur???
Hallo,
ich habe eine MySQL-DB in der Bookmarks in einer Baumstruktur gespeichert sind. => id, parent_id, url, description (parent_id=0 ist root) In PHP ist es kein Problem den Baum in einer rekursiven Function auszugeben, aber mit Delphi haut das ne ganz hin. In PHP siehts so aus :
Delphi-Quellcode:
Ergebnis (So wie es sein soll) :
function get_bookmarks($parent_id,$ebene)
{ $cmd="SELECT * FROM bookmarks WHERE parent_id=$parent_id"; $result=mysql_query($cmd); while ($bookmark=mysql_fetch_array($result)) { echo $ebene.$bookmark['url']; get_bookmarks($bookmark['id'],$ebene."- "); } } get_bookmarks(0,""); Zitat:
Der zeigt mit nur den ersten Zweig mit Unterzweige an. Aber dort ist das Schluß! So sieht meine Prozedure aus (Wird erstmal in einer Listbox ausgegeben) :
Delphi-Quellcode:
Ergebnis (So wie es NICHT sein soll) :
procedure get_bookmarks(parent_id:integer;ebene:string);
begin form1.SqlReadOnlyQuery.SQL.Text:='SELECT * FROM bookmarks WHERE parent_id='+inttostr(parent_id); form1.SqlReadOnlyQuery.Open; form1.SqlReadOnlyQuery.FieldByName('id').AsString; while not form1.SqlReadOnlyQuery.Eof do begin form1.listbox1.Items.Add(form1.SqlReadOnlyQuery.FieldByName('url').AsString); get_bookmarks(form1.SqlReadOnlyQuery.FieldByName('id').AsInteger,'- '); form1.SqlReadOnlyQuery.Next; end; end; procedure TForm1.FormCreate(Sender: TObject); begin get_bookmarks(0,''); end; Zitat:
Was muss in der Prozedure anders gemacht werden? Danke! |
Re: Baumstruktur - rekursive Prodzedur???
Zitat:
|
Re: Baumstruktur - rekursive Prodzedur???
hab bloß keine ahnung wie und wo ich anfangen soll!
|
Re: Baumstruktur - rekursive Prodzedur???
Nicht getestet, aber so ungefähr:
Delphi-Quellcode:
procedure get_bookmarks(parent_id:integer;ebene:string);
var TempQuery: TZReadOnlyQuery; begin TempQuery := TZReadOnlyQuery.Create(nil); TempQuery.Connection := form1.zconnection1; TempQuery.SQL.Text:='SELECT * FROM bookmarks WHERE parent_id='+inttostr(parent_id); TempQuery.Open; TempQuery.FieldByName('id').AsString; while not TempQuery.Eof do begin form1.listbox1.Items.Add(TempQuery.FieldByName('url').AsString); get_bookmarks(TempQuery.FieldByName('id').AsInteger,'- '); TempQuery.Next; end; FreeAndNil(TempQuery); end; procedure TForm1.FormCreate(Sender: TObject); begin get_bookmarks(0,''); end; |
Re: Baumstruktur - rekursive Prodzedur???
also der code müsste jetzt so aussehen
Delphi-Quellcode:
aber ich bekomme beim compilieren folgenden Fehlermeldung :
procedure get_bookmarks(parent_id:integer;ebene:string);
var TempQuery: TZReadOnlyQuery; begin TempQuery:=form1.SqlReadOnlyQuery.Create(nil); TempQuery.Connection:=form1.SqlConnection; TempQuery.SQL.Text:='SELECT * FROM bookmarks WHERE parent_id='+inttostr(parent_id); TempQuery.Open; TempQuery.FieldByName('id').AsString; while not TempQuery.Eof do begin form1.listbox1.Items.Add(TempQuery.FieldByName('url').AsString); get_bookmarks(TempQuery.FieldByName('id').AsInteger,'- '); TempQuery.Next; end; FreeAndNil(TempQuery); end; Zitat:
|
Re: Baumstruktur - rekursive Prodzedur???
Sorry, Fehler oben (aber schon korrigiert). :oops:
Es muss
Delphi-Quellcode:
heißen!
TempQuery := TZReadOnlyQuery.Create(nil);
|
Re: Baumstruktur - rekursive Prodzedur???
ja, den hatte ich ja im code schon korrigiert. trotzdem bleibt der oben genannte fehler!
???? |
Re: Baumstruktur - rekursive Prodzedur???
wenn ich FreeAndNil(TempQuery); weglassen kommt der fehler nicht mehr, aber das problem wie ganz oben beschrieben ist immer noch. er zeigt mir nicht den ganzen baum an nur den ersten zweig!
|
Re: Baumstruktur - rekursive Prodzedur???
Zitat:
Wann kommt der Fehler, und wo steht der Debugger danach? |
Re: Baumstruktur - rekursive Prodzedur???
na ne, der fehler kommt nicht mehr. aber mit deinem beispiel hat sich nicht gegenüber dem ersten Problem geändert!
ich bekomm immernoch Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz