Hallo,
hab ein etwas kurioses Problem. Ich vermute, es liegt daran, wie ich die Objekte erstelle - es ist noch etwas Neuland für mich.
Also, ich habe mehrere Klassen: Kategorie-Klasse, Artikel-Klasse und eine Kategorien-Klasse (sie enthält alle Kategorien). Jedem Kategorie-Objekt kann man mehrere Artikel-Objekte hinzufügen.
Mein Quelltext sieht demnach so aus:
Delphi-Quellcode:
procedure TForm1.UpdateList;
var
i,j: Integer;
Item, Parent: TTreeNode;
expanded: TIntArray;
Kategorie: TKategorie;
Artikel: TArtikel;
begin
//Root-Kategorie (ID: -1) erstellen
Kategorie:=TKategorie.Create;
Kategorie.ID:=-1;
KomKats.Add(Kategorie); //Typ: TKategorien Mehrzahl(!)
Kategorie:=nil;
//...
while not (Form1.ZQuery1.Eof) do
begin
Kategorie:=TmKategorie.Create;
Kategorie.ID:=Form1.ZQuery1.FieldByName('katid').AsInteger;
Kategorie.Titel:=Form1.ZQuery1.FieldByName('titel').AsString;
Kategorie.ChildFrom:=Form1.ZQuery1.FieldByName('parent').AsInteger;
KomKats.Add(Kategorie);
Form1.Zquery1.Next;
end;
//...
while not (Form1.ZQuery1.Eof) do
begin
Artikel:=TArtikel.Create;
Artikel.ID:=Form1.ZQuery1.FieldByName('ARTIKELID').AsInteger;
Artikel.Titel:=utf8encode(Form1.ZQuery1.FieldByName('TITEL').AsString);
Artikel.Kategorie:=Form1.ZQuery1.FieldByName('KID').AsInteger;
KomKats.Kategorie[KomKats.getIndexById(Artikel.Kategorie)].AddArtikel(Artikel);
Form1.ZQuery1.Next;
end;
//...
//Kategorie-Objekte durchgehen und diese inkl. dessen Artikel im TreeView anzeigen.
end;
Sodele... Dieser Code hat mal funktioniert, bis ich die in der
SQL-
Query das "ORDER-BY"-Kriterium geändert habe. Seitdem kamen AVs. Habe ich das ORDER-BY wieder hinzugefügt, hat es wieder funktioniert.
Ich denke, ich mache einen Fehler beim Objekte erstellen und Objekte (nicht-)freigeben. Zumal es bei dieser Lösung so ist, dass jede Kategorie den Titel der ersten Kategorie hat. So denke ich, ich muss das Kategorie-Objekt "löschen" und ein neues erstellen, wenn ein neuer Datensatz geladen wurde (in der while-Schleife).
Bitte gebt mir Tipps und sagt mir, was ich falasch mache!
Vielen Dank