老
老头
Unregistered / Unconfirmed
GUEST, unregistred user!
执行下面代码后,你认为数据库会增加记录吗?答案是否。
//MDB库,ADOTable1.Connection=ADOCn1; clUseClient, ltBatchOptimistic
begin
ADOTable1.InsertRecord([...]);
ADOCn1.BeginTrans;
ADOTable1.UpdateBatch;
ADOConnection1.RollbackTrans;
ADOCn1.BeginTrans;
ADOTable1.UpdateBatch;
ADOCn1.CommitTrans;
end;
在实际的程序中,我在事务代码中处理三个表,其中一个显示在DBGrid中供用户插入多条记录,我希望在全部成功提交之前插入的记录保持在缓冲中,用户可以继续编辑并重新提交。
问题的实质是:在事务回滚之后,表缓冲状态没有改变,ADO误认为这些记录已经在物理表中存在,所以在实际的程序中还会引发很多其它错误。
我特意学了一下VB并作同样的测试,结果也是如此。我以前用VFP不存在这个问题(当然没有用ADO,只是VFP本身的DBC、DBF)。
我知道有两个间接的答案:
一、用TStringGrid代替TDBGrid保存提交之前的记录,这很麻烦且影响界面的一致性;
二、动态建立临时表(由于该表有一外键且键值在提交前未知),同样也很麻烦(要保证多用户间不冲突)且感觉总是不合理,至少MDB会高速膨胀。如果ADO可以在内存中建立临时表,这样做倒不错。
希望哪位高手能提供直接解决的办法,先多谢了。
//MDB库,ADOTable1.Connection=ADOCn1; clUseClient, ltBatchOptimistic
begin
ADOTable1.InsertRecord([...]);
ADOCn1.BeginTrans;
ADOTable1.UpdateBatch;
ADOConnection1.RollbackTrans;
ADOCn1.BeginTrans;
ADOTable1.UpdateBatch;
ADOCn1.CommitTrans;
end;
在实际的程序中,我在事务代码中处理三个表,其中一个显示在DBGrid中供用户插入多条记录,我希望在全部成功提交之前插入的记录保持在缓冲中,用户可以继续编辑并重新提交。
问题的实质是:在事务回滚之后,表缓冲状态没有改变,ADO误认为这些记录已经在物理表中存在,所以在实际的程序中还会引发很多其它错误。
我特意学了一下VB并作同样的测试,结果也是如此。我以前用VFP不存在这个问题(当然没有用ADO,只是VFP本身的DBC、DBF)。
我知道有两个间接的答案:
一、用TStringGrid代替TDBGrid保存提交之前的记录,这很麻烦且影响界面的一致性;
二、动态建立临时表(由于该表有一外键且键值在提交前未知),同样也很麻烦(要保证多用户间不冲突)且感觉总是不合理,至少MDB会高速膨胀。如果ADO可以在内存中建立临时表,这样做倒不错。
希望哪位高手能提供直接解决的办法,先多谢了。