存储到表中时访问VBA错误不会触发“On Error”

时间:2016-09-15 17:44:57

标签: vba ms-access access-vba

我收到错误存储到表中,但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

1 个答案:

答案 0 :(得分:1)

来自the documentation(我的重点):

  

在Microsoft Access工作区中,如果您提供语法   正确的SQL语句并具有相应的权限,    执行方法不会失败 - 即使不能修改单行也是如此   或删除。因此,使用时始终使用dbFailOnError选项   用于运行更新或删除查询的Execute方法。这个选项   生成运行时错误并回滚所有成功的更改,如果   受影响的任何记录都已锁定且无法更新或   删除。

您需要指定dbFailOnError选项:

db.Execute sql, dbFailOnError