Причина сообщения, почему не удалось выполнить метод - PullRequest
1 голос
/ 09 июня 2010

Я использую метод DAO Execute, чтобы удалить некоторые записи.Если это не удается, то это ясно, проверяя RecordsActed (это будет 0).Но возможно ли получить сообщение об ошибке (например, войти или показать пользователю)?Я пытаюсь удалить записи вручную в таблице, я получаю четкое диалоговое сообщение, например, «Запись не может быть удалена или изменена, потому что таблица x содержит связанные записи».

Ответы [ 2 ]

1 голос
/ 09 июня 2010

Включите параметр dbFailOnError с методом Execute, чтобы зафиксировать ошибки DELETE. Без dbFailOnError ваш DELETE может молча завершиться ошибкой.

Опираясь на RecordsAffect, чтобы указать, что сбой УДАЛИТЬ может вводить в заблуждение. Например, если ваш DELETE содержит «WHERE Sample = 5», и нет строки со значением Sample 5, RecordsActed будет равно 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
1 голос
/ 09 июня 2010

Должно быть возможно использовать ошибки DBEngine: http://msdn.microsoft.com/en-us/library/bb177491(office.12).aspx

...