我的水平有限只能说自己的笨方法 那就是 你担心的那些会重复的字段的值先存在自己定义的变量当中 然后 用sql语句查询在数据库当中查询这些字段的值是否存在 select COUNT(*) as total from table where ........ 如果total的值为0 则是不存在的 就post 否则的话 则利用事务回滚撤销操作
不科学! 应该有主键吧,在DataSet的OnPost事件中 if pos('主键重复',e.message) then begin Action:=arAbort; showmessage('重复'); end; 实在没有主键 在dataset.OnbeforePos 或者 要检查的Field.OnValidate事件 if DataSet.Locate('fieldname','新插入的值',[]) then begin showmessage('重复'); Abort; end; end;
post
except
//在这里捕获主键重复异常
end
你担心的那些会重复的字段的值先存在自己定义的变量当中 然后
用sql语句查询在数据库当中查询这些字段的值是否存在
select COUNT(*) as total from table where ........
如果total的值为0 则是不存在的 就post
否则的话 则利用事务回滚撤销操作
应该有主键吧,在DataSet的OnPost事件中
if pos('主键重复',e.message) then
begin
Action:=arAbort;
showmessage('重复');
end;
实在没有主键 在dataset.OnbeforePos 或者 要检查的Field.OnValidate事件
if DataSet.Locate('fieldname','新插入的值',[]) then
begin
showmessage('重复');
Abort;
end; end;
这样你在程序中就什么也不用判断了,直接提交就是,只是提交放在try里.楼上也说了这个方法try
post;
except
Application.MessageBox('数据重复','提示',MB_OK+MB_IconStop);
end;数据的重复不重复就交给数据库来处理了.
try
adoquery.post;
adoconnection.comittrans;
except
adoconnetion.rollbacktrans;
end;
这样就可以了
要是插入了重复数据的话 就会自动的不插入这条数据
2、可以在PostError事件,定义一整形变量来接受数据库异常返回的ErrorCode,若变量值为
9729则说明输入了重复的字段。(需要设置键值字段的Required为False)
用lookup啊
按你刚输入的数据进行检索,然后看检索到的记录数,如果不为零则已经存在
否则,Post