Currentdb.Execute с dbFailonError не выдает ошибку
В Access 2003-2016 я использую CurrentDb.Execute с dbFailonError для выполнения инструкции INSERT. Оператор INSERT должен завершиться ошибкой (и это произойдет), потому что одно поле имеет неправильное значение на основе связанной таблицы с «принудительной ссылочной целостностью». Однако это не вызывает ошибки. Я попытался воссоздать эту проблему в новой базе данных, и ошибка работает правильно. Что-то не так в настройках моей текущей базы данных, и я не хочу воссоздавать ее с нуля. Я взял все из своей базы данных, кроме проблемной части, и моя минимальная воспроизводимая база данных примеров находится по этой ссылке .
Вот мой код, но проблема в том, что этот код работает нормально и выдает ошибки, когда я создаю новую базу данных с нуля. Это просто не работает в моей текущей базе данных.
Private Sub Command34_Click()
Dim testsql As String
testsql = "INSERT INTO tblObservations (Site,TotalDepth) VALUES ('SUD-096',5)"
With CurrentDb
On Error GoTo Err_Execute
.Execute testsql, dbFailOnError
On Error GoTo 0
MsgBox ("Upload completed. " & .RecordsAffected & " records added.")
End With
Exit Sub
Finish:
Exit Sub
Err_Execute:
If DBEngine.Errors.Count > 0 Then
For Each errLoop In DBEngine.Errors
MsgBox ("Error number: " & errLoop.Number & vbCr & errLoop.Description)
Next errLoop
End If
Resume Finish
End Sub
Ответы
Используйте Option Explicit, как сказал Ганс. Всегда используйте Option Explicit!
Вам не хватает ссылки на объект Microsoft Office ##. # Access Database Engine. Вот где dbFailOnErrorопределяется. Поскольку у вас нет этой ссылки, dbFailOnErrorне определено. Эта ссылка добавляется ко всем базам данных Access по умолчанию, и я настоятельно рекомендую добавить ее.
И поскольку вы не используете его Option Explicit, VBA не возражает против того, что он не определен, и просто приводит эту неопределенную переменную к нулю.
Если по какой-то причине вы не хотите добавлять ссылку, используйте соответствующее значение для dbFailOnError:
.Execute testsql, 128