AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Delphi 2006 - Fehlerbehandlung - Event?
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 2006 - Fehlerbehandlung - Event?

Ein Thema von LoewenZahn · begonnen am 19. Mär 2014 · letzter Beitrag vom 20. Mär 2014
Antwort Antwort
Benutzerbild von LoewenZahn
LoewenZahn

Registriert seit: 10. Okt 2013
22 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Delphi 2006 - Fehlerbehandlung - Event?

  Alt 19. Mär 2014, 08:52
Grüße,

als Anfänger hoffe ich eine einfache und leichte Möglichkeit zu finden, eventuelle Fehler zu behandeln.

Ich arbeite an einem recht großen Programm mit ca 40 Forms das prinzipiell nur mit Daten aus einer Datenbank jongliert. Nun kann es im absoluten Ausnahmefall vorkommen das ein Datensatz fehlerhaft ist und nicht bearbeitet werden kann. In diesem Fall, gibt es dann ja eine Fehlernachricht von Delphi, mit der ein normaler Nutzer nichts anfangen kann.

Ich weiß dass es try-Except-finally gibt, aber ich kann dies doch nicht jedes mal anwenden wenn ich mit einem Datensatz auch nur ansatzweise hantieren will.

Gibt es in Delphi ein Event, wo alle vorkommenden Fehler behandelt werden? Klingt bestimmt nach Wunschdenken, aber wenn eine Fehlernachricht dargestellt wird, wäre es sehr angenehm für mich einen alternativen Dialog anzuzeigen, wo der Fehler an den Support gesendet werden kann.

Freue mich auf eine Belehrung.

Gruß
L.
Tim
Passwörter sind wie Unterwäsche. Du darfst sie keinen sehen lassen, musst sie regelmäßig wechseln und solltest sie nicht mit Fremden tauschen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi 2006 - Fehlerbehandlung - Event?

  Alt 19. Mär 2014, 09:18
Application.OnError oder besser TApplicationEvents.OnError,
das fängt alles ab, was in der VCL-MessageLoop landet. (also kurz bevor die Exception-Meldung angezeigt wird, welche man darüber z.B. ersetzen kann)

Und natürlich sollte man mal die Exceptions mal auswerten, welche im TThread.Execute durchrauschen,
denn die verschwinden normaler Weise im Nirvana. TThread.OnTerminate und dort das TThread.FatalException (ist eine Exception) auswerten.

Exceptions im Synchronize werden vom Hauptthread an den aufrufenen Thread durchgereicht und dort erneut ausgelöst.

In WinAPI-Threads, ohne die RTL drumrum, auch in HauptThread ohne die VCL drumrum (drum hat in halbwegs aktuellen Delphis die Konsolenanwendung-Vorlage ein Try-Except schon eingebaut)

Und warum Delphi die Exceptions abfängt:
Windows schießt die komplette Anwendung ohne Fehlemeldung radikal ab, wenn Exceptions unbehandelt bis zum Windows (dahin, wo der Thread gestartet wurde) durchrauschen. (nur ein Logeintrag in der ereignisanzeige)



Oder man wendet sich direkt an die Exceptionbehandlung.

Oder man verwendet ein Exceptionsbehandlungstool (z.B. EurekaLog)
Die übernehmen, wen es eingestellt ist, auch das Loggen des (unbehandelten) Fehler oder gar aller Fehler (auch der via Try-Except abgefangenen) und der kann die Logmeldung auch verschicken (z.B. via eMail)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Mär 2014 um 09:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von LoewenZahn
LoewenZahn

Registriert seit: 10. Okt 2013
22 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Delphi 2006 - Fehlerbehandlung - Event?

  Alt 19. Mär 2014, 14:57
Hallo Himitsu.

Danke für deine Hilfestellung. Ich habe jetzt die TApplicationEvents verwendet und mir dort eine Schicke Ausgabe erarbeitet. Trotzdem erscheint noch die Standardnachricht von Delphi über das Problem.

Ich hab erfahren, dass ich über die Optionen der IDE diese Ausgabe deaktivieren kann. Meine Frage ist: Kann ich diese auch via Code deaktivieren?

Gruß
Tim
Passwörter sind wie Unterwäsche. Du darfst sie keinen sehen lassen, musst sie regelmäßig wechseln und solltest sie nicht mit Fremden tauschen.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Delphi 2006 - Fehlerbehandlung - Event?

  Alt 19. Mär 2014, 15:03
Ich glaube Du musst noch angeben, das die Exception behandelt wurde (im Eventhandler)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi 2006 - Fehlerbehandlung - Event?

  Alt 19. Mär 2014, 15:21
Zitat:
Delphi-Quellcode:
procedure TApplication.HandleException(Sender: TObject);
var
  O: TObject;
begin
  if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
  O := ExceptObject;
  if IsClass(O, Exception) then
  begin
    if not IsClass(O, EAbort) then
      if Assigned(FOnException) then
        FOnException(Sender, Exception(O))
      else
        ShowException(Exception(O));
  end else
    SysUtils.ShowException(O, ExceptAddr);
end;
Eigentlich muß man da nichts machen.
Wenn etwas an OnException hängt, dann wird Dieses aufgerufen und ansonsten ShowException.
Und TApplicationEvents sollte sich direkt an Application.OnException hängen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von LoewenZahn
LoewenZahn

Registriert seit: 10. Okt 2013
22 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Delphi 2006 - Fehlerbehandlung - Event?

  Alt 20. Mär 2014, 08:37
Hallo,

leider scheint dies, zumindest in meinem Borland 2006 nicht zu funktionieren:

Delphi-Quellcode:
procedure TApplication.HandleException(Sender: TObject);
begin
  if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
  if IsClass(ExceptObject, Exception) then
  begin
    if not IsClass(ExceptObject, EAbort) then
      if Assigned(FOnException) then
        FOnException(Sender, Exception(ExceptObject))
      else
        ShowException(Exception(ExceptObject));
  end else
    SysUtils.ShowException(ExceptObject, ExceptAddr);
end;
Und hier das OnException:

Delphi-Quellcode:
procedure TFormMain.ApplicationEvents1Exception(Sender: TObject; E: Exception);
Var F : textFile;
begin

  //Ausgabe des Fehlers in einem TAdvSmoothMessageDialog:
  md.HTMLText.Text := 'Es ist ein Schwerwiegender Fehler augetreten:<br/><br/><ul><li>'
                     +E.Message
                     +'</li></ul><br/><br/>Bitte kontaktieren Sie den Support.';
  md.Caption := 'Schwerwiegender Fehler';
  md.Execute;

  //Speichern des Errors in einer Textdatei:
  AssignFile(F,Dir_StartDir+'errorlog\'+loginname+'.log');
  If Not FileExists(Dir_StartDir+'errorlog\'+loginname+'.log') Then Rewrite(F)
  Else Append(F);

  Writeln(F,DateTimetostr(Now)+': '+E.Message+' | ActiveWindow: '+recent_visited_form.text);
  CloseFile(F);

end;
Ist ja auch halb so wild wenn ich es über die Einstellungen/Obtionen von Borland mache. Aber wohl ist mir dabei nicht

Gruß und danke für die bisherige Hilfestellung!
Tim
Passwörter sind wie Unterwäsche. Du darfst sie keinen sehen lassen, musst sie regelmäßig wechseln und solltest sie nicht mit Fremden tauschen.
  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 06:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz