【问题标题】:Primary key violation triggers warning, but does not trigger error handler主键违规触发警告,但不触发错误处理程序
【发布时间】:2021-12-22 04:41:54
【问题描述】:

我在表单上有一个按钮,该按钮运行插入语句,该语句从表单上的某些文本框中获取数据并将它们放入表格中。

如果用户在主键(两个文本框的串联)中输入重复信息,我想弹出一个消息框,说明发生了什么,并可能删除标准 Access 警告(但这不是那么大一笔交易)。

我以为我可以输入On Error GoTo,然后输入我的 msgbox,但这不起作用。出现访问警告并且未添加新记录,但 On Error 被忽略。 “成功”消息框甚至仍然弹出。

这是我的代码的要点:

Dim strSQL As String
strSQL = [INSERT STATEMENT]

On Error GoTo Duplicate:
DoCmd.RunSQL (strSQL)
MsgBox "Ticket Completed!", vbOKOnly, "Success!"

JumpShip:
    Exit Sub

Duplicate:
Select Case Err.Number
    Case 3022
        MsgBox "This ticket has already been completed!", vbOKOnly, "Error!"
        Resume JumpShip
    Case Else
        Resume JumpShip
    End Select

End Sub

我也尝试了 On Error 而不指定代码(只是为了更容易找到问题),但结果是一样的。每次都会弹出“由于主键违规等原因未附加 1 条记录”消息,但错误处理程序被忽略。成功消息框弹出,然后就完成了。 PK违例不是常规错误吗?

【问题讨论】:

  • 使用Currentdb().Execute 方法并传递dbFailOnError 标志。
  • @KostasK。那成功了,谢谢!您能否将此作为答案发布,以便我接受?也仅供参考,数据库错误不属于 vba 错误,因此我们必须使用标志强制它,这是问题吗?
  • 确实,这就是 dbFailOnError 标志的目的(加上它回滚更改)。请参阅方法文档页面上的备注。

标签: vba error-handling primary-key ms-access-2016 insert-statement


【解决方案1】:

您需要使用Database.Execute() 方法,传递dbFailOnError 选项标志,如果查询因任何原因失败,它将回滚更改并引发运行时错误。

Currentdb().Execute strSQL, dbFailOnError

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多