try
  adoquery1.append;
  adoquery1.fieldbyname('编号').asstring:=edit1.text; // 非自编号
  .......
  adoquery1.post;
except
  on   ...        do       //比如 主键重复了 
    begin
        
    end;
  on           do 
end;有没有关于  针对某个异常处里的 信息 
 ...
 ... 
   就是 
   On 条件 Do 里的这个 < 条件 >的说明啊 
给我贴上来.
谢谢  

解决方案 »

  1.   


    unit Unit1sgsd;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      EPKExists=class(Exception)
      public
        constructor Create;overload;
      end;
      
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button3Click(Sender: TObject);
    begin
      raise EPKExists.Create;
    end;{ EPKExists }constructor EPKExists.Create;
    begin
      Message:='PK Exists';
    end;end.
      

  2.   

    try
      adoquery1.append;
      adoquery1.fieldbyname('编号').asstring:=edit1.text; // 非自编号
      .......
      adoquery1.post;
    except
      on  E:Exception  do  
      begin
        if  adoquery1.connection.Errors.Item[0].NativeError  = 2627 then   showMessage(' 插入重復鍵 ');
      end;
    end;
      

  3.   

    try
      adoquery1.append;
      adoquery1.fieldbyname('编号').asstring:=edit1.text; // 非自编号
      .......
      adoquery1.post;
    except
      on  E:Exception  do  
      begin
        case adoquery1.connection.Errors.Item[0].NativeError of
          2627:  showMessage(' 插入重復鍵 ');
          ...
        end;
      end;
    end;
      

  4.   

    华子已经写的很清楚了,你可以用case去逐条判断,也可把case部分做成自己的类,当然首先你要明白各种错误代码
      

  5.   

    DELPHI自定义的异常处理
    try...finally...end;//----------无论try...finally是否触发异常,都需要执行 finally...end;的语句。==============
    try...except...end;//---------try..except区内没有异常时,跳过except...end执行后面的语句。===============
    =======================实例===================================================‘unit Unit1;interfaceuses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;type
    TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
    private
        { Private declarations }
    public
        { Public declarations }
    end;var
    Form1: TForm1;implementationfunction strtointRange(const s:string;min,max:longint):longint;
    begin
       result:=strtoint(s);
       if(Result<min) or (Result>max) then
         raise ERangeError.CreateFmt('数值%d不在%d跟%d之间',[result,min,max]);
    end;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    try
        strtointrange('11',1,10);
    except
         on E:ERangeError DO
         messagedlg(e.Message,mterror,[mbok],0);
    end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
    a,b,c:integer;begin
    // inputbox('请输入除数','除数为0时触发异常',inttostr(b) );try
       b:=0;
       if (b=0) then
         raise EZeroDivide.Create('错误!除数不得为0!')
       else
         a:=10 div b;
       showmessage(inttostr(a));
    except
       on obj1:EZeroDivide do
         messagedlg(obj1.Message,mterror,[mbok],0);
       on obj2:EExternal do
         messagedlg(obj2.Message,mterror,[mbok],0);
         else
           messagedlg('无法预知的错误',mterror,[mbok],0);
    end;end;end.
      

  6.   


     這個就是啊。  2627  就是重復鍵的ERROR號MSSQL2000, select * from sysmessages
    2005,2008  select * from sys.Messages  看裏面的錯誤號一個放進去來吧,如果你願意怕話;