Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO Exception (https://www.delphipraxis.net/139607-ado-exception.html)

jangbu 1. Sep 2009 12:43

Datenbank: SQL Server 2000 • Zugriff über: ADO

ADO Exception
 
Hallo,

steige gerade von BDE auf ADO um. Habe dazu Query durch ADOQuery ersetzt. Läuft auch alles. Nur wie fange ich jetzt (mit ADO) die Fehler z.B. doppelter Schlüssel ab? Der u.g. Mechanismus beruhte auf BDE.

try
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from TABLE');
Query1.Open;
Query1.Append;
Query1.FieldByName('nr').AsInteger := nr;
Query1.Post;
except
on E: EDBEngineError do
if E.Errors[0].ErrorCode = 9729 then Begin
MessageDlg('Fehler bei Insert (duplicate key)! ' + IntToStr(e.errors[0].errorcode) , mtError, [mbOK], 0);
Query1.Cancel;
end
else
MessageDlg('Fehler bei Insert! ' + IntToStr(e.errors[0].errorcode) , mtError, [mbOK], 0);
end;

jangbu

jangbu 2. Sep 2009 15:58

Re: ADO Exception
 
Hat da wirklich keine eine Idee?

jangbu

DeddyH 2. Sep 2009 16:02

Re: ADO Exception
 
Wieso diese Unterscheidung? Lass doch einfach die ErrorMessage der Exception ausgeben, die ist hoffentlich auch aussagefähig.

jangbu 3. Sep 2009 08:19

Re: ADO Exception
 
Liste der Anhänge anzeigen (Anzahl: 1)
DeddyH,

ich habe versucht einen Datensatz einzufügen der auf einen doppelten Schlüssel Fehler läuft. Ich bekomme leider nur eine allgemeine Fehlermeldung zurück. mtError ist leer?! Mit der BDE bekam ich die Fehlernummer 9729 -> duplicate key. Warum steht in mtError nichts drin?

jangbu

Brainshock 3. Sep 2009 09:08

Re: ADO Exception
 
Hi,

ist der normale Fehlertext nicht aussagekräftig genug, dass du das nochmal extra abfängst?
Was kommt denn für eine Exceptionklasse zurück? Vielleicht die auswerten bzw. die Message der Exception.

Delphi-Quellcode:
      
try
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('select * from TABLE');
  Query1.Open;
  Query1.Append;
  Query1.FieldByName('nr').AsInteger := nr;
  Query1.Post;
except
  on E: Exception do
    MessageDlg(E.Classname + ' ' + E.Message , mtError, [mbOK], 0);
  Query1.Cancel;
end;
Gruß
Matthias

DeddyH 3. Sep 2009 09:12

Re: ADO Exception
 
Zitat:

Zitat von DeddyH
Lass doch einfach die ErrorMessage der Exception ausgeben

Damit war E.Message gemeint ;)

jangbu 3. Sep 2009 12:02

Re: ADO Exception
 
Danke,

das war's. E.Message enthält eindeutige Info!

jangbu

hoika 3. Sep 2009 12:28

Re: ADO Exception
 
Hallo,

oder du benutzt EADOError statt EDBEngineError.


Heiko


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