如何在录入阶段控制某一列不重复(100分)

  • 主题发起人 主题发起人 xgydelphi
  • 开始时间 开始时间
X

xgydelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
用-个query(使用缓存更新)打开一个表,dbgrid做为录入界面,
如何控制某一列不重复呢?
give me answer,give you mark!
 
如果这个表有IDENTITY型字段就可以.不过IDENTITY字段不要在
dbgrid上露面,以免差错.
 
在这列上定义一个无重复索引,然后捕捉
产生的关键字冲突错误不行吗?
 
将你要输入的字段设为 key.
 
此表并无索引,用的是ms sql server 6.5
录入界面只对一部分记录作修改,修改的某一列数据不能重复
 
menxin:
如何要输入的字段设为 key.


 
不能重复的数据列是不是有意义?如果是无意义的话,可不可以产生一个随机数,
然后查询一下是否重复,直到不重复为止。然后写到此数据列。
在DBGrid上的数据只是此表的一部分,即便与DBGrid上的数据不相同,也不能保证
在整个数据列中不同,依靠人工处理不大可能实现。
 
该数据是用户输入还是自动产生 ?
自动产生,设定一个记数字段,在NEWRECORD时逐一添加
用户输入,那只能设置无重复索引,在POST后捕捉产生的
关键字冲突错误
 
我常用DBEDIT做输入控制的,那样好操作
 
直接对DBGRID好象并没有什么好的控制方法
不过你可以在POST的过程中,抓抓错误提示信息试试

try
post;
except
showmessage('...');
end;
 
简单!为不能重复的字段建立唯一索引即可.
 
我想重申我的问题:
有表abc, 字段(a,b,c ),a,b都是char(10),c是char(1).表无索引。

用query按条件 (字段c=?) 查询出部分数据,用updatesql缓存更新
dbgrid作为修改界面。
如何在dbgrid 中 a列修改发生后,query post 前做判断a是否重复,
即如何得到 dbgrid 在a列的所有值?

no one can answer?
 
是否可以使用触发器解决?

建一个UPDATE后触发器,判断修改的a列值是否在目前表中.
可能需在此触发器中再调个存储过程判断.

我想比较简单.
 
你也可使用另一个Query2来帮助你进行重复键值的判断,这样你可在Query1的Post
事件中以刚输入的值在Query2中进行查询即可,因你使用缓存更新,使用触发器无法
立即得到判断结果,只能采取这种方式。
 
先用
query1.first
while not query1.eof do
begin
if query1.fieldbyname('a').asstring ...
...
query1.next;
end;
做一遍检查,再POST呗
 
dbgrid好像可以排序,排序后小天的办法可以找出重复的数据.
如果发现了重复怎么办?人工处理还是计算机处理?对a列的数据有什么要求?

var TempStr:String;

TempStr:='';
query1.first
while not query1.eof do
begin
if query1.fieldbyname('a').asstring=TempStr then
begin
...
...
end;
TempStr:=query1.fieldbyname('a').asstring;
query1.next;
end;
 
yanghaijun:
我看过你(if it was you)写过一段 获得dbgrid某一行某一列内容的程序,
方法是使dbgrid.refresh,在 ondrawdatacell事件中处理。
可是我的dbgrid的列必须在设计阶段定义,则 ondrawdatacell不发生。
how should i do?tell me.
 
如果你不设唯一字段且执意要在未存入库之前判断是否重复
恐怕用dbgrid是不成的了,你用stringgrid好了,可惜对库
的读出和写入只能手工完成了.
 
首先选取所有的c,
query1.Sql.append('select distinct(c) from abc');
Query1.open;
while not Query1.eof do begin
if StrInputC=Query1.FieldByName('c') then
begin
ShowMessage('c重复!');
exit;
end;
query1.Next;
end;
query1.Close;




 
如果一定要在前台处理列查重,使用DataSet的LookUp方法比较合适,但如果你
的SQL是带条件,LookUp就无能为力了,建议在后台用触发器处理。
 
后退
顶部