'其他代码
 .......
 '使用事务执行添加
On Error GoTo ErrHandle:
conn.ConnectionString = constr
conn.Open
conn.BeginTrans '开启事务
conn.Execute "insert into b1 (......)"
conn.Execute "insert into b2 (......)"
conn.CommitTrans '提交事务'
MsgBox "成功", vbInformation
'错误处理
ErrHandle:
    conn.RollbackTrans   '出错,回滚事务
'    conn.Close
     MsgBox "保存失败,错误原因为:" & Err.Description, vbExclamation, "提示"
    Exit Sub    ’其他代码
.......
这是我的代码,添加是成功了,可是成功后 还执行conn.RollbackTrans   '出错,回滚事务 这句话,然后就报错了

解决方案 »

  1.   

    MsgBox "成功", vbInformation
    Exit sub
    ErrHandle:
      conn.RollbackTrans '出错,回滚事务
    ' conn.Close
      MsgBox "保存失败,错误原因为:" & Err.Description, vbExclamation, "提示"
      Exit Sub  ’其他代码
    .......
      

  2.   

    MsgBox "成功", vbInformation
    set conn=nothing
    exit sub    '没有这个就会执行下面的代码(回滚)
      

  3.   

    是用ADO对象连接的吧,应该在 MsgBox "成功", vbInformation 后面加上 Exit sub,ErrHandle:里的代码是出错后才执行的,如果不出错也就不用执行了,你的conn需要用时才打开,关闭代码还要写在 MsgBox "成功", 后面,修改后的代码是:
    MsgBox "成功", vbInformation
    conn.Close
    Exit sub

    ErrHandle:
      conn.RollbackTrans '出错,回滚事务
      conn.Close
      MsgBox "保存失败,错误原因为:" & Err.Description, vbExclamation, "提示"
      Exit Sub  ’其他代码
    .......
      

  4.   

    其实如果事务启动后,如果在conn.Execute "insert into b1 (......)"这个第一个操作时出错,数据插入没有执行成功,会跳入ErrHandle:标签执行下面的代码,而这个时候是也是没有要回滚事务,程序也会报错,所以建议声明一个变量,来返回execute方法所影响的行数,由这个值来确定是还要回滚:    dim row as long
    On Error GoTo ErrHandle:
        conn.ConnectionString = constr
        conn.Open
        conn.BeginTrans '开启事务
        conn.Execute "insert into b1 (......)", row
        conn.Execute "insert into b2 (......)",row
        conn.CommitTrans '提交事务'
        MsgBox "成功", vbInformation
        set conn=nothing
        Exit Sub'错误处理
    ErrHandle:
        if row >0 then conn.RollbackTrans '出错,回滚事务
        MsgBox "保存失败,错误原因为:" & Err.Description, vbExclamation, "提示"
      '.......