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