//Jetzt lade ich die Kundendaten aus der DB und lasse das ganze durch eine for-Schleife laufen
Dir ist schon bewusst, das du an dieser Stelle immer wieder ein neues Objekt erzeugst, aber nur die letzte Instanz davon im FormDestroy freigibst?
Beispiel: Wenn du 10 Kunden erzeugst
TMyKunden_Daten := TOCustomers.Create;
, gibst du im FormDestroy nur Nummer 9 frei.
Die Kunden 0 bis 8 hängen noch im Speicher rum und das sind deine Speicherlecks.
Verwalte doch diese Instanzen von Kunden, Systemen und Gebäuden in seperaten Objektlisten.
Bei Freigabe der Objektlisten werden dann auch die darin gespeicherten Instanzen freigeben.
Beispiel:
Delphi-Quellcode:
var
I, J, K: Integer;
CustomerNode, BuildingNode, SystemNode: PVirtualNode;
LCustomer: TOCustomers;
begin
VstKunden.BeginUpdate;
try
VstKunden.Clear;
CustomerNode := VstKunden.AddChild(
nil);
VstKunden.InvalidateNode(CustomerNode);
VstKunden.NodeDataSize := SizeOf(TCustomersData);
{ Hier glaube ich liegt das erste Problem. Ich setze NodeDataSize auf TCustomersData.
Was aber ist mit TBuildingData und TSystemData? Benötige ich die nicht,
weil es nur um den ersten Node geht? }
FCustomers := TObjectList.Create;
// Jetzt lade ich die Kundendaten aus der DB und lasse das ganze durch eine for-Schleife laufen
for I := 0
to 10
do
begin
LCustomer := TOCustomers.Create;
FCustomers.Add(LCustomer);
LCustomer.Kunden_Kundenname := '
Hallo';
LCustomer.Ansprechpartner_Position := '
Hallo';
LCustomer.Ansprechpartner_Telefon1 := '
Hallo';
// Inerhalb der Schleife folgen dann die tieferen Datenpunkte
BuildingNode := AddVSTCustomer(VstKunden, CustomerNode, LCustomer);
// Objektedaten laden aus Objektdatenbank
// Systemdaten
// Menüpunkte
end;
// ExpandedRootNodes(VstKunden);
VstKunden.SortTree(0, SdAscending, True);
finally
VstKunden.EndUpdate;
end;
end;