为什么我用adodataset的updateBatch在程序中删掉一条记录后再增加同样一条记录保存时出错,因为重复键!(50分)

  • 主题发起人 主题发起人 zhumoo
  • 开始时间 开始时间
Z

zhumoo

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么我用adodataset的updateBatch在程序中删掉一条记录后再增加同样一条记录
保存时出错,因为重复键!我是在主明细表中要清掉所有的明细后重新插入记录时出的
问题,如果在清掉相关明细后用updatebatch提交,则用户如果在新增记录时又取消了则
永久删掉了以前记录,这样我该如何做?
 
》为什么我用adodataset的updateBatch在程序中删掉一条记录后
》再增加同样一条记录保存时出错
采用增量字段作主键就可以了。
》我是在主明细表中要清掉所有的明细后重新插入记录时出的问题,
》如果在清掉相关明细后用updatebatch提交,则用户如果在新增记录时又取消了则
》永久删掉了以前记录,这样我该如何做?
不知道说什么.
 
如果不用增量字段我该怎么办?
 
你清除明细数据,不就表示你不需要这些数据了吗?
这跟用不用UpdateBatch没有关系,UpdateBatch仅仅表示利用缓存更新,不表示提交成功后的数据还可以回滚。
 
是这样的,我的明细表记录是根据主表记录某个字段生成的,用户可修改主表和明细
记录后保存。用户在浏览时可以修改带出明细的字段以重新生成明细,我需要在新明细
生成之前将旧明细清掉。但在保存新明细时,会出因为重复键的错!!!!!
 
直接使用SQL吧。
其实UpdateSQL原来也是利用SQL语句来进行数据库更新。
他以OldValue为根据,更新数据库原来的记录。
你使用SQL语句,然后在一个事务里面处理,效果就会比较好,而且速度比UpdateSQL快。
 
也行,但是我不太在行,还请指点,比如,我对adodataset数据集进行操作,我需要删
掉其中一些记录,有人说用sql语句操作库比较好,我要找到相应记录再用adoquery写sql
语句吗?完毕后,还要在adodataset对应的dbgrid中显示出来。而且,我datamoudle中
的dataset和query要加很多吗?
 
最简单的方法还是给明细表加一自动增量字段并设置为主键。
 
要如何加呢?是不是加了就什么都好了?
 
呵呵,忽略了这个问题了。
》要如何加呢?
看你的数据库型了,象access和sqlserver都是支持增量字段的,
但有的数据库不支持。
》是不是加了就什么都好了?
从你的问题上看是可以解决的。

 
谢谢你,增量字段只在子表加还是父表也要加上然后连上?
 
按你所说问题应只给子表加上就可以了,
updateBatch模式删除了键值后又再增加进去,在提交是就会出现这种情况。
增加增量字段并设置为唯一主键可以解决这个问题。
 
可能没有清空缓存,看一下applyupdates的帮助,试试commit.[谢谢]
 
q:我是在主明细表中要清掉所有的明细后重新插入记录时出的
问题,如果在清掉相关明细后用updatebatch提交,则用户如果在新增记录时又取消了则
永久删掉了以前记录,这样我该如何做?
a:在用户要修改记录前,调用ADOConnection.BeginTrans;在用户要修改记录前,
当用户要提交记录时,调用ADOConnection.CommitTrans;
当用户要取消时,调用ADOConnection.RollbackTrans;
这样,用户如果在新增记录时又取消了就不会删掉以前记录了。
 
在Adodataset的onafterdelete事件中有沒有加上:
adodataset.UpdateBatch;一句,沒有趕快加上。
 
多人接受答案了。
 
后退
顶部