麻烦各位大大了,我用delphi,然后
adoconnection1.BeginTrans;
adoconnection1.Execute(sql1);
adoconnection1.Execute(sql2);
adoconnection1.Execute(sql3);
adoconnection1.Execute(sql4);
adoconnection1.Execute(sql5);
adoconnection1.CommitTrans;执行之后,程序无异常,没有回滚,但是很多次操作之后,就会发现例如其中某一个sql3并没有执行成功,该修改的数据没有修改,而且这个时候程序也没有抛出异常,所以也就没有回滚想问问是什么原因,怎么解决。谢谢
希望能够得到解决,再次感谢,如果分不够,可以开贴再给。

解决方案 »

  1.   

    Commit之后,对应的Dataset Query最好要Requery一下刷新数据
    比如
    adoconnection1.BeginTrans;
    adoconnection1.Execute(sql1);
    adoconnection1.Execute(sql2);
    adoconnection1.Execute(sql3);
    adoconnection1.Execute(sql4);
    adoconnection1.Execute(sql5);
    adoconnection1.CommitTrans;
    adoquery1.requery();
    adoquery2.requery();
    ......
      

  2.   

    1、这是事务处理,逐条检查SQL语句,是否有错误,只要其中一条有错,就不能执行任何一条SQL。
    2、你说的只有一条。未执行,不大可能。如果出现这类问题,应该是MSSQL服务器软件有问题了。这也许全部执行了,你未查觉,再重新显示(刷新)数据看看。
      

  3.   

    用SQL SERVER Profiler跟踪执行的sql语句就清楚了
      

  4.   

    Sql3是不是有where条件限制了是否执行 
      

  5.   

    除这个之外,另外就是SQL3执行后,后面的两条语句是否把SQL3的结果覆盖掉也是有可能的。
      

  6.   

    你试试先将前2条commit之后,后面3个再做一个事务
      

  7.   

    用数据集执行吧,设置一个属性就行了
    AdoQuery.ExecuteOptions:=[TExecuteOption.eoExecuteNoRecords];
    AdoQuery.Execute(?);
    AdoQuery.Execute(?);
    AdoQuery.Execute(?);