Aquí tienes un ejemplo completo que funciona correctamente.
Código Delphi
[-]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables;
Procedure midberror(DataSet: TDataSet; E: EDatabaseError);
type
TForm1 = class(TForm)
Table1: TTable;
DataSource1: TDataSource;
procedure Table1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
private
public
end;
var
Form1: TForm1;
Const
eKeyViol = 9729;
eRequiredFieldMissing = 9732;
eForeignKey = 9733;
eDetailsExist = 9734;
eSqlGralerror = 13059;
eInvalidTime = 10058;
eInvalidDate = 75;
EinvalidDateTime=10060;
eRegisterLocked= 10241;
implementation
{$R *.DFM}
Procedure midberror(DataSet: TDataSet; E: EDatabaseError);
begin
if (E is EDBEngineError) then
if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then
begin
Application.MessageBox('Imposible dar alta ese registro ya existe','Atención',mb_Ok +
mb_IconQuestion);
Abort;
end;
if (E as EDBEngineError).Errors[0].Errorcode = eRequiredFieldMissing then
begin
Application.MessageBox('Imposible dar alta hay un campo vacio.','Atención',mb_Ok +
mb_IconQuestion);
Abort;
end;
if (E as EDBEngineError).Errors[0].Errorcode = eSqlGralerror then
begin
Application.MessageBox('Imposible dar alta hay un campo requerido vacío.','Atención',mb_Ok +
mb_IconQuestion);
Abort;
end;
end;
procedure TForm1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
MiDbError(Table1, e);
end;
end.
Un Saludo.