Der angegebene Link ist echt erbärmlich, da werden ja Unmengen an
SQL-Abfragen an die Datenbank gerichtet, dass kann ja nur langsam sein.
Besser:
klick
Delphi-Beispiel zum Laden (hier als Beispiel DBExpress)...
Delphi-Quellcode:
procedure fillTreeview(Tree:TTreeview; SQLConnection:TSQLConnection);
procedure fill(Depth:integer; ANode:TTreeNode; SDS:TSimpleDataSet);
var abbruch:boolean;
Node:TTreeNode;
begin
abbruch:=false;
while not SDS.Eof and not abbruch do begin
Node:=Tree.Items.AddChild(
ANode,
SDS.FieldByName('bez').AsString
);
SDS.Next;
if SDS.FieldByName('depth').AsInteger > Depth then
fill(Depth+1, Node, SDS);
if SDS.FieldByName('depth').AsInteger < Depth then
abbruch:=true;
end;
end;
var SDS:TSimpleDataSet;
begin
SDS:=TSimpleDataSet.Create(nil);
try
Tree.Items.BeginUpdate;
Tree.Items.Clear;
SDS.Connection:=SQLConnection;
SDS.DataSet.CommandType:=ctStoredProc;
SDS.DataSet.CommandText:=
'proc_GetNodes';
SDS.DataSet.ParamByName('id').AsInteger:=1;
SDS.Open;
fill(SDS.FieldByName('depth').AsInteger, nil, SDS);
SDS.Close;
finally
SDS.free;
Tree.Items.EndUpdate;
end;
end;
procedure TForm.BtnStartClick(Sender: TObject);
begin
fillTreeview(TreeView, SQLConnection);
end;
In diesem Beispiel wird genau eine einzige Datenbankabfrage abgeschicht, egal wie groß und tief der Baum ist.