Hallo...
unabhängig von deiner Frage sind mir ein paar Sachen aufgefallen...
Beispiel für mehrere Stellen:
Delphi-Quellcode:
function TDataconnect.getKunden():TKundeList;
var
Kunde : TKunde;
KundeQuery : TIBOQuery;
KundeTransa : TIBOTransaction;
begin
Result:= TKundeList.create();
// wird als Result erzeugt... wo gibst du die Liste wieder frei ? --> Speicherleck. Objekt als Rückgabewert ist immer schwierig... Nur mit dirty Tricks.
KundeQuery:= TIBOQuery.Create(
nil);
// Wo gibst du die Query frei ? --> Speicherleck
KundeQuery.SQL.Text:= '
SELECT * FROM KUNDEN ';
KundeQuery.IB_Connection:= FDataBase;
KundeTransa:= TIBOTRansaction.Create(
nil);
KundeTransa.IB_Connection:= FDataBase;
KundeQuery.IB_Transaction:= KundeTransa;
KundeTransa.StartTransaction();
// warum läßt du ein select Statment in einer Transaktion ablaufen ?
try
KundeQuery.Open();
while not KundeQuery.Eof
do
begin
kunde:= TKunde.Create(KundeQuery.Fieldbyname('
Kunden_ID').asInteger,
KundeQuery.FieldbyName('
Vorname').asString,
KundeQuery.FieldbyName('
nachname').AsString);
Result.addkunde(Kunde);
KundeQuery.Next();
end;
KundeTransa.Commit();
// Was gibt es nach dem Durchlaufen der Query zu committen ?
except
on e:
Exception do
begin
ShowMessage('
FEHLER IN GETKUNDEN');
KundeTransa.Rollback();
// entsprechend dem Commit...
end;
end;
end;
PS: Mach mal ReportMemoryLeaksOnShutdown an... aber erschrick nicht