访问问题关闭记录不完整的表格
Posted
技术标签:
【中文标题】访问问题关闭记录不完整的表格【英文标题】:Access problems closing form with incomplete record 【发布时间】:2017-12-12 03:58:23 【问题描述】:我正在尝试在数据表视图中创建一个表单,其中预先填充了某些字段。
如果用户在记录不完整时单击 X 关闭表单,我无法找到优雅的方式让他们选择返回脏记录以更正它。
BeforeUpdate 运行,但设置 Cancel=True 不会停止表单关闭。
Form_Unload 运行并设置 Cancel=True 可防止关闭,但会擦除表单内容(我尚未检查,但它似乎应用了 Undo)。
如果我可以控制何时启用关闭表单的 X,我也许可以避免这种情况。但我没有,而且因为我在数据表视图中,所以我不能提供关闭按钮。
问题是,虽然我可以使用 BeforeUpdate 来告诉用户有问题并且我将他们返回到表单以更正它,但如果触发操作是表单关闭(而不是记录保存/导航)。所以他们收到的下一条消息是哎呀,我们正在关闭你而不保存,运气不好(你的错,但现在太晚了)!
更不用说,尽管取消了更新,但用户在 Form_Unload 开始之前会收到“您目前无法保存此记录”的消息。
有什么建议吗?我错过了什么吗?
【问题讨论】:
【参考方案1】:为此,您必须玩几个事件。在代码顶部添加一个变量来跟踪表单错误:
Dim frmErr As Boolean
当表单加载时,当出现输入错误时,将错误设置为 true
Private Sub Form_Load()
frmErr = True
End Sub
Private Sub Form_Error(DataErr As Integer, Response As Integer)
frmErr = True
End Sub
当用户试图关闭表单时:
Private Sub Form_Unload(Cancel As Integer)
If Not Me.Dirty Then 'user hasn't done anything.
If MsgBox("form is unchanged. close?", vbYesNoCancel, "really?") = vbYes Then
frmErr = False
End If
End If
If frmErr = True Then
Cancel = True
End If
End Sub
这是一个基本的大纲。您可能需要在更新之前以及更新之前使用 Form_Dirty 事件,以使其按您需要的方式工作。
【讨论】:
问题是当我在表单卸载时捕获未完整填写记录的错误时,表单内容被删除而不是部分填写,因此用户可以正确完成它们。 @wazz以上是关于访问问题关闭记录不完整的表格的主要内容,如果未能解决你的问题,请参考以下文章
将完整的 ADO 记录集插入现有的 ACCESS 表而不使用循环