【问题标题】:Error catching a form in Access using VBA使用 VBA 在 Access 中捕获表单时出错
【发布时间】:2019-01-30 23:27:29
【问题描述】:

所以我有一个表格可以更新 Microsoft Access 中的表格。如果未填写“名字”,我正在使用更新前事件调用来阻止表单更新。

我基本上只希望在填写完所有内容后保存表格,然后切换查看更新的表格(如果未取消下的位)。

当前弹出框说“您必须输入名字”正确触发,下一个弹出框询问用户是否要撤消任何更改触发。但随后会出现一个弹出框,显示“无当前记录”,然后视图更改为表格。我不确定为什么会发生这一切。

Option Compare Database

Private Sub Form_BeforeUpdate(Cancel As Integer)

   Cancel = False

' perform data validation
If IsNull(Me.customer_f_name) Then

   MsgBox "You must enter a First Name.", vbCritical, "Data entry error..."
   Me.customer_f_name.BorderColor = vbRed
   DoCmd.GoToControl "customer_f_name"

   Cancel = True

End If

If Not Cancel Then

    DoCmd.SelectObject acTable, "ticket_tracker_table"
    DoCmd.Requery
    DoCmd.GoToRecord acDataTable, "ticket_tracker_table", acLast

End If

' if the save has been canceled or did not pass the validation , then ask to Undo changes
If Cancel Then

    If MsgBox("Do you want to undo any changes?", vbYesNo, "Confirm") = vbYes Then
        Me.Undo
    End If

End If

End Sub

【问题讨论】:

  • 哪个语句导致您不喜欢该消息?尚不清楚是否回答了先前的问题。您应该能够在语句 Cancel = False 上设置调试,然后逐步执行,直到找到更多信息。
  • 我现在不是windows pc,但我认为您的错误是您在保存之前尝试访问新记录,即此代码仍在@987654322 中运行@时间
  • 为什么表是打开的?你是这个数据库的唯一用户吗?

标签: vba ms-access


【解决方案1】:

评论https://docs.microsoft.com/en-us/office/vba/api/Access.Form.BeforeUpdate(even)

使用 SetFocus 代替 GoToControl。 我对 Undo 问题做了一个非常简单的测试,它确实有效:

Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Me.customer_f_name) Then
    MsgBox "Must enter customer name."
    Cancel = True
    If MsgBox("Do you want to undo edits?", vbYesNo) = vbYes Then Me.Undo
    Me.customer_f_name.SetFocus
End If
End Sub

建议您将表格代码放在更新后事件中。

【讨论】:

    【解决方案2】:

    所以补充J7,有一些大图:“基本上只希望在填写完所有内容后保存表格”......。那是逆潮流而行;这就是为什么您必须编写大量代码的原因。从根本上说,该产品会在您进行时输入数据。这就是它的核心设计。

    进行字段检查是很正常的 - 通常在更新后事件中,应用检查代码,如果无效 - 生成一个消息框并调用撤消并将焦点重置回他们尝试的字段离开。

    完全不同的设计,在某些情况下,它可能会证明临时本地重复表只是为了保存表单输入数据——这种方法允许对生产数据库中的数据进行非常精细的检查;如果有效,则附加查询将数据写入永久表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多