怎么防止DBGrid输入重复的数据?高手们请进

siaosa 2003-08-22 05:02:34
在离开当前栏之前就判断出是否存在重复的字段。
该字段在数据库中可以是不唯一的,但在DBGrid中必须是唯一的。所以不能够使用数据库中唯一字段
有没有办法在DBGrid中直接判断出是DBGrid中输入的数据是否有相互重复的?
...全文
72 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
aceblues 2004-03-21
  • 打赏
  • 举报
回复
你可用DiSTINCT试试
非零传说 2004-03-20
  • 打赏
  • 举报
回复
只要你将不允许重复的字段设为主键,
在你保存时,就会出错的
yusi008 2004-03-20
  • 打赏
  • 举报
回复
好象不可以 dbgrid是 数据感应组建 它和数据库是一体的
liulangnanhai 2004-03-20
  • 打赏
  • 举报
回复
"海天子"的方法不錯,值的學習,
這個才是高手的做法,
個人認為,
寫代碼越簡單越好,
只要數據表設計的好,
可以少寫很多代碼,
像"海天子"的做法,
不攔截錯誤,
只將英文錯誤信息轉換為中文的就可以了
XXSingle 2003-11-17
  • 打赏
  • 举报
回复
支持小别的写法,
siaosa 2003-11-17
  • 打赏
  • 举报
回复
有没有办法只在Grid里边进行控制。不对数据源进行控制呢?
dickeybird888 2003-08-23
  • 打赏
  • 举报
回复
huojiehai(海天子) 的做发是根本不行的,因为PostError错误是相对于table或者query来说的,而主键重复错误是相对于database来说的,所以不行,
你可以使用ApplicationEvents来捕捉主键重复的错误
tiexinliu 2003-08-23
  • 打赏
  • 举报
回复
没有看清问题.
zousoft 2003-08-23
  • 打赏
  • 举报
回复
我看bbs791109(小别)的方法不错,补充:要是用query,使用select代替find。
xiaoyuer0851 2003-08-23
  • 打赏
  • 举报
回复
呵呵,楼上的,给段具体的代码,让大家都参考下,如何 ?
bbs791109 2003-08-22
  • 打赏
  • 举报
回复
假設與dbgrid相連的表為table1,不可以重復的字段為:field1.
在field1的OnSetText事件中﹕
procedure TForm1.Table1field1SetText(Sender: TField; const Text: String);
begin
Table1.IndexName :='field1';
if table1.FindKey(['text']) then
begin
showmessage('error');
table1.FieldByName('field1').Value='';
exit;
end
else
table1.FieldByName('field1').Value:=text;
end;
karach 2003-08-22
  • 打赏
  • 举报
回复
虽然我不知道,但是我想知道,有答案了告诉我,谢谢,我明天再来!!
huojiehai 2003-08-22
  • 打赏
  • 举报
回复
以上假设你的DBGrid是和Table1连接
huojiehai 2003-08-22
  • 打赏
  • 举报
回复
参考
eKeyViol=9729;//主键重复时的错误值
procedure TForm1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
if (E is EDBEngineError) then
if(E as EDBEngineError).errors[0].Errorcode=eKeyViol then
begin
action:=daAbort;//挂起,中止程序继续执行
dataset.Cancel;
showmessage('不能重复');

end;

end;

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧