在错误处理里调用了connection.RollbackTrans语句,回滚是回滚了,但它本身又出现了'没有活动事务'的错误,请问如何解决

解决方案 »

  1.   

    留言中的内容:
    On Error GoTo fix_err
          Dim strSQL As String
          strSQL = "delete from 库存原始临时表"
          adoCn.Execute strSQL
     fix_err:
          adoCn.RollbackTrans加一句正常退出:
    On Error GoTo fix_err
          Dim strSQL As String
          strSQL = "delete from 库存原始临时表"
          adoCn.Execute strSQL
          exit sub     '一定要加这句。
     fix_err:
          adoCn.RollbackTrans
      

  2.   

    我的代码是这样的:
    On Error GoTo fix_err
          Dim strSQL As String
          
          Dim rs As New ADODB.Recordset
          Dim sconn As String
          
          CommonDialog1.Filter = "Excel (*.xls)|*.xls"
          CommonDialog1.ShowOpen
        
          rs.CursorLocation = adUseClient
          rs.CursorType = adOpenKeyset
          rs.LockType = adLockBatchOptimistic      sconn = "DRIVER=Microsoft Excel Driver (*.xls);" & "DBQ=" & CommonDialog1.FileName
          rs.Open "SELECT * FROM [sheet1$]", sconn
          
          strSQL = "delete from 库存原始临时表"
          adoCn.Execute strSQL
          Dim i As Integer
          i = 1
          Do Until rs.EOF
            strSQL = "insert into 库存原始临时表 values(" & rs.Fields(0).value & "," & rs.Fields(1).value & "," & rs.Fields(2).value & ")"
            adoCn.Execute strSQL
            i = i + 1
            rs.MoveNext
          Loop
          
          rs.Close
          Set rs = Nothing
          MsgBox "导入成功!!!"
          Exit Sub
          
    fix_err:
          MsgBox "请检查第  " & i & "  行数据是否完整!!!", 32, Me.caption
          adoCn.RollbackTrans
      

  3.   

    你根本就没有用显式事务呀?事务回滚是必须与事务开始配对出现的,回滚不能单独出现。给你改一下:On Error GoTo fix_err
          Dim strSQL As String
          Dim rs As New ADODB.Recordset
          Dim sconn As String
          dim intflag as integer
          
          CommonDialog1.Filter = "Excel (*.xls)|*.xls"
          CommonDialog1.ShowOpen
        
          rs.CursorLocation = adUseClient
          rs.CursorType = adOpenKeyset
          rs.LockType = adLockBatchOptimistic      sconn = "DRIVER=Microsoft Excel Driver (*.xls);" & "DBQ=" & CommonDialog1.FileName
          rs.Open "SELECT * FROM [sheet1$]", sconn
          intflag=1
          adoCn.begintrans      
          strSQL = "delete from 库存原始临时表"
          adoCn.Execute strSQL
          Dim i As Integer
          i = 1
          Do Until rs.EOF
            strSQL = "insert into 库存原始临时表 values(" & rs.Fields(0).value & "," & rs.Fields(1).value & "," & rs.Fields(2).value & ")"
            adoCn.Execute strSQL
            i = i + 1
            rs.MoveNext
          Loop
          adocn.committrans
          intflag=0
          rs.Close
          Set rs = Nothing
          MsgBox "导入成功!!!"
          Exit Sub
          
    fix_err:
          MsgBox "请检查第  " & i & "  行数据是否完整!!!", 32, Me.caption
         if intflag=1 then adoCn.RollbackTrans