【发布时间】:2010-06-09 08:59:12
【问题描述】:
我使用 DAO 方法 Execute 删除一些记录。如果失败,请通过检查 RecordsAffected(它将为 0)来明确这一点。但是是否有可能获得错误消息(例如,记录或显示给用户)?我尝试在表格网格中手动删除记录我得到一个清晰的对话框消息,例如"该记录无法删除或更改,因为表 x 包含相关记录"。
【问题讨论】:
标签: ms-access ms-access-2007 dao
我使用 DAO 方法 Execute 删除一些记录。如果失败,请通过检查 RecordsAffected(它将为 0)来明确这一点。但是是否有可能获得错误消息(例如,记录或显示给用户)?我尝试在表格网格中手动删除记录我得到一个清晰的对话框消息,例如"该记录无法删除或更改,因为表 x 包含相关记录"。
【问题讨论】:
标签: ms-access ms-access-2007 dao
在 Execute 方法中包含 dbFailOnError 选项以捕获您的 DELETE 错误。如果没有 dbFailOnError,您的 DELETE 可能会静默失败。
依赖 RecordsAffected 来指示 DELETE 失败可能会产生误导。例如,如果您的 DELETE 包含“WHERE Sample=5”,并且没有 Sample 值为 5 的行,则 RecordsAffected 将为 0。这不是数据库引擎的错误。
在以下示例中,DELETE 失败是因为在 tblParent 和 tblChild 之间存在强制引用完整性的关系。因此消息框显示“无法删除或更改记录,因为表'tblChild'包含相关记录”。
Public Sub DeleteFailure()
Dim strSql As String
Dim strMsg As String
Dim db As DAO.Database
On Error GoTo ErrorHandler
strSql = "DELETE FROM tblParent WHERE id = 1;"
Set db = CurrentDb
db.Execute strSql, dbFailOnError
ExitHere:
On Error GoTo 0
Debug.Print "RecordsAffected: " & db.RecordsAffected
Set db = Nothing
Exit Sub
ErrorHandler:
strMsg = "Error " & Err.Number & " (" & Err.Description _
& ") in procedure DeleteFailure"
MsgBox strMsg
GoTo ExitHere
End Sub
更新:这是一个经过修订的 ErrorHandler,以适应由 DAO 操作触发的多个错误。
ErrorHandler:
Dim errLoop As Error
Debug.Print "Errors.Count: " & Errors.Count
For Each errLoop In Errors
With errLoop
strMsg = "Error " & Err.Number & " (" & _
Err.Description & _
") in procedure DeleteFailure"
End With
MsgBox strMsg
Next
Set errLoop = Nothing
GoTo ExitHere
【讨论】:
应该可以使用DBEngine错误:http://msdn.microsoft.com/en-us/library/bb177491(office.12).aspx
【讨论】: