对于某些设置或者提交,如果希望是全部修改完毕后才确定生效,可以将DataSet的LockType:=ltBatchOptimistic,这样就可以了。然后每次做的修改和改动都暂时保存在缓存中,必须通过UpdateBatch来提交入库。可以通过判断DataSet的UpdateStatus属性是否为usUnmodified就可以知道先前是否已经提交了改动了。
注意:对于用户已经Edit,但是未提交的修改,也要注意提示用户保存。由于没有提交前UpdateStatus并没有发生变化,所以还要注意判断是否ADOTable1.State=dsBrowse,以便提示用户是否保存。
if (ADOTable1.UpdateStatus<>usUnmodified) or (Not (ADOTable1.State=dsBrowse)) then
begin
end;
这个用法也可以通过事务实现,操作前先通过ADOConnection的BeginTrans开始事务,提交修改是CommitTrans,回滚是RollbackTrans,判断是否处于事务中读取InTransaction属性即可。事务也有一个缺点,就是DataSet没有事务,如果多个DataSet使用一个ADOConnection,如果使用事务势必影响其他操作。而且有文章说事务处理起来比较耗费资源,至少比UpdateBatch费资源,呵呵~