当使用一个ADOQuery操作数据库时,发现当insert、update等操作语句放在一起执行没有问题,但是中间再调用存储过程时,事务的一部分会莫名其妙地回滚一部分,就产生了数据错误。
如先执行一个update,再调用一个存储过程,再执行其它的update语句,会发现存储过程前的update被回滚了,后面的存储过程及后面的update语句,都执行成功了,很奇怪,各位知道为什么吗?环境:Delphi7、MS SQLServer2000。

解决方案 »

  1.   

    应该是这样,我们被这个问题困扰了半年了,始终找不到解决方法。
    有时候肯定会出现这种情况,而有时候出现问题的概率又不高,在开发环境下很难发生,在用户现场就暴露的比较多。
    不知道是Delphi的问题,还是SQL Server的问题,还是ADO的问题。
      

  2.   

    计算机是不会骗人的(基本上)你好好看看你的 commit  update 这些代码间是否有错误或者溢出吧如果你 insert 没有 commit ,你再次调用其他的事务,不回滚才怪了
      

  3.   

    你不然把前面的那个UPDATE也写在存储过程里,如果中间的业务处理很多,也可以单独为UPDATE写个存储过程,这样应该就没问题了。
      

  4.   

    各种问题都有可能,不过你在客户端操作之前最好让adoquery.refresh一下,因为你的存储过程可能对数据进行了修改,但客户端没有得到刷新,update就会出问题,事务就回滚了