adoquery 某个字段有没有重复值
如何adoquery 某个字段有没有重复值
append后还没有提交,如何查找里面某个字段有重复值,最后是输完后提醒,不要提交后提醒
[解决办法]
beforepost事件中先去找有没有重复的
[解决办法]
[解决办法]
onexit不好控制的
应该在整张单据保存前提醒(beforepost),而不是内容变化时就提醒,那会很浪费资源(每次onexit要匹配一下)
[解决办法]
可以在提交的时候判断,是哪些值重复了.比如关键字重复等.最后就只要进行一次判断,如果重复了,把焦点置于重复的输入框中.让用户重新再填写.这样比每次都进行判断要节约很多资源.
[解决办法]
adodata.data:=adoquery.data;
if adodata.Locate('','',[]) then
begin
Showmessage('有重复值!');
exit;
end;
[解决办法]
[解决办法]
技术性问题,很值得探讨。
[解决办法]
如果你是在界面上直接编辑dataset中数据的话,我教你一个小技巧,
先不要使用ADOQuery
使用TClientdataset与界面的数据控件绑定
在ClientDataSet中找到属性IndexDefs,添加一个唯一索引,在TIndexDef对象的Fields属性中,添加你需要索引的字段名,在Options属性中勾选ixUnique,ixPrimary
这样你在ClientDataSet的OnPostError事件中就能捕获到违反唯一约束的错误了,在该事件中你就可以去寻找重复值。
最后将ClientDataSet中数据一次更新到ADOQuery中写入数据库
[解决办法]
procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
begin
ADOQuery2.Clone(ADOQuery1,ltBatchOptimistic);
if ADOQuery2.Locate(...) then
重复了
[解决办法]
方法很简单,就是你在检测是否有重复值时,不能直接对ADOQuery1进行Locate,
需要借助另外一个ADOQuery来进行Locate,那么,在进行Locate之前,必须要使两个ADOQuery的Data相同
这样就不会把ADOQuery1的编辑状态取消掉,
所有在按保存时,先ADOQuery2.Clone(TAdoDataSet(ADOQuery1));
然后if ADOQuery2.Locate('字段名','字段值',[]) then
......