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
在 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