Ms access 存储到表中时出现访问VBA错误';“t触发器”;“论错误”;

Ms access 存储到表中时出现访问VBA错误';“t触发器”;“论错误”;,ms-access,vba,Ms Access,Vba,我正在将错误存储到表中,但On错误未触发。在db.Execute行上,我将得到一个约束错误,但代码并没有触发错误,而是继续运行,就像它成功了一样。当我退出例程时,我知道有一个错误,因为0被传回,但我不知道错误是什么,所以我最终不得不进行调试,捕获代码,然后直接在Access中尝试。我能让它触发错误吗?这是我的代码(缩写): 来自(我的重点): 在Microsoft Access工作区中,如果您在语法上提供 正确的SQL语句并具有相应的权限, 执行方法不会失败-即使没有一行可以修改 或删除。因此,

我正在将错误存储到表中,但On错误未触发。在db.Execute行上,我将得到一个约束错误,但代码并没有触发错误,而是继续运行,就像它成功了一样。当我退出例程时,我知道有一个错误,因为0被传回,但我不知道错误是什么,所以我最终不得不进行调试,捕获代码,然后直接在Access中尝试。我能让它触发错误吗?这是我的代码(缩写):

来自(我的重点):

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

您需要指定
dbFailOnError
选项:

db.Execute sql, dbFailOnError 

您如何知道存在约束错误?如果执行db.Execute“foo”,它会断开吗?不相关,但1)在
(sql)
周围放上括号,2)您可能会发现全局
Err
对象具有
Number
Description
属性很有用;使用它们会使
foundError
代码更不容易混淆,因为
Error
用作语句是一种不推荐的引发错误的方式,而
Error
用作函数(就像您所做的那样)是一种迂回的方式,用于检索
Err.Number
的描述,而这正是您实际给出的(
Number
Err
对象的默认属性)。如果我进入调试并在即时窗口中打印sql,然后将sql复制到Access查询设计中,我会得到一个约束错误,但这不足以让我知道发生了什么。事实证明,如果我遵循下面的答案,我实际上在MsgBox中获得了足够的信息来确定它发生的位置。谢谢,我希望我的示例能够成功过去的例子已经证明了这一点。我将对我的系统进行全面更新,以实现这一点。我很确定我的东西是防白痴的,但只有在下一个白痴出现之前,这才足够好!:-)
db.Execute sql, dbFailOnError