【问题标题】: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 开始之前会收到“您目前无法保存此记录”的消息。

有什么建议吗?我错过了什么吗?

【问题讨论】:

    标签: forms ms-access error-handling


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多