更新取消事件之前的 MS Access 不适用于未绑定的组合框

Posted

技术标签:

【中文标题】更新取消事件之前的 MS Access 不适用于未绑定的组合框【英文标题】:MS Access before update cancel event not working for unbound combo box 【发布时间】:2019-10-02 04:42:13 【问题描述】:

我在 Access 中有一个组合框,它有一个绑定到表的行源,但不与表单共享相同的记录源。我希望用户能够从下拉框中选择项目,但我想在他们更改内容之前给他们一个警告,如果他们说不,然后撤消这样的更改:

Private Sub cboSelectAddress_BeforeUpdate(Cancel As Integer)
    Dim rs As New ADODB.Recordset
    Dim prevAddress As String

    'prevAddress = Me.cboSelectAddress.Value

    If MsgBox("Are You sure you want to change the value of the combo box?", vbQuestion + vbYesNo + vbDefaultButton2, "CTNO change altert") = vbYes Then

        'DO SOMETHING
    Else
        'Me.cboSelectAddress.Value = prevAddress
        Cancel = True
    End If

End Sub

只要我更改组合框的值,组合框的值就会发生变化,然后才会触发 before_update 事件。

为了缓解这种情况,我尝试在更改之前存储地址框的值,并在用户选择 NO 时将其设置回原始值,但这也会产生错误,因为它会尝试通过之前的更新事件本身。如您所见,我已将那部分代码注释掉。

【问题讨论】:

您是否进行了步进调试?您将看到 prevAddress 正在接收输入的新值,而不是旧值。因此,即使您没有收到错误,也不会将组合框设置为先前的输入。 是的,你是对的,刚刚意识到这一点 为什么需要对 UNBOUND 控件的用户输入进行微观管理? 我刚刚了解到,即使在绑定控件中,组合框值更改后也会触发更新前事件。为了缓解这种情况,我添加了:Me.cboSelectAddress.Undo 如果用户选择否。 你可以写下你自己问题的答案。 【参考方案1】:

我刚刚了解到,即使在绑定控件中,组合框值更改后也会触发更新前事件。为了缓解这种情况,我添加了:Me.cboSelectAddress.Undo 如果用户选择否

【讨论】:

以上是关于更新取消事件之前的 MS Access 不适用于未绑定的组合框的主要内容,如果未能解决你的问题,请参考以下文章

MS-Access 中的未嵌套行?

MS Access 2010:未绑定的组合框不会更新

MS Access:ConcatRelated 函数适用于源表,但不适用于查询

MS Access 验证规则未在子表单中触发

MS Access:WHERE-EXISTS-clause 不适用于视图?

MS Access 表单中的文本框不适用于 1 个用户