Announcement

Collapse
No announcement yet.

Rückkehr nach Exception

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Rückkehr nach Exception

    Hi *,<p>
    um nicht ständig im Programm auf Fehler prüfen zu müssen, möchte ich die Lösung mit einem zentralen Exception-Handler (TApplicationEvent) benutzen.
    Jetzt gibt es aber "weiche" Fehler, bei denen kein Programmabbruch erfolgen soll, sondern lediglich eine Mitteilung ausgegeben wird. Gibt es eine Möglichkeit, aus dem Exception-Handler an die Stelle zurückzukehren, wo die Exception ausgelöst wurde?<p>
    Bsp.: Beim Lesen einer Datei mit zusätzichen Daten tritt ein Lesefehler auf. Das Programm soll aber normal weiter arbeiten, da es auch ohne diese zusätzlichen Daten funktionsfähig ist.<p>
    Grüße, Reimund

  • #2
    Hallo Reimund,<BR><BR>
    Ich habe auch ein zentrales Exceptionhandling:
    <PRE>
    Application.OnException := AppOnException;
    <PRE>
    Im Code steht dann etwa:<BR>
    <PRE>
    try
    FileOpen...
    except
    // still auslösen
    // evtll. ShowMessage
    end;
    </PRE>
    Damit wird mein Exceptionhandler nicht ausgeführt, es sei denn, man löst mit raize die Exception erneut aus.<BR><BR>
    Fran

    Comment


    • #3
      Hallo Frank,<p>
      aber dann muss ich ja doch überall verteilt mögliche Fehler abfangen und behandeln. Was habe ich dann durch einen zentralen Exception-Handler gewonnen?<p>
      Reimun

      Comment


      • #4
        Hallo Reimund,<BR><BR>
        ich habe mich vielleicht etwas unglücklich ausgedrückt.<BR><BR>
        ...Jetzt gibt es aber "weiche" Fehler, bei denen kein Programmabbruch erfolgen soll
        <BR><BR>
        Die explizite Exception - Behandlung benötigst du nur noch, wenn eben keine Exception ausgelöst werden soll.<BR>
        Du wirst aber keineswegs umhin kommen, deinen Code an gewissen Stellen mit try except ... zu versehen, da du in bestimmten Situationen wie z.B Connect zur DB, Öffnen von Query's etc. eine spezielle Behandlung durchführen musst. Es bleiben aber genügend Fehler übrig, die du nicht behandelst, und hier ist es schon besser, dies in einem globalen Handler zu steuern, da man hier die Fehlerausgabe besser gestalten kann. Ich schreibe z.B. auch ein Logfile an dieser Stelle, setze ein ReConnect auf die DB ( bei Bedarf) etc.<BR><BR>
        Gruß, Fran

        Comment


        • #5
          hier ein Beispiel:
          <PRE>
          procedure TfrmMain.AppOnException(sender : TObject; E: Exception);
          var
          ErrorLog : System.Text;
          FileNamePath : string;
          const
          sGlobaeException = '%s:'+#13#10+'%s'+#13#10+
          'Bei Fragen bitte Telefon: 23424242342';
          begin
          FileNamePath := extractFilePath(application.ExeName) + '\errorlog.txt';
          AssignFile(ErrorLog, FileNamePath);
          try
          System.Append(ErrorLog);
          except
          on EInOutError do rewrite(ErrorLog);
          end;
          WriteLn(ErrorLog, format('%s[%s]%s%p',
          [DateTimetoStr(now),Login_User, E.Message,ErrorAddr]));
          System.Close(ErrorLog);
          MessageDlg(format(sGlobalException,['AIS',E.Message]), mtError,[mbOk],0);
          dmConnect.CheckConnection;
          end;
          </PRE&gt

          Comment


          • #6
            Tja, nach dem Lesen in der Online-Hilfe sah mein Ansatz fast genauso aus. Aber ich hab mir halt gedacht, dass muss doch auch eleganter gehen. Wenn man nur irgendwie aus dem Exception-Handler zurückkommen würde...<br>
            Wenn ich Dich jetzt richtig verstanden hab, geht aber genau das wohl doch nicht. Na ja, okay.<br>
            Trotzdem vielen Dank für Deine Hilfe.<p>
            Grüße, Reimun

            Comment


            • #7
              Hallo Reimund,<BR><BR>
              wenn die Exception einmal feuert, kommst du wohl nicht mehr zurück. Aber es wäre auch gefährich, wenn man Exceptions global einfach abschalten könnte. Ich habe noch ein kleines Beispiel zum Nachvollziehen:<BR>
              <a href="http://www.reim-edv.de/download/exception.zip">http://www.reim-edv.de/download/exception.zip</a><BR>
              Fran

              Comment


              • #8
                Hallo Frank,<p>
                danke! Ich werd mir gleich mal Dein Beispiel reinziehen. Wenn's dann noch Fragen gibt, rühr ich mich einfach nochmal.<p>
                Grüße, Reimun

                Comment

                Working...
                X