首页 > 解决方案 > 使用 VBA 在 Access 中捕获表单时出错

问题描述

所以我有一个表格可以更新 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

标签: vbams-access

解决方案


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

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

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


推荐阅读