hmmm, aber da habe ich keine sortierung dabei (achtung, ich muß mit PrevID sortieren, und habe somit keine möglichkeit die sortierung dem
SQL Server zu überlasssen, und muß daher immer im nachhinein manuell sortieren)
und ich möchte auch gerne alle Daten auf einmal in einer einzigen
SQL Query abfragen, und nicht für jeden Zweig eine neue
SQL Anweisung machen
meine
SQL Anweisung fürs laden :
Delphi-Quellcode:
R.CheckSQL(
sql, doClose);
sql.SQL.Text := '
SELECT ID, PARENTID, PREVID FROM TEILE WHERE AUFTRAG = :ID ORDER BY PARENTID, PREVID';
sql.ParamByName('
ID').AsInteger := AuftragID;
sql.Open;
while not sql.Eof
do
AddItem.LoadFromSQL(
sql, TRUE);
if doClose
then R.CloseSQL(
sql);
also, das ist etwas grob vereinfacht die Sortierfunktion, wie ich die jetzt verwende ...
(ich glaub, man sieht gleich warum ich da eine andere haben möchte
)
Delphi-Quellcode:
procedure InserItems(item : TItem; listNew : TList);
var
i : integer;
begin
// in neue Liste einfügen, und aus alter löschen
listNew.Add(item);
Remove(item);
// erstes Child Element suchen
for i:=0 to Count-1 do
if (Item[i].ParentID = itemID) and (Item[i].PrevID = 0) then begin
InsertItems(Item[i], listNew);
break;
end;
// Nächstes Element suchen
for i:=0 to Count-1 do
if (Item[i].PrevID = itemID) then begin
InsertItems(Item[i], listNew);
break;
end;
end;
listNew := TList.Create;
InsertItems(listNew[0], listNew);
Assign(listNew);
listNew.Free;