执行代码时,发现:
  如果命令出错,再次执行时,系统总是提示
   Cannot start more transaction on this session
而我的代码是:               try
                  adoCmd.Execute;
               except on E:Exception do
                       begin
                       adoConn.RollbackTrans;
                       exit;
                       end;
               end;
我已经令事务回滚了, 为什么还会那样?如何解决?

解决方案 »

  1.   

    可能是执行如果成功,你没有commit;  try
                      adoCmd.Execute;
                      adoCmd.CommitTrans;
                   except on E:Exception do
                           begin
                           adoConn.RollbackTrans;
                           exit;
                           end;
                   end;
      

  2.   

    事物的使用方式是,开始事物,正常就提交事物,异常就回滚procedure TForm1.BitBtn2Click(Sender: TObject);
    begin
      ADOConnection1.BeginTrans;
      try
        ADOQuery1.ExecSQL;
        ADOConnection1.CommitTrans;
      except
        ADOConnection1.RollbackTrans;
      end;
    end;
      

  3.   

    回二位:
    我的完整代码如下:
    adoConn.beginTrans;
                  try
                      adoCmd.Execute;
                   except on E:Exception do
                           begin
                           adoConn.RollbackTrans;
                           exit;
                           end;
                   end;
    adoCOnn.comitTrans;
    事务的三个操作我都写好了.
    但每次总出现上述错!
      

  4.   

    大哥,adoCOnn.comitTrans;这句应该放在    adoConn.RollbackTrans;前面吧这样试试
                  try
    adoConn.beginTrans;
                      adoCmd.Execute;adoCOnn.comitTrans;               except on E:Exception do
                           begin
                           adoConn.RollbackTrans;
                           exit;
                           end;
                   end;
      

  5.   

    同意,要先commit,才能rollback
      

  6.   

    啊,commit是提交事务,如果出错就回滚,如果不出错就提交事务。
    为什么错了?
      

  7.   

    看看 ADOConnection1.InTransaction在启动事物的时候,是不是已经启动了一个事物