在数据库插入时,报插入重复键错误,问如何屏蔽数据库错误,直接进行
showmessage的报错?
begin
try
table1.post;
s:=false;
except
on Exception do
MessageDlg('有非法数据',mtConfirmation,[mbYes,mbNo],0);
end;
end;
此方式不行?
showmessage的报错?
begin
try
table1.post;
s:=false;
except
on Exception do
MessageDlg('有非法数据',mtConfirmation,[mbYes,mbNo],0);
end;
end;
此方式不行?
procedure TForm1.ADOQuery1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
beginend;
procedure TForm9.Button4Click(Sender: TObject);
begin
if s=true then
begin
//try
table1.post;
s:=false;
//except
//on Exception do
//MessageDlg('有非法数据',mtConfirmation,[mbYes,mbNo],0);
//end;
end;
form14.query1.Open;
end;
在PostError事件中
procedure TForm9.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
showmessage('重复!');
end;
可还是不行,问错在哪?
MessageDlg(e.message,mtConfirmation,[mbYes,mbNo],0);
end;
....
excepte
showmessage('出错');
end;
begin
if s=true then
begin
//try
table1.post;
s:=false;
//except
//on Exception do
//MessageDlg('有非法数据',mtConfirmation,[mbYes,mbNo],0);
//end;
end;
form14.query1.Open;
end;procedure TForm9.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
const
eKeyViol = 9729;
begin
if (E is EDBEngineError) then
if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then
begin
MessageDlg('出现重复记录!',mtWarning, [mbOK], 0);
Table1.Cancel;
Abort;
end;
end;
还是不能屏蔽数据库错误,为什么?