我使用DAO方法执行删除一些记录。如果失败,则通过检查RecordsAffected(它将为0)可以清楚地看到这一点。但是有可能得到错误消息(例如,记录或显示给用户)?我试图在表格中手动删除记录,我得到一个清晰的对话框消息,例如“由于表格x包含相关记录,因此无法删除或更改记录”。
答案 0 :(得分:1)
应该可以使用DBEngine错误:http://msdn.microsoft.com/en-us/library/bb177491(office.12).aspx
答案 1 :(得分:1)
使用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