Einzelnen Beitrag anzeigen

Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Viele Objekte ordentlich(!) erstellen

  Alt 19. Dez 2009, 18:51
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
  Mit Zitat antworten Zitat