现在有两个表,一个是主表,一个是从表。
现在点保存时,同时保存两个表中数据,要是其中一个表中的数据保存失败,那么第二个表也不给予保存。
代码如下:
adoquery.LockType:=ltOptimistic;
adoquerychild.LockType:=ltOptimistic;
TRY
if not adoconnection1.InTransaction then
    adoconnection1.BeginTrans
adoquery.UpdateBatch();
adoquerychild.UpdateBatch();
adoconnection1.CommitTrans;
EXCEPT
showmessage('保存失败');
END;问题如下:
当adoquery.UpdateBatch();保存成功
adoquerychild.UpdateBatch();保存失败
那么adoquery改的数据都没了,恢复到数据库中的数据。不知道什么原因造成的。

解决方案 »

  1.   

    EXCEPT
      adoconnection1.ROLLBACK; //事务回滚
      showmessage('保存失败');END;
      

  2.   

    写错了。
    出错没有加事务回滚
    EXCEPT
      adoconnection1.ROLLBACKTRANS; //事务回滚
      showmessage('保存失败');
    END;
      

  3.   

    .BeginTrans;
    try    exec(sl1);
       exec(sl2)
       CommitTrans
    except
      rollbacktrans;
    end;
      

  4.   

    rollbacktrans;
    更回滚了,我是退出才回滚啊
      

  5.   

    ltOptimistic;
    post就行
    不用updatebatch
      

  6.   

    使用事务
    try
      adoconnection1.begintrans; //开始事务
      ......
      adoconnection1.committrans;//完成事务
    except
      adoconnection1.rollback;  //一旦失败,回滚,保证数据一致
    end;