vba - 使用 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
解决方案
所以补充J7,有一些大图:“基本上只希望在填写完所有内容后保存表格”......。那是逆潮流而行;这就是为什么您必须编写大量代码的原因。该产品从根本上输入数据。那是它的核心设计。
进行字段检查是很正常的 - 通常在 AfterUpdate 事件中,应用检查代码,如果无效 - 生成一个消息框并调用 Undo 并将焦点重置回他们试图离开的字段。
完全不同的设计,在某些情况下,它可以证明临时本地重复表只是为了保存表单输入数据——这种方法允许对生产数据库中的数据进行非常精细的检查;如果有效,则附加查询将数据写入永久表。
推荐阅读
- machine-learning - 有没有像「scaler.inverse_transform()」这样的方法来获取部分缩放器参数来反规范化答案?
- java - 我可以设置多个 .whereEqualTo 指向 firestore 查询中文档中的一个字段吗?
- android - 为什么 view.height 比实际高度大 3 倍?
- python - Slack Bot - Python 松弛发送降价消息
- java - 使用 Kotlin Kapt 失败:错误:范围构造不能使用类型使用注释进行注释:@org.jetbrains.annotations.NotNull
- django - 使用 drf django 发送邮件
- java - 为什么在对象反序列化期间在有效性检查之前执行防御性复制很重要?
- jmeter - 在 JMETER 中处理负面情况,例如我的预期输出响应是 400
- python - 当具有一个参数的函数接收 np.array
- java - 尝试从 Java 代码中建立到 SQL Server 的加密连接时出错