不同的bde错误都对应着相应的代码:
procedure TDM_XSXFHD.Q_sdgoodsmPostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
var
temp :String;
begin
//主表错误处理
if (E is EDBEngineError) and
((E as EDBEngineError).Errors[0].Errorcode = 9729) then
MessageDlg('关键字重复,取消操作', mtWarning, [mbOK], 0);
if (E is EDBEngineError) and
((E as EDBEngineError).Errors[0].Errorcode = 13059) then
MessageDlg('关键字为空', mtWarning, [mbOK], 0);
end;
但是因为delphi对各种数据库的支持力度不同(oracle最好),所以,对于某些数据库
不能采用判断错误码的方法。例如sql server,用户要删
除主表中的纪录,而对应的子表中存在纪录。这是产生错误代码9733,但是用户不知道
这应为修改(update)还是删除(delete)操作引起的该错误,这时就要对错误消息
进行判断:
if (E is EDBEngineError) and
((E as EDBEngineError).Errors[0].Errorcode = 9733) then
begin
temp := copy((E as EDBEngineError).MESSAGE,25,1);
if temp = 'D' then
showmessage('存在相关子记录,需先删除子表记录!');
if temp = 'U' then
showmessage('存在相关子记录,不允许修改!');
end;