关于多个DataSet使用事务的讨论
司码君 2007-08-03 05:58:26 代码如下:
try
FPurchase.Connection.BeginTrans;
FPurchase.Save; //1
FPurchaseDetail.Save; //2
FPurchase.Connection.CommitTrans;
except
FPurchase.Connection.RollbackTrans;
on e: Exception do
begin
StatuseInfo(Caption + ':' + e.Message);
end;
end;
FPurchase和FPurchaseDetail用的同一个ADOConnection;
1,2位置的Save方法都是使用的DataSet.UpdateBatch;
问题:
当代码1的保存成功,代码2的保存出现异常回滚的时候,如果用户修改FPurchaseDetail中的数据,再次保存,则代码2处的保存成功,代码1处的保存不会出现异常,但是实际上数据没有能够存入数据库。
个人考虑:
当第一次保存的时候,因为代码1的保存没有出现异常DataSet的状态发生变化,应该变成了浏览状态。
第二次保存时,因为1位置的DataSet已经是浏览状态,而且没有发生变化所以不再保存。而仅仅执行代码2,将明细保存了。
不知是否正确,尝试了一些方法,觉得不妥,是否有更好的方法,大家讨论,谢谢