[英]T-SQL error handling with try catch rollback, error rows were deleted
[英]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.