我使用DataEnvironment设计器访问数据库,需要执行一个SQL后台函数,在执行此函数之前我先执行了 BeginTrans语句,之后跟据返回的值判断执行CommitTrans还是Rollback语句,但是执行Rollback语句后无法撤消SQL函数中的改动,请高手帮忙。下面是源码:
    strSQLFun = "select f_preorder_submit(" + strFieldId + _
            ",'" + strBankCardNum + "','" + strUserId + "','" + strInterval + "')"
     
    DataE.Commands("cmdFunPreOrder").CommandText = strSQLFun
    DataE.conDataLib.Close
    DataE.conDataLib.Open
    
    BeginTrans
    DataE.cmdFunPreOrder
    strFunResult = DataE.rscmdFunPreOrder.Fields(0)
    
    If Mid(strFunResult, 1, 8) = "LINE_ID^" Then
        CommitTrans
    MsgBox "成功!"
    Else
        Rollback
    MsgBox "失败!"
    End If

解决方案 »

  1.   

    strSQLFun = "select f_preorder_submit(" + strFieldId + _
                ",'" + strBankCardNum + "','" + strUserId + "','" + strInterval + "')"
        BeginTrans 
        DataE.Commands("cmdFunPreOrder").CommandText = strSQLFun
        DataE.conDataLib.Close
        DataE.conDataLib.Open
        
        
        DataE.cmdFunPreOrder
        strFunResult = DataE.rscmdFunPreOrder.Fields(0)
        
        If Mid(strFunResult, 1, 8) = "LINE_ID^" Then
            CommitTrans
        MsgBox "成功!"
        Else
            Rollback
        MsgBox "失败!"
        End 
    放前面试试
      

  2.   

    BeginTrans/CommitTrans/Rollback在改过程中什么东东,由定义吗?为何不用Connection的事务方法?strSQLFun = "select f_preorder_submit(" + strFieldId + _
                ",'" + strBankCardNum + "','" + strUserId + "','" + strInterval + "')"
        DataE.conDataLib.Close
        DataE.conDataLib.Open
        DataE.Commands("cmdFunPreOrder").CommandText = strSQLFun    DataE.conDataLib.BeginTrans    
        
        DataE.cmdFunPreOrder
        strFunResult = DataE.rscmdFunPreOrder.Fields(0)
        
        If Mid(strFunResult, 1, 8) = "LINE_ID^" Then
            DataE.conDataLib.CommitTrans
        MsgBox "成功!"
        Else
            DataE.conDataLib.RollbackTrans
        MsgBox "失败!"
        End 
      

  3.   

    谢谢winehero(编程人生),已经OK了