给我的一段例程你参考一下吧:
unit TestError;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Db, ADODB, DBTables;type
  TForm1 = class(TForm)
    ADOCommand1: TADOCommand;
    ADOConnection1: TADOConnection;
    Button1: TButton;
    Database1: TDatabase;
    Query1: TQuery;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
  Adoerrors: error;
begin
  Adoerrors := nil;
  try
    ADOCommand1.Execute;
  except
    Adoerrors := adoconnection1.Errors.item[0];
    showmessage(inttostr(adoerrors.number));
    //可以用Const AdoDataSetKeyViol=-2147217873;关键字或者唯一索引重复
  end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin  with Query1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('insert testerror values(1,''1'')');
    try
      ExecSQL;
    except
      on E: EDBEngineError do
      begin
        for i := 0 to E.ErrorCount - 1 do
        begin
          case E.Errors[i].ErrorCode of
            $2601:
              ShowMessage('呵呵!不允许鍵值重复!');
            $0021:
              Showmessage('太糟糕了,系统发生故障!TMD');
            $270B:
              Showmessage('对不起,你的受到主外键约束!怎么样,很失望吧!');
            $2B05:
              Showmessage('太糟糕了,网络连接超时判负!TMD');
            $0028:
              Showmessage('锁定违例!');
            $1200:
              Showmessage('不能识别的SQL错误!呵呵,有事干了!');
            $2501:
              Showmessage('太糟糕了,你的内存不足!请使用N(N>=10000)兆内存');
            $2605:
              Showmessage('对不起,你所添加的数据违反外键约束!');
            $2728:
              Showmessage('你所操作的表不存在!');
            $2801:
              Showmessage('记录已经被其它用户琐定!');
            $2A06:
              Showmessage('数据引擎初始化错误!');
            $2C01:
              Showmessage('网络初始化失败!');
            $2C07:
              Showmessage('呜呜..呜呜!一个我不知道的网络错误,这不可能!');
            $2C0D:
              Showmessage('是谁干的!!服务器竟然没打开!');
            $3E07:
              Showmessage('初始化失败!');
            $3303:
              //ShowMessage('服务器端错误:一般的SQL错误!');
          else
            raise EDatabaseError.Create(E.Message);
          end; //case
        end; //for
      end; //on EDBError
    end;
  end;
end;end.