![]() |
Try Except Problem
Hallo,
ich habe folgendes Problem. Ich lade eine Datei in mein Programm, falls das schief gehen soll, soll der alte Pfad wieder gesetzt werden. Das klappt aber irgendwie nicht, wieso eigentlich?
Delphi-Quellcode:
procedure TForm1.OpenDialog1BitBtnClick(Sender: TObject);
var str: String = ''; begin str := Edit1.Caption; try if OpenDialog1.Execute then begin Edit1.Caption := OpenDialog1.FileName; end; except on E: Exception do MessageDlg('Fehler: Die Datei konnte nicht geladen werden!' + sLineBreak + sLineBreak + E.ClassName + sLineBreak + E.Message, mtError, [mbOk], 0); Edit1.Caption := str; // Hier der Fehler: Syntax error, "ON" expected but "identifier EDIT1" found end; end; Danke! |
AW: Try Except Problem
begin und end kennst Du?
|
AW: Try Except Problem
Zitat:
Delphi-Quellcode:
procedure TForm1.OpenDialog1BitBtnClick(Sender: TObject);
var str: String = ''; begin str := Edit1.Caption; try if OpenDialog1.Execute then begin Edit1.Caption := OpenDialog1.FileName; end; except on E: Exception do begin MessageDlg('Fehler: Die Datei konnte nicht geladen werden!' + sLineBreak + sLineBreak + E.ClassName + sLineBreak + E.Message, mtError, [mbOk], 0); end; Edit1.Caption := str; // Hier der Fehler: Syntax error, "ON" expected but "identifier EDIT1" found end; end; |
AW: Try Except Problem
Delphi-Quellcode:
Gruß
procedure TForm1.OpenDialog1BitBtnClick(Sender: TObject);
var str: String = ''; begin str := Edit1.Caption; try if OpenDialog1.Execute then begin Edit1.Caption := OpenDialog1.FileName; end; except on E: Exception do begin MessageDlg('Fehler: Die Datei konnte nicht geladen werden!' + sLineBreak + sLineBreak + E.ClassName + sLineBreak + E.Message, mtError, [mbOk], 0); Edit1.Caption := str; // Hier der Fehler: Syntax error, "ON" expected but "identifier EDIT1" found end; end; end; |
AW: Try Except Problem
Ah jah... alles klar! Danke!
|
AW: Try Except Problem
Man kann es sich schwer oder eben einfach machen:
Delphi-Quellcode:
procedure TForm1.OpenDialog1BitBtnClick(Sender: TObject);
begin if OpenDialog1.Execute then begin LoadFile ( OpenDialog1.Filename ); Edit1.Caption := OpenDialog1.FileName; end; end; |
AW: Try Except Problem
In dem Code gibt es eigentlich nichts zum Knallen und wenn es doch knallt, dann ist eh alles zu spät und dann hilft auch keine Exception-Behandlung mehr.
Und wenn ich mir den ersten Code so anseh:
Ergebnis siehe Zitat:
|
AW: Try Except Problem
Wenn das Laden fehlschlägt, sollte der Pfad sicherlich auch nicht angezeigt werden:
Delphi-Quellcode:
procedure TForm1.OpenDialog1BitBtnClick(Sender: TObject);
begin {$BOOLEVAL OFF} if OpenDialog1.Execute and LoadFile(OpenDialog1.Filename) then Edit1.Caption := OpenDialog1.FileName; end; |
AW: Try Except Problem
Zitat:
|
AW: Try Except Problem
Wie geht man mit Exceptions um?
Wenn man die behandeln kann, dann und nur dann nimmt man einen
Delphi-Quellcode:
. Ansonsten macht man sich das Verhalten einer Exception zunutze (alle Anweisungen danach werden nicht mehr ausgeführt):
try except
Delphi-Quellcode:
Wenn jetzt
procedure TForm1.LoadFileButtonClick( Sender : TObject );
begin if OpenDialog1.Execute then begin Memo1.LoadFromFile( OpenDialog1.Filename ); Edit1.Text := OpenDialog1.Filename; end; end;
Delphi-Quellcode:
eine Exception auslöst, dann wird
Memo1.LoadFromFile( OpenDialog1.Filename );
Delphi-Quellcode:
nicht verändert und es erscheint der Dialog mit der Fehlermeldung.
Edit1
Ist es das Verhalten, was gesucht wird? Und komisch, das bekommt man ohne diese seltsame Schnickschnack Programmierung. Und irgendwie ist es auch noch einfacher. Das Herumfuhrwerken an Exceptions und das Erstellen von Wrapper-Methoden, die im Fall der Fälle dann statt einer Exception einen bestimmten Rückgabewert liefern, führt meistens nur zu wesentlich mehr und unlesbarem Code und in 99% aller Fälle dazu, dass Programmierfehler unentdeckt bleiben. Exceptions sind nicht der Feind, aber das Abfangen ohne wirkliche Behandlung ist der erste Schritt um die Anwendung zu meinem Feind zu machen. Ja ich höre schon wieder die Stimmen "aaaaaber, ...". Natürlich kann man Exceptions abfangen, aber eben nur wenn man diese auch behandeln kann. Ohne sinnvolle Behandlung ist nur noch ein erneutes Werfen sinnvoll, wobei hier auch eine Übersetzung bzw. Umleitung auf eine eigene Exceptionklasse erfolgen kann.
Delphi-Quellcode:
MyConnection.StartTransaction;
try MyQueryA.ExecSQL; MyQueryB.ExecSQL; MyConnection.Commit; except MyConnection.Rollback; raise; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 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