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

Posted 癫狂编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于ADO一个容易被忽视的问题!UpdateBatch [问题点数:0分]相关的知识,希望对你有一定的参考价值。

这是一个常见但容易被忽视的问题,旧贴有问及但没答案,因此提高分数。
相信大家常这样使用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分]的主要内容,如果未能解决你的问题,请参考以下文章

容易被忽视的后端服务 chunked 性能问题

一个容易被忽视的标签 —— iframe

Javascript中容易被忽视的地方

sql 容易被忽视的点

那些非常重要却容易被忽视的 HTML 标签,你知道多少?

C语言工作中容易忽视的问题