AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Datenbankfehler Programm bleibt im Speicher
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbankfehler Programm bleibt im Speicher

Ein Thema von HCB · begonnen am 30. Apr 2025 · letzter Beitrag vom 30. Apr 2025
Antwort Antwort
HCB

Registriert seit: 12. Feb 2020
225 Beiträge
 
Delphi 12 Athens
 
#1

Datenbankfehler Programm bleibt im Speicher

  Alt 30. Apr 2025, 11:32
Datenbank: Access • Version: 2003 • Zugriff über: FireDac
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:
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;
Wenn also die Exception aus irgendeinen Grund ausgelöst wird, sollte doch der Speicher freigegeben werden.

Kann man das irgendwo einstellen? Im MainForm ist im FormCreate-Ereignis  ReportMemoryLeaksOnShutdown := True; eingetragen.

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
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
724 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Datenbankfehler Programm bleibt im Speicher

  Alt 30. Apr 2025, 11:38
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;
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (30. Apr 2025 um 11:45 Uhr)
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
225 Beiträge
 
Delphi 12 Athens
 
#3

AW: Datenbankfehler Programm bleibt im Speicher

  Alt 30. Apr 2025, 11:51
Der Ausführungsbereich nach
Delphi-Quellcode:
except
    on E: Exception do raise Exception.Create('Fehler beim Öffnen der Tabellen!');
    begin
    ....
    end;
wird ja dann nicht mehr ausgeführt.
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
724 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Datenbankfehler Programm bleibt im Speicher

  Alt 30. Apr 2025, 11:57
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;
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.663 Beiträge
 
Delphi 12 Athens
 
#5

AW: Datenbankfehler Programm bleibt im Speicher

  Alt 30. Apr 2025, 12:26
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:
  
  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;
Und ja, jeglicher Code nach raise wird nicht ausgeführt. Man erkennt das im Editor auch an dem kleinen Pfeil.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.361 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Datenbankfehler Programm bleibt im Speicher

  Alt 30. Apr 2025, 12:19
Der Ausführungsbereich nach
Delphi-Quellcode:
except
    on E: Exception do raise Exception.Create('Fehler beim Öffnen der Tabellen!');
    begin
    ....
    end;
wird ja dann nicht mehr ausgeführt.
Aber wenn du noch ein try finally drumrum baust, wird der Code in finally noch ausgeführt.


Delphi-Quellcode:
try
  try
    // Machen
  except
    // Fehlerbehandlung
  end;
finally
  // Bereinigen
end;
Warum du allerdings beim Fehler die Querys und dazu noch mit Destroy zerstören willst, erschliesst sich mir nicht...

Frank
Frank Reim
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
225 Beiträge
 
Delphi 12 Athens
 
#7

AW: Datenbankfehler Programm bleibt im Speicher

  Alt 30. Apr 2025, 15:25
Ok, danke an alle für die Unterstützung.
LG Harry
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:26 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