ACCESS数据库保存记录时,如何提示关键字段重复(100分)

M

muxj

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TDM1.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
application.MessageBox('居民身份证号已经存在!','系统提示',MB_OK+MB_ICONINFORMATION);
ADOTable1.Cancel;
abort;
inputf.DBEdit23.SetFocus ;
end;
end;
以上代码在保存paradox数据库时能够正确提示,保存ACCESS数据时该怎样写?
我用的是ADOTable控件与数据库连接.
 
你设关键字段唯一不就得了,当然程序里面还要raise
 
procedure TDM1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
application.MessageBox(PChar(e.message),'系统提示',MB_OK+MB_ICONINFORMATION);
DataSet.Cancel;
Action:=daAbort;
end;
//access返回的是中文错误信息,可以直接返回给用户
 
可以把默认的顺序自动编号当作关键字,身份证只能不用作主键了
 
rockjie说得对呀,只要设置了关键字,保存的时候系统会触发异常的,你可以这样
try
adotable1.post;
except
//在这里对异常进行必要的处理就可以了
end;
 
try
adotable1.post;
except
ShowMessage('记录 重复');
end;
 
if adotable1.locate('身份证号码','号码',[])
then
ShowMessage('身份证号码已存在!')
else
adotable1.post;
 
我个人觉得不要在POST时再判断号码是否重复,在填完身份证号码,输入焦点转移时就查询,
找到就SHOWMESSAGE提示重复。
 
begin
table1.locate('字段名',edit1.text,[]); //用来定位, edit1.text为你输入的号码
if edit1.text=table1.fieldbyname('字段名').assting; //和上面的字段名是一样的
then
begin
showmessage('哈哈,记录已经存在了,请重新选择输入');
exit;
edit1.SetFocus ;
end
else
begin
执行你要做的事情;
table1.post;
//刷新 //同志,我的 里面的单词可能错了,不过意思你应该大概知道罗.
end;
 
我看身份证做关键字挺好的嘛,
不然你插入前,先查询一下,该身份证号,看是否有,有就重复了嘛
 
顶部