DBGRID与SQL数据库问题

gez 2003-10-16 03:06:34
通过dbgrid来显示sql数据库中的数据,并通过dbgrid来添加、修改、删除数据库中的记录(只有一个字段),如果选择了新增记录,在dbgrid中输入了新增记录,在post前请问如何将输入在grid中的记录数据与数据库中的数据记录进行比较,以免出现重复??主要是想知道怎样从grid中将输入而尚未保存的数据与数据库中的记录比较,请各位指点
...全文
69 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishu2002 2003-10-16
  • 打赏
  • 举报
回复
在BeforePost中
按你刚输入的数据进行检索,然后看检索到的记录数,如果不为零则已经存在
否则,Post
pwzhu666 2003-10-16
  • 打赏
  • 举报
回复
可以先查以下你要书的数据,如果有的话在重输啊
用lookup啊
hmily1688 2003-10-16
  • 打赏
  • 举报
回复
1、可以在BeforePost事件检查字段有效性,不符合,Abort即可。用 angle097113(深思不解) 的方法就行了
2、可以在PostError事件,定义一整形变量来接受数据库异常返回的ErrorCode,若变量值为
9729则说明输入了重复的字段。(需要设置键值字段的Required为False)
hmily1688 2003-10-16
  • 打赏
  • 举报
回复
gmc007(江西的佬表)你出现了,在我印象中好像你好时间不来了,我刚来csdn时你帮我好多问题的啊。嘻嘻,有时间加我QQ41334906
angle097113 2003-10-16
  • 打赏
  • 举报
回复
adoconnetion.begintrans;
try

adoquery.post;
adoconnection.comittrans;
except
adoconnetion.rollbacktrans;
end;
这样就可以了
要是插入了重复数据的话 就会自动的不插入这条数据
gez 2003-10-16
  • 打赏
  • 举报
回复
请写出具体的取值语句,谢谢
xinglinshu 2003-10-16
  • 打赏
  • 举报
回复
直接去数据集中的数据就行,当你写在grid中时,数据集中已经存在这个字段的值了,只是没提交,所以直接就可以取出来。
hnhb 2003-10-16
  • 打赏
  • 举报
回复
你的意思是在表中只有唯一值就OK了吗?那就给这个字段设成唯一性索引就行了
这样你在程序中就什么也不用判断了,直接提交就是,只是提交放在try里.楼上也说了这个方法

try
post;
except
Application.MessageBox('数据重复','提示',MB_OK+MB_IconStop);
end;

数据的重复不重复就交给数据库来处理了.
yanlls 2003-10-16
  • 打赏
  • 举报
回复
直接取值都不会?
gez 2003-10-16
  • 打赏
  • 举报
回复
我的意思是我怎么获得这个新输入的值,怎么从grid中得知它的值是什么??比较我会的
delphi_xizhousheng 2003-10-16
  • 打赏
  • 举报
回复
不科学!
应该有主键吧,在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;
gez 2003-10-16
  • 打赏
  • 举报
回复
我知道在提交前判断,可是我现在是不知道怎样获得输在dbgrid中的数据来进行比较
miszyf 2003-10-16
  • 打赏
  • 举报
回复
可以在提交前判断,按新输入内容检索数据库,有重复提示修改。
gez 2003-10-16
  • 打赏
  • 举报
回复
我现在最主要的问题是不知道如何获得dbgrid中输入的数据来进行比较,例如如果是输入在edit中,可用edit.text来比较,dbgrid应怎样获得输入的数据??
angle097113 2003-10-16
  • 打赏
  • 举报
回复
我的水平有限只能说自己的笨方法 那就是
你担心的那些会重复的字段的值先存在自己定义的变量当中 然后
用sql语句查询在数据库当中查询这些字段的值是否存在
select COUNT(*) as total from table where ........
如果total的值为0 则是不存在的 就post
否则的话 则利用事务回滚撤销操作
gmc007 2003-10-16
  • 打赏
  • 举报
回复
try
post
except
//在这里捕获主键重复异常
end
上海老李 2003-10-16
  • 打赏
  • 举报
回复
你可以在table or query的beforepost中处理

2,495

社区成员

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

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