Ich brauche mal wieder einen Denkanstoß bzw. Hilfe zur Fehlersuche. Mein Projekt sieht grob zusammengefasst so aus:
Hauptfenster:
- DBGrid, was seine Daten aus einer SQL-Abfrage bezieht
- Doppelklick auf einen Eintrag öffnet ein zweites Fenster zum Bearbeiten des Eintrages (enthält viele SQLQuerys)
Hierzu wird im Hauptfenster bei Doppelklick jeweils das Editierfenster per Create erzeugt ünd modal angezeigt. Nach mehrfachem Öffnen (und jeweils wieder schließen via mrCancel) kommt es plötzlich beim erneuten Öffnen zu einem SIGSEGV. Ich versuche seit Tagen den Fehler einzugrenzen, was mir nicht gelingen will. Immer wenn ich denke das Problem gefunden zu haben und meinen Code abändere, kommt der Fehler an anderer Stelle. Wie kann ich herausfinden, woher der Fehler kommt?
Hier mal der Teil des Hauptfensters, der das Editfenster zeugt:
Delphi-Quellcode:
procedure TMain.Men_TerminEditClick(Sender: TObject);
var
s: integer;
begin
if Assigned(MyDatabase) then begin
if MyUser.IsAllow(read) then begin
S:= SQLQuery2.FieldByName('ID').AsInteger;
SQLQuery2.Close;
frm_MyTermin:=Tfrm_MyTermin.Create(self, MyDatabase, MyUser);
frm_MyTermin.execute(s);
freeandnil(frm_MyTermin);
SQLQuery2.Open;
SQLQuery2.Locate('ID',s,[]);
end;
end else
Showmessage('Es besteht keine Datenbankverbindung');
end;
Und hier der Destructor des Detailfensters:
Delphi-Quellcode:
destructor Tfrm_myTermin.destroy;
begin
DBLookupName.ListSource:= nil;
DBLookupVName.ListSource:= nil;
DBLookupOP.ListSource:= nil;
DBLookupEinw.ListSource:= nil;
SQLQuery1.Active:= false;
SQLQuery2.Active:= false;
SQLQuery3.Active:= false;
sqlQuery4.Active:= false;
SQLQuery5.Active:= false;
SQLQuery6.Active:= false;
SQLTransaction1.CloseTrans;
SQLTransaction1.Free;
SQLTransaction2.CloseTrans;
SQLTransaction2.Free;
SQLTransaction3.CloseTrans;
SQLTransaction3.Free;
SQLTransaction4.CloseTrans;
SQLTransaction4.Free;
SQLTransaction5.CloseTrans;
SQLTransaction5.Free;
SQLTransaction6.CloseTrans;
SQLTransaction6.Free;
inherited destroy;
end;
Ich vermute, daßß irgendwo der Speicher nicht komplett freigegeben wird.
Vielen Dank für Eure Hilfe.