Hallo zusammen,
ich sehe bzw. erkenne den Fehler nicht.
Auf dem Bild könnt ihr das Ergebnis sehen.
Die Hauptkategorien werden richtig angezeigt.
Die ersten beiden Unterkategorien "Testkategorie und Testkategorie 2" in der Hauptkategorie Madonnen, sind auch richtig.
Alle weiteren Unterkategorien stehen an der falschen Stelle. Die sollten eigentlich unter der dazugehörigen Hauptkategorie stehen.
Ich vermute, dass es an der markierten Stelle liegt.
Vielleicht hat jemand eine Idee.
Hier der Quelltext.
Delphi-Quellcode:
procedure Tf_treeview.Button1Click(Sender: TObject);
var MyTreeNode1 : TTreeNode;
begin
with tv.Items do
begin
clear;
q2.Close;
//1.Hauptkategorie
q2.SQL.Clear;
q2.SQL.Add('select category_child_id from jos_vm_category_xref ');
q2.SQL.Add('where category_parent_id = 0');
q2.Open;
//Liefert den Namen der Kategorie
q1.Close;
q1.SQL.Clear;
q1.SQL.Add('select category_name from jos_vm_category ');
q1.SQL.Add('where category_id = :category_id');
q1.parambyname('category_id').AsInteger := q2.FieldByName('category_child_id').AsInteger;
q1.Open;
//----------------------------------------------------------------------------------------
//Eintrag in Treeview
MyTreeNode1 := Add(nil, q1.FieldByName('category_name').AsString);
//Unterkategorien der ersten Hauptkategorie
q3.Close;
q3.SQL.Clear;
q3.SQL.Add('select category_child_id from jos_vm_category_xref ');
q3.SQL.Add('where category_parent_id = :category_parent_id');
q3.ParamByName('category_parent_id').AsInteger := q2.FieldByName('category_child_id').AsInteger;
q3.open;
while not q3.eof do
begin
//Liefert den Namen der Kategorie
q4.Close;
q4.SQL.Clear;
q4.SQL.Add('select category_name from jos_vm_category ');
q4.SQL.Add('where category_id = :category_id');
q4.parambyname('category_id').AsInteger := q3.FieldByName('category_child_id').AsInteger;
q4.Open;
//Eintrag der Unterkategorien in die TreeView
AddChild(MyTreeNode1, q4.FieldByName('category_name').AsString);
q3.Next;
end;
//--------------------------------
q2.Next;
//Liefert weitere Hauptkategorien und Unterkategorien
while not q2.Eof do
begin
//Weitere Hauptkategorien in der TreeView anzeigen
q1.Close;
q1.SQL.Clear;
q1.SQL.Add('select category_name from jos_vm_category ');
q1.SQL.Add('where category_id = :category_id');
q1.parambyname('category_id').AsInteger := q2.FieldByName('category_child_id').AsInteger;
q1.Open;
Add(MyTreeNode1, q1.FieldByName('category_name').AsString);
//-------------------------------------------------------------
//Unterkategorien der weiteren Hauptkategorien in Treeview anzeigen
q3.Close;
q3.SQL.Clear;
q3.SQL.Add('select category_child_id from jos_vm_category_xref ');
q3.SQL.Add('where category_parent_id = :category_parent_id');
q3.ParamByName('category_parent_id').AsInteger := q2.FieldByName('category_child_id').AsInteger;
q3.open;
while not q3.eof do
begin
//Liefert den Namen der Kategorie
q4.Close;
q4.SQL.Clear;
q4.SQL.Add('select category_name from jos_vm_category ');
q4.SQL.Add('where category_id = :category_id');
q4.parambyname('category_id').AsInteger := q3.FieldByName('category_child_id').AsInteger;
q4.Open;
//Eintrag der Unterkategorie in die TreeView
[COLOR="Red"]AddChild(MyTreeNode1, q4.FieldByName('category_name').AsString);[/COLOR]
q3.Next;
end;
q2.Next;
end;
end;
end;
Für die Hilfe bedanke ich mich.
LG
Roland