Resulta que estoy trabajando con PostgreSQL 8.X y estoy utilizando los componentes de la paleta SQLdb respectivamente, entonces en un bloque try..except, tengo el codigo para la insercion de un registro, pero cuando se ingresa un ID que ya existe, salta la exepcion, pero la variable que captura el error, solo me muestra el mensaje o el nombre de la clase, aqui el codigo:
Function TDataModule2.dmInsert_Cliente(Registro:TClient):boolean; begin try SQLQuery1.SQL.Clear; SQLQuery1.SQL.Add('INSERT INTO tbl_cliente (id,nombre,apellido,telefono) '); SQLQuery1.SQL.Add('VALUES (:A,:B,:C,:D);'); SQLQuery1.Params.ParamByName('A').AsInteger:=Registro.Id; SQLQuery1.Params.ParamByName('B').AsString:=Registro.Nombre; SQLQuery1.Params.ParamByName('C').AsString:=Registro.Apellido; SQLQuery1.Params.ParamByName('D').AsString:=Registro.Telefono; SQLQuery1.ExecSQL; dmconexion.DataModule1.PQConnection1.Transaction.Commit; Result:=true; except on E: EDataBaseError Do begin ShowMessage(E.Message); end; end; end;
Ahora bien, lo que quisiera es obtener el codigo del error, en este caso, el codigo de error cuando se intenta grabar un ID ya existente.
Revisando la unit db.pas, esta lo siguiente:
{ Exception classes } EDatabaseError = class(Exception); EUpdateError = class(EDatabaseError) private FContext : String; FErrorCode : integer; FOriginalException : Exception; FPreviousError : Integer; public constructor Create(NativeError, Context : String; ErrCode, PrevError : integer; E: Exception); Destructor Destroy; override; property Context : String read FContext; property ErrorCode : integer read FErrorcode; property OriginalExcaption : Exception read FOriginalException; property PreviousError : Integer read FPreviousError; end;
Observando, veo que esta clase tiene la property "ErrorCode",
Entonces, como hago para obtener el ErrorCode?
Espero haberme explicado
Saludos