AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Try Except Problem

Ein Thema von AlexII · begonnen am 31. Jan 2015 · letzter Beitrag vom 2. Feb 2015
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Try Except Problem

  Alt 31. Jan 2015, 14:48
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!
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Try Except Problem

  Alt 31. Jan 2015, 14:52
begin und end kennst Du?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Try Except Problem

  Alt 31. Jan 2015, 15:09
begin und end kennst Du?
Ja, aber es hilft trotzdem nicht.

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;
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Plastewolf
(Gast)

n/a Beiträge
 
#4

AW: Try Except Problem

  Alt 31. Jan 2015, 15:17
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);

      Edit1.Caption := str; // Hier der Fehler: Syntax error, "ON" expected but "identifier EDIT1" found
    end;
  end;
end;
Gruß
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Try Except Problem

  Alt 31. Jan 2015, 15:24
Ah jah... alles klar! Danke!
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Try Except Problem

  Alt 31. Jan 2015, 16:24
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Try Except Problem

  Alt 31. Jan 2015, 16:53
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:
  • Wo wird da eine Datei ausgelesen?
    Nichts da, also kann es dadurch auch nicht knallen und die Fehlermeldung ist somit total falsch und verwirrend.
  • Was sollte das mit der Variable und Caption?
    Die wird ausgelesen und genau so wieder zugesiwsen, also keinerlei Ändeurng und somit sinnlos.
  • Und das mit dem Begin+End ...
    Ich hätte gedacht das hättest du langsam mal gelernt.

Ergebnis siehe
Zitat:
Kaum macht man's richtig - schon funktioniert's
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (31. Jan 2015 um 17:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.286 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Try Except Problem

  Alt 1. Feb 2015, 09:21
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;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Try Except Problem

  Alt 1. Feb 2015, 09:27
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;
Mit Booleval wird aber auf jedenfall die LoadFile-Methode ausgeführt auch wenn diese über einen alten Wert in OpenDialog1.Filename aufgerufen würde (z.B. Letzte Verwendung). Ich bin mir nicht sicher ob im abgebrochenen Zustand der String leer ist.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Try Except Problem

  Alt 1. Feb 2015, 10:45
Wie geht man mit Exceptions um?

Wenn man die behandeln kann, dann und nur dann nimmt man einen try except . Ansonsten macht man sich das Verhalten einer Exception zunutze (alle Anweisungen danach werden nicht mehr ausgeführt):
Delphi-Quellcode:
procedure TForm1.LoadFileButtonClick( Sender : TObject );
begin
  if OpenDialog1.Execute then
  begin
    Memo1.LoadFromFile( OpenDialog1.Filename );
    Edit1.Text := OpenDialog1.Filename;
  end;
end;
Wenn jetzt Memo1.LoadFromFile( OpenDialog1.Filename ); eine Exception auslöst, dann wird Edit1 nicht verändert und es erscheint der Dialog mit der Fehlermeldung.

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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:41 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