我在vb程序里有时需要把adodb.connection close掉,但如果调用了BeginTrans   开始事务就会报在事务中不能强行关闭,如何能判断是否在事务中?

解决方案 »

  1.   

    判断是否要事务中,只要看启动事务时的返回值...
    dim lngTrans as long
    lngTrans=cn.BeginTrans  '以上事务成功启动返回 1
    '处理代码.....
    '事务提交后,设置
    lngTrans=0你只要判断lngTrans的值就知道是不是在事务中
      

  2.   

    强行关闭不就是不执行该事务吗,而且就算能强行关闭还不一定能取消掉已经执行的部分呢.
            If CBool(cnn.State And adStateExecuting) Then
                cnn.RollbackTrans
            Else
                cnn.CommitTrans
            End If
      

  3.   


    这位大哥的代码能不能解释一下adStateExecuting什么意思
      

  4.   

    adStateExecuting表示正在执行命令. 这么简单两句代码你也看不懂,实在难以解释
    看看ADO的帮助吧.
      

  5.   

    BeginTrans前加个布尔变量记录一下开始了不就完了么?
    活人能被尿憋死?
      

  6.   


    我理解能力实在低是不是开始事务之后cnn.state 就等于adStateExecuting???
      

  7.   

    设置是否在事务中标志的最佳位置是在事件 BeginTransComplete、CommitTransComplete、RollbackTransComplete。
    建议对 ADODB.Connection 做个小小的封装,响应上面三个事件,封装的 Close 方法就可以前判断是否在事务中,必要时执行 RollbackTrans,然后再调用 Close。