怎么防止DBGrid输入重复的数据?高手来帮帮我啊! (50分)

  • 主题发起人 主题发起人 lldhz
  • 开始时间 开始时间
L

lldhz

Unregistered / Unconfirmed
GUEST, unregistred user!
用DBGrid+DataSource+ADOQuery
中间有编号(BH)字段(不能设为主键),怎么在输入的时候判断使输入不能重复?
 
在beforepost事件中写:
if adoquery1.locate('bh','adoquery1.fieldbyname('bh').asstring',[locaseinsensitive])
then
begin
application.messagebox('错误','bh不能重复',mb_ok);
abort;
end;
 
扳手:这样每次只能输入一条数据是吗?我要多条一起输入可以吗?(我用的UPDATA)
 
这样好像就不行了。那难办了,看来你需要换种思路!
 
可以在数据库后面写存储过程或者触发器~!
 
ADOQuery1BeforeInsert(DataSet: TDataSet);
在这个事件中判断.
 
写个过程在保存前判断一下
回到第一条
while not query.efo do
begin
取出当前记录的关键字和当前行号
然后遍历当前所有记录关键字相同和行号不同提示或直接删除
query.next
end
 
扳手:我想直接比较DBGRID的CELL可以吗??但是怎么判断DBGRID的最后一条记录??

spymaster:你的方法对我来说不行,我是缓存区的方式打开数据集(输入时打开一条不
存在的记录)
 
你的意思我不太明白,你是再保存前比较还是在保存后比较?
具体怎么比较?
 
想在保存前比较。
能不能控制DBGrid的没一个Cell(后面输入的),如果能的话就可以比较。
我是想通过一个循环,比较每一行的BH列,存在相同就提示。但是不知道怎么做
 
dbgrid好像不行,stringgrid应该可以,但做起来挺麻烦。
还不如在edit里输入,在dbgrid里显示,这样做比较好控制!
 
难道DBGrid没办法?
我的东东做好了,测试的时候才发现这个问题,要改用其他控件就麻烦了。
 
呵呵。。。我没辙了。
直接在dbgrid里控制比较麻烦,我一般都避免。
 
还是谢谢你了!
我还想试试!
没人解决分就给你了。
 
只能祝你好运了! [:D]
 
我是这样做的,
我将编号这样的东东首先保存在一个表里,然后读出来一条记录,删除。
这样就不会重复了。

 
你所说的编号是每次增加一条记录就递增1,还是有另外的规律呢?请说详细点?
 
编号是自己定的(字符串,两位)
 
多人接受答案了。
 
后退
顶部