小弟写的一个程序,处理过程是这样的:有一个表A,在Delphi中对其记录进行修改,此程序代称为Proc1;
另有一程序Proc2,调用存储过程读这个A表,并将A表中的记录写入到另一个表。在Proc1程序中,我使用ADOQuery组件执行SQL进行表A的UPDATE后,产生如下情况:
1.Proc2中提示存储过程执行失败
2.Proc1中再读A表时,无法取表A记录,连"select count(*) from a"也无法执行
如果在Proc1中,使用ADOQuery组件对表A进行UPDATE时使用了事务,则无以上问题现出。
小弟请教,在未使用事务时,我已执行Execsql,表A的数据应该更改成功了呀,为什么会出现问题?而采用事务后就没有问题了?未采用事务时是不是产生了数据库冲突?冲突是如何产生的呢?请高手指点,谢谢!

解决方案 »

  1.   

    加上一句:表A中的数据量较大,Proc1与Proc2在网络环境下运行,并可能有多个用户同时进行操作。
      

  2.   

    我觉得应该采用事务处理,因为这种情况下不采用数据处理很危险,容易造成数据的丢失等错误。
    至于你遇到的问题有没有可能是因为adoquery虽然执行了操作,但是没有释放对表的占用,所以造成了这样的问题呢?或者是和
      

  3.   

    楼上两位:操作完数据集后,我都及时CLOSE了,按理说表的占用释放了呀。