码迷,mamicode.com
首页 > 其他好文 > 详细

关于ADO一个容易被忽视的问题!UpdateBatch [问题点数:0分]

时间:2019-01-27 22:05:14      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:触发器   man   raise   doc   用户   cep   其它   one   try   

这是一个常见但容易被忽视的问题,旧贴有问及但没答案,因此提高分数。
相信大家常这样使用Cache模式;
ADOConnection1.BeginTrans;
Try
 ADODataSet1.UpdateBatch(arAll);
 ADOConnection1.CommitTrans;
Except
 ADOConnection1.RollbackTrans;
 Raise;
End;
通常,用户会增加或修改多条记录然后保存,但是,当其中一条记录违反
数据库规则,或触发器的时候,这时会Rollback,然后提示错误,然后用户修改出错的记录,
然后再保存,这时会出现什么情况呢?(提示:除了用户刚修改的记录外,
其它记录的状态都变成了usUnmodified)

同样,把这个BUG推广到多表中:
ADOConnection1.BeginTrans;
Try
 ADODataSet1.UpdateBatch(arAll);       
 ADODataSet2.UpdateBatch(arAll);       // <- 假设出错,然后用户再改正
 ADOConnection1.CommitTrans;
Except
 ADOConnection1.RollbackTrans;
 Raise;
End;

同样,DataSet1的修改会被忽略。
在Borland Newsgroup上,有TeamB的高手给出了SavetoFile,LoadFromFile的
解决方案,我觉得不是一个好办法,因为LOADFROMFILE之后这个记录集的COMMANDTEXT都变成那个文件名了,
CommandType:=cmdfile了,如果SQL里面用了参数,那就很麻烦了!

看看这儿大家有什么解决方法。在发贴时,我在考虑用CLONE解决这个问题!

看来,BDE的两段提交(ApplyUpdate,CommitUpdate)比ADO好n倍啊,不知道BORLAND为什么要放弃他!

关于ADO一个容易被忽视的问题!UpdateBatch [问题点数:0分]

标签:触发器   man   raise   doc   用户   cep   其它   one   try   

原文地址:https://www.cnblogs.com/jijm123/p/10327631.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!