LazReport Fehler abfangen [gelöst]

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
VB_Lazarus
Beiträge: 90
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
CPU-Target: 32Bit

LazReport Fehler abfangen [gelöst]

Beitrag von VB_Lazarus »

Hallo,

ich habe folgendes Problem:
Ich benutze LazReport um meine Reports darzustellen.
Als Datenbank wird MSAccess Datenbank über ODBC mit SQLDB benutzt.
In meinem Programm gebe ich dem Anwender die Möglichkeit die Reports inklusive der SQL Abfrage selbst zu erstellen / ändern.
Jetzt kann es natürlich vorkommen, das ein Report geändert wird und ein Feld in der SQL Abfrage nicht vorhanden ist, oder umgekehrt.
Beim Aufrufen des Reports in dem Programm, stürtzt das ganze Programm aufgrund von fehlenden Feldern ab.
Wie kann ich den Absturz verhindern, bzw. den Fehler abfangen?

Ich hoffe ich habe mich verständlich ausgedrückt.

Gruß und danke.
Zuletzt geändert von VB_Lazarus am Fr 18. Jan 2019, 20:15, insgesamt 1-mal geändert.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1423
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: LazReport Fehler abfangen

Beitrag von fliegermichl »

Als erstes musst du möglichst genau die Stelle finden wo es kracht.
Dann kannst du diese in einen try except Block packen.

Code: Alles auswählen

 
try
 Aufruf_der_Funktion_wo_es_kracht();
except
 ON E:Exception do
 begin
  MessageDlg(Format('Bei der Erstellung des Reports ist ein Fehler aufgetreten: Meldung: %s Klasse: %s', [e.Message, e.classname]), mtError, [mbOk], 0);
 end;
end;
 


Dann stürzt zumindest das Programm nicht mehr ab.

VB_Lazarus
Beiträge: 90
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
CPU-Target: 32Bit

Re: LazReport Fehler abfangen

Beitrag von VB_Lazarus »

Danke. Vor lauter Bäume den Wald nicht gesehen.

War mein Fehler.

Ich habe den try Block verkehrt gesetzt.

Deswegen ist der Fehler nicht abgefangen worden.

Antworten