Причина сообщения, почему Выполняют отказавший метод

Я использую метод ДАО, Выполняются для удаления некоторых записей. Если это перестало работать, это ясно путем проверки RecordsAffected (это будет 0). Но действительно ли возможно получить сообщение об ошибке (например, зарегистрировать или показать пользователю)? У меня есть попытка удалить записи вручную в сетке Таблицы, я получаю четкое диалоговое сообщение, например, "Запись не может быть удалена или изменена, потому что таблица x включает связанные записи".

1
задан waanders 9 June 2010 в 08:59
поделиться

2 ответа

Включите опцию dbFailOnError с методом Execute, чтобы зафиксировать ваши ошибки 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
1
ответ дан 2 September 2019 в 23:55
поделиться

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

1
ответ дан 2 September 2019 в 23:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: