Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wie Firebird-Exceptions handlen? (https://www.delphipraxis.net/134036-wie-firebird-exceptions-handlen.html)

HeikoAdams 14. Mai 2009 13:58

Datenbank: Firebird • Version: 2.1.2 • Zugriff über: ZeosLib

Wie Firebird-Exceptions handlen?
 
Hallo,
wie kann man am besten Exceptions aus einer Firebird-Datenbank in Delphi verarbeiten. Mir geht es darum, das ich nur die reine Meldung der Exception benötige. Bislang konnte ich zu dem Thema nichts passendes finden.

Gruß

Heiko

hoika 14. Mai 2009 14:15

Re: Wie Firebird-Exceptions handlen?
 
Hallo,

wie jede andere Meldung auch

Delphi-Quellcode:
try
 // sql-Befehle
except
  on E: Exception do
  begin
    ShowMessage(E.message); // das wäre die Meldung
  end;
end;
Heiko

HeikoAdams 14. Mai 2009 15:43

Re: Wie Firebird-Exceptions handlen?
 
Schon klar, aber dann bekomme ich als Fehlermeldung
Zitat:

SQL Error: exception 1 NOT_ALLOWED Zugriff verweigert At trigger 'CHECKUSER' line: 7, col: 32. Error Code: -836. exception .
Ich würde aber gerne als Fehlermeldung nur
Zitat:

Zugriff verweigert
ausgeben

Der Exception-Typ EZSQLException ist da auch nicht wirklich hilfreich.

mkinzler 14. Mai 2009 15:47

Re: Wie Firebird-Exceptions handlen?
 
Warum der Text steht doch in der Exception?

HeikoAdams 14. Mai 2009 15:51

Re: Wie Firebird-Exceptions handlen?
 
Nein, in der Exception, die Delphi ausgibt, steht
Zitat:

SQL Error: exception 1 NOT_ALLOWED Zugriff verweigert At trigger 'CHECKUSER' line: 7, col: 32. Error Code: -836. exception.

hoika 14. Mai 2009 17:02

Re: Wie Firebird-Exceptions handlen?
 
Hallo,

hm, dann könnte man über die Fehlernummer gehen (Exception.?, musst mal sehen)
und die Meldung selber generieren.


Heiko

neo4a 14. Mai 2009 17:10

Re: Wie Firebird-Exceptions handlen?
 
Du kannst ja selbst bestimmen, was der User lesen soll. Dazu hilft Dir vielleicht dieser Code-Schnipsel als Ansatz:

Delphi-Quellcode:
  case Errcode of
  335544741:begin
              t:='Verbindung zur Datenbank verloren!'+#10#10+'Die Anwendung wird beendet.';
              do_halt:=true;
            end;
  335544721:begin
              t:='Verbindung zur Datenbank nicht möglich! Bitte ggfs. Dongle überprüfen!'+#10#10+'Die Anwendung wird beendet.';
              do_halt:=true;
            end;
  335544374:t:=' '; // Keine Daten
  335544375:t:='X:'+ErrorMessage.text;
  335544528:t:='X:'+ErrorMessage.text;
  335544755:t:='Wechsel des Passwortes misslungen!';
  335544352:begin
              t:='Keine Zugriffsberechtigung eingerichtet.'+#10#10+'Die Anwendung wird beendet.';
              do_halt:=true;
            end;
  335544336,335544345:t:='Datensatz ist in Bearbeitung!'+#10#10+sqlmessage.text+#10#10+sql.text;
  335544347:begin
              tt:=uppercase(ExtractDelimited(2, errormessage[3], [#34]));
              t:=uppercase(ExtractDelimited(5, errormessage[3], [' ',',']));
              t:=Format('Ungültiger Wert (%s) für das Feld ***%s*** !',[tt,t]);
            end;
  335544349:begin
              tt:=uppercase(ExtractDelimited(2, errormessage[3], [#34]));
              t:=Format('Einen Eintrag mit diesen Parametern gibt es bereits in dieser Tabelle'+#13#10#13#10+
                        'oder Sie haben nicht alle Felder für den Schlüssel (%s) ausgefüllt!',[tt]);
            end;
Die Idee ist es, den User zu informieren. Die genaue Meldung schreibt man ggf. in ein Errorlog.

--
Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 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 by Thomas Breitkreuz