我现在做了个程序,需要向数据库中作添加、删除、更改的操作!
现在需要做事务回滚处理,在对数据库进行操作之前加上了“Conn400.BeginTrans”其中“Conn400”是一个CONNECTION,和一个如果正确处理了就可以“Conn400.CommitTrans”;还有一个如果错误就“Conn400.RollbackTrans”;
可是,当数据处理遇到错误后程序能正确的运行“Conn400.RollbackTrans”条语句,但到数据库中却发现它并没有被回滚;
因为,在程序处理数据库之前,数据库里没有数据是空的,当程序处理到了错误的数据后本应该做一个回滚操作的,但出现错误并执行了“Conn400.RollbackTrans”后数据库确有报错前被处理的记录!

解决方案 »

  1.   


    不行,我的数据库AS400的DB2。我必须要在程序里处理的,回滚处理应该是可以的呀!
    程序回滚在SQL SERVER里面就行的呀!
      

  2.   

    如果同样的事情在SQL SERVER可以的话,建议一点点排查,看看到底是什么样的操作情况导致事务无效
      

  3.   

    当然,是同一个过程里,而且是同一个CONNECTION。
    我现在也不知道该怎么办了,你们有谁做过事务回滚的?
    请帮忙分析一下!
    我在程序里的这三个方法都能正确运行没有报错,所以应该排除这三种事务不能使用的可能,但还有什么别的可能吗?
    难道AS400本身的DB2数据库无法实现数据回滚?
      

  4.   

    这是我的源代码:On Error GoTo ErrorLine  For tFor = 1 To ListTable
        DoEvents
        Set RecordSQL = New Recordset
        sSelectSQL = "Select * From " & sTableSQL
        Set RecordSQL = MyConn.Execute(SelectSQL)
        DoEvents
        RecordSQL.MoveFirst
        Set Record400 = New Recordset
        With Record400
          .CursorType = adOpenDynamic 'adOpenStatic
          .LockType = adLockPessimistic ' adLockOptimistic
          
          sSelect400 = "Select " & sTable400 & ".* From " & sTable400
          .Open sSelect400, Conn400
        End With    Conn400.BeginTrans
        DoEvents
        sMySelect = "Select * From FieldName Where TableName='" & sTableSQL & "'"
        Set MyRecord = MyConn.Execute(sMySelect)    Do While (Not (RecordSQL.EOF Or RecordSQL.BOF))
           DoEvents
           Record400.AddNew
           MyRecord.MoveFirst
           Do While (Not (MyRecord.EOF Or MyRecord.BOF))
              tFieldSQL = Trim(MyRecord("FieldName"))
              tField400 = Trim(MyRecord("RmtFName"))
              Record400(tField400) = RTrim(RecordSQL(tFieldSQL))
              MyRecord.MoveNext
           Loop
           Record400.Update
           RecordSQL.MoveNext
        Loop
        Conn400.CommitTrans
        Set RecordSQL = Nothing
        Set Record400 = Nothing
    NextRecord:
      NextExit FunctionErrorLine:  Select Case Err.Number
         Case Else
            Err.Clear
            Conn400.RollbackTrans
            GoTo NextRecord
      End Select
      Resume Next
    End Function