我收到错误存储到表中,但On Error没有触发。在行db.Execute我会得到一个约束错误,但不是触发错误,代码继续,就像它成功。当我离开例程时,我知道有一个错误,因为0被传回,但我不知道错误是什么,所以我最终不得不进行调试,捕获代码然后直接尝试访问。无论如何我可以让它触发错误吗?这是我的代码(缩写):
Private Function storeHAP(list of arguments, ByRef db As DAO.Database) As Long
Dim sql As String
On Error GoTo foundError
sql = "INSERT INTO HAPs (list of column names...) " + _
"VALUES (list of values...)"
db.Execute (sql)
'This function will look up the record and return the primary key.
'A value of 0 indicates it wasn't stored and will force an exit in
'the main routine.
storeHAP = lookupHAP(list of arguments..., db)
Exit Function
foundError:
MsgBox "Error in storeHAP: " + CStr(Err) + ", " + Error(Err) + ". SQL: " + sql + "."
End Function 'storeHAP
答案 0 :(得分:1)
来自the documentation(我的重点):
在Microsoft Access工作区中,如果您提供语法 正确的SQL语句并具有相应的权限, 执行方法不会失败 - 即使不能修改单行也是如此 或删除。因此,使用时始终使用dbFailOnError选项 用于运行更新或删除查询的Execute方法。这个选项 生成运行时错误并回滚所有成功的更改,如果 受影响的任何记录都已锁定且无法更新或 删除。
您需要指定dbFailOnError
选项:
db.Execute sql, dbFailOnError