访问问题关闭记录不完整的表格

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 表而不使用循环

访问表单不显示所有数据

在 PHP 中读取 HTML 文件 [关闭]

如何在 Android 的 TextView 中打印完整的 logcat 历史记录?

Access 2007 记录集问题

访问 - 自定义“您请求对表格的更改不成功...”