消息原因Execute方法失败

时间:2010-06-09 08:59:12

标签: ms-access ms-access-2007 dao

我使用DAO方法执行删除一些记录。如果失败,则通过检查RecordsAffected(它将为0)可以清楚地看到这一点。但是有可能得到错误消息(例如,记录或显示给用户)?我试图在表格中手动删除记录,我得到一个清晰的对话框消息,例如“由于表格x包含相关记录,因此无法删除或更改记录”。

2 个答案:

答案 0 :(得分:1)

答案 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