ado 批更新问题(50分)

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

ZBJ2001_KF

Unregistered / Unconfirmed
GUEST, unregistred user!
有两个表更新<br>我把AdoDataSet设置成批更新模式。<br>我在更新前, 启动事务,然后我分别执行两上updateBatch; 由于向第二个表中更新中出现异常,我回滚了事务。可第一个表并没有出现异常。然后我把出现问题的数据修改后,重新更新,第二个表中的可以写入。可第一个表中的更新不成了
 
希望参与 苦啊
 
dfw 今非昔比啊.
 
con1.BeginTrans<br>adodataset1.updatebatch;<br>con1.RollbackTrans;<br>由于回滚了事物,我想再把adodataset中的数据改一下,然后再提交.<br>可实现不了,好象只能重新从数据表中读一次数据才可以再更新.<br><br>这样可能清楚些
 
CancelUpdate
 
008 你试试,由于updateBatch时,没有出错,我是根据别的条件判断要回滚的,所以cancelUpdate 是没有作用的
 
还是要感谢你的参与啊.呵
 
实在不行换条路用补偿事务实现
 
通过ADOCONN来实现事务比较好一点。
 
ADO對這種批量更新支持不好,更新出錯將很麻煩,將無法對客戶端的TADODataSet進行Undo,最好自己寫腳本處理。<br>由於1沒出錯,數據庫回滾后,1的狀態是提交完畢的,不會到會更新前的狀態。也就是事務對DataSet不產生影響。<br>CancelUpdate只是支持沒有UpdateBatch前才行。
 
JamesBond_L 你说的才是从实践中来啊.呵<br><br>写脚本 处理是什么意思
 
我在CSDN上也查了这个问题,说的也不清.<br><br>我考虑在事务前先前结果集CLONE出来一份,如果出错再CLONE回来.<br>后来发现CLONE是会同步的.所以感觉也不好.但我想这是一个思路.
 
反正就是不要用批更新方式了,你可以用這個數據集用來暫時存放,然後更新時,通過產生SQL的INSERT語句或者另外一個數據集打開同一個表,然後往裡面寫就行了,因為是臨時的,所以不用考慮什麽UNDO問題,只要數據庫更新失敗,回滾就好了,下次重新提交按前面的方法。
 
JamesBond_L 你的QQ多少,感觉你是有实践经验的.不象一些弟兄,只发言.凭感觉.呵<br><br>我的是46210880
 
你的QQ很像我的,呵呵<br>46316030<br>不過我晚上才能上Q,現在公司不能上的
 
多表的更新要注意数据一致性问题,只要其中任意表更新出问题,都要回滚前面的所有更改。<br>con1.BeginTrans<br>try<br>adodataset1.updatebatch;<br>except<br>message('更新表1时出错');<br>con1.RollbackTrans;<br>end;<br>try<br>adodataset2.updatebatch;<br>except<br>message('更新表2时出错');<br>con1.RollbackTrans;<br>end;<br>try<br>adodataset3.updatebatch;<br>except<br>message('更新表3时出错');<br>con1.RollbackTrans;<br>end;<br>con1.CommitTrans;
 
写的不对吧. 异常后 下面的语句可是还要执行的. 你这么写会出问题的
 
多人接受答案了。
 
后退
顶部