Currentdb.Execute dbFailonError 没有抛出错误

Currentdb.Execute with dbFailonError not throwing an error

在 Access 2003-2016 中,我使用 CurrentDb.Execute 和 dbFailonError 到 运行 INSERT 语句。 INSERT 语句应该会失败(确实如此),因为根据具有“强制参照完整性”的相关 table,一个字段的值不正确。但是,它不会引发错误。我已尝试在新数据库中重新创建此问题,并且该错误正常运行。我当前数据库的设置有问题,我不想从头开始重新创建它。除了有问题的部分和我的 minimal reproducible example database is at this link.

之外,我已经从数据库中取出所有内容

这是我的代码,但问题是当我从头开始创建新数据库时,这段代码工作正常并且会抛出错误。它在我当前的数据库中不起作用。

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 数据库引擎对象的引用。这是定义 dbFailOnError 的地方。因为您没有该引用,所以 dbFailOnError 未定义。这个引用默认添加到所有的Access数据库中,我强烈建议添加它。

并且因为您没有使用 Option Explicit,VBA 不介意它是未定义的,只是将未定义的变量转换为零。

如果出于某种原因您不想添加引用,请将 corresponding value 用于 dbFailOnError:

.Execute testsql, 128