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