![]() |
Datenbank: Access • Version: 2003 • Zugriff über: FireDac
Datenbankfehler Programm bleibt im Speicher
Hallo,
ich habe festgestellt, dass wenn eine Exception ausgelöst wird, das Programm im Speicher verweilt. Eine neue Compilierung ist nicht möglich. Es muss erst über den Taskmanager das Programm beendet werden. Folgende Routine habe ich:
Delphi-Quellcode:
Wenn also die Exception aus irgendeinen Grund ausgelöst wird, sollte doch der Speicher freigegeben werden.
try
DataMod.T_ABFBaum.Open; DataMod.Q_ArtLief.Open; DataMod.T_ArtMenge.Open; DataMod.Q_StckList.Open; DataMod.T_ArtMenge_StckList.Open; DataMod.Q_Hersteller.Open; except on E: Exception do raise Exception.Create('Fehler beim Öffnen der Tabellen!'); end; Kann man das irgendwo einstellen? Im MainForm ist im FormCreate-Ereignis
Delphi-Quellcode:
eingetragen.
ReportMemoryLeaksOnShutdown := True;
Wie kann ich sicherstellen, dass IMMER der Speicher freigegeben wird, auch wenn sonst das Programm an anderer Stelle abstürzt? Hat jemand eine Idee und kann mir helfen? LG Harry |
AW: Datenbankfehler Programm bleibt im Speicher
Hallo,
würde das so nicht funktionieren?
Delphi-Quellcode:
...
except on E: Exception do Begin raise Exception.Create('Fehler beim Öffnen der Tabellen!'); DataMod.T_ABFBaum.Destroy; DataMod.Q_ArtLief.Destroy; DataMod.T_ArtMenge.Destroy; DataMod.Q_StckList.Destroy; DataMod.T_ArtMenge_StckList.Destroy; DataMod.Q_Hersteller.Destroy; End; end; |
AW: Datenbankfehler Programm bleibt im Speicher
Der Ausführungsbereich nach
Delphi-Quellcode:
wird ja dann nicht mehr ausgeführt.
except
on E: Exception do raise Exception.Create('Fehler beim Öffnen der Tabellen!'); begin .... end; |
AW: Datenbankfehler Programm bleibt im Speicher
ich habe meinen ersten Code vor einiger Zeit korrigiert... So müßte es funktionieren:
Delphi-Quellcode:
except
on E: Exception do Begin raise Exception.Create('Fehler beim Öffnen der Tabellen!'); DataMod.T_ABFBaum.Destroy; DataMod.Q_ArtLief.Destroy; DataMod.T_ArtMenge.Destroy; DataMod.Q_StckList.Destroy; DataMod.T_ArtMenge_StckList.Destroy; DataMod.Q_Hersteller.Destroy; End; end; |
AW: Datenbankfehler Programm bleibt im Speicher
Zitat:
Delphi-Quellcode:
Warum du allerdings beim Fehler die Querys und dazu noch mit Destroy zerstören willst, erschliesst sich mir nicht...
try
try // Machen except // Fehlerbehandlung end; finally // Bereinigen end; Frank |
AW: Datenbankfehler Programm bleibt im Speicher
Ich verstehe nicht, warum du die Information der eigentlichen Exception ignoriert und durch eine unspezifische Exception mit einer ebensolchen Meldung ersetzen willst. Wenn du unbedingt die Fehlermeldung ändern willst, dann kann man das auch direkt tun.
Aber unabhängig davon, bleiben die DataSets bei einer Exception erstmal offen. Da ich annehme, dass ohne die Exception die DataSets an anderer Stelle korrekt geschlossen werden, sollte es genügen dies bei der Exception ebenso zu tun:
Delphi-Quellcode:
Und ja, jeglicher Code nach raise wird nicht ausgeführt. Man erkennt das im Editor auch an dem kleinen Pfeil.try DataMod.T_ABFBaum.Open; DataMod.Q_ArtLief.Open; DataMod.T_ArtMenge.Open; DataMod.Q_StckList.Open; DataMod.T_ArtMenge_StckList.Open; DataMod.Q_Hersteller.Open; except on E: Exception do begin DataMod.Q_Hersteller.Close; DataMod.T_ArtMenge_StckList.Close; DataMod.Q_StckList.Close; DataMod.T_ArtMenge.Close; DataMod.Q_ArtLief.Close; DataMod.T_ABFBaum.Close; E.Message := 'Fehler beim Öffnen der Tabellen!'; raise; // Hier bleibt wenigstens die Exception-Klasse unverändert. end; end; |
AW: Datenbankfehler Programm bleibt im Speicher
Ok, danke an alle für die Unterstützung.
LG Harry |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz