奇怪的数据丢失现象(20)

  • 主题发起人 主题发起人 ntjrr
  • 开始时间 开始时间
N

ntjrr

Unregistered / Unconfirmed
GUEST, unregistred user!
DELPHI+ACCESS代码: try ADOConnection1.BeginTrans; 操作表A(修改编号加1) 操作表B(取加1后的编号及其它字段写入记录) ADOConnection1.CommitTrans; 赋值变量XX为真 except ADOConnection1.RollBackTrans; end; 如果XX为真 开始打印表B中的记录。 错误现象:数据表中的记录正常打印出来了,但打印过后B中的记录没有了,A表中的编号也减了1。 困惑:这是一段成熟的代码,有N人运用数年正常,但在某用户处用一月出现了一次。但理论上不会这样呀,打印了就说明数据肯定正常写好了,整个代码中也没有一条是删除该表记录的代码,即使用户删除了(他根本不懂电脑,也不必要删除),也不会把编号减掉一,郁闷,难道就是ACCESS本身偶发的BUG?
 
好象该改成这样吧except ADOConnection1.RollBackTrans; 赋值变量XX为真; end;
 
CommitTrans成功后,有没有什么代码能查询到事务已提交成功?数据库本身有没有什么值返回的?
 
“ADOConnection1.CommitTrans;”||-->插入这句:if ADOConnection1.InTransaction= false then“ 赋值变量XX为真”看看是否还会发生打印后回滚。
 
if ADOConnection1.InTransaction= false,是不是就是判断事务不在进行中了(要不就提交完成,要不就回滚了)如果我的理解是对的,那么就不怕在极端情况下的丢失数据了!
 
那我感觉放在EXCEPT END 后面比较好,对吧?
 
还有将ADOConnection1关闭再打开一下,然后再查询打印数据,那样是不是保证查到的数据不会再回滚了?
 
如果事务回滚,则InTransaction应该被赋true值。当然再次连接后查询的数据是数据库中已存在的,如果事务回滚,则应该在你关闭连接前回滚,不然就接受提交,我是这么认为的。断开再重新连接,应该是有代价的,本地的不明显,网络的会比较明显,这就像你每次上网都用猫重新拨号一样的道理,就算你是1G带宽,也会有察觉。
 
接受答案了.
 
后退
顶部