Включите параметр 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