繁体   English   中英

MS Access Rollback 错误处理 Rollback

[英]MS Access Rollback error handling Rollback

在我的程序中,我有一个函数可以做三件事:它在一些表中插入多个内容,创建一个 pdf 文档,并发送一封电子邮件,附件中包含创建的文档。 我在解决错误处理时遇到问题。

    DAO.DBEngine.BeginTrans
    On Error GoTo failed
    
    CurrentDb.Execute "INSERT INTO tblClaimStatus ( ClaimID, ClaimStatusTypeID, UserID) " & _
        "VALUES (" & claimId & ", 2," & CurrentUserId & ");", dbFailOnError
    CurrentDb.Execute "Insert INTO tblClaimPartner (ClaimId, OriginalDeadline, NachfristDeadline) " & _
        "VALUES (" & claimId & ", '" & Me.OriginalDeadlineTextbox & "', '" & Me.NewDeadlineTextbox & "');", dbFailOnError
    
    WriteGraceDocument (claimId)
    SendEmail (claimId)
    DAO.DBEngine.CommitTrans

问题是我希望能够在任何失败的情况下回滚 SQL 事务。 但我还需要 Subs WriteGraceDocuement 和 SendEmail 中尚未提交的数据。

我应该如何解决这个问题?

让您的函数返回成功不成功

DAO.DBEngine.BeginTrans

' Validate the values before attempting to insert these.
Success = ValidateInserts(claimId, 2, CurrentUserId, Me!OriginalDeadlineTextbox.Value, Me!NewDeadlineTextbox.Value)

If Success Then    
    CurrentDb.Execute "INSERT INTO tblClaimStatus ( ClaimID, ClaimStatusTypeID, UserID) " & _
        "VALUES (" & claimId & ", 2," & CurrentUserId & ");", dbFailOnError
    CurrentDb.Execute "Insert INTO tblClaimPartner (ClaimId, OriginalDeadline, NachfristDeadline) " & _
        "VALUES (" & claimId & ", '" & Me.OriginalDeadlineTextbox & "', '" & Me.NewDeadlineTextbox & "');", dbFailOnError
End If
    
If Success Then
    Success = WriteGraceDocument(claimId)
End If
If Success Then
    Success = SendEmail (claimId)
End If

If Success Then
    DAO.DBEngine.CommitTrans
Else
    DAO.DBEngine.RollBack
End If

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM