【问题标题】:List Box bound to table does not fully reflect updates to table after requery绑定到表的列表框未完全反映重新查询后对表的更新
【发布时间】:2017-10-17 01:38:30
【问题描述】:

我有一个表单,它提供了用于过滤数据表上的记录的图形界面。我正在添加一组控件,允许用户保存过滤器配置,以便以后可以调用它们。保存的过滤器存储在一个表中;每条记录都有一个昵称(主键)和一个用于实际 SQL 语句的字段。主窗体将有一个列表框,按昵称显示所有已保存的过滤器(见下文)。此列表框的 RowSource 绑定到 Saved Filters 表



我想允许用户更改已保存过滤器的昵称和/或 SQL 语句。为此,“编辑”按钮打开一个子表单,其中包含两个文本框,其中填充了所选记录中的字段。当子表单关闭时,它会询问用户是否要保存对记录的更改(因此,子表单及其控件未绑定到 Saved Filters 表)。

据我所知,填充 sub 和更新记录的函数运行顺利。但是,已保存过滤器昵称的列表框有问题。编辑记录的昵称时,更改会传播到表和列表框。如果用户随后立即尝试再次编辑保存的过滤器,他们就会遇到麻烦,因为列表框的.Value 属性仍然返回旧名称。如果用户选择了其他昵称,然后返回第一个选择并尝试对其进行编辑,则子表单会正确打开。

我尝试在列表框查找控件之前重新查询它,但这并没有解决问题。我试图取消选择列表框中的项目并重新查询,但这也不起作用。当用户更改已保存的过滤器时,如何确保列表框控件正确更新?

这是我的代码:

(父表单)

'Function that is bound to the OnClick event of the Edit button
Private Function sfEdit()

    Dim sfLabel As String
    sfLabel = Me.List_Saved.Value

    If epuModule.OpenEditor(sfLabel) = False Then
        MsgBox "Unable to locate record with name " & Chr(34) & sfLabel & Chr(34), vbCritical
    End If

    Debug.Print Me.List_Saved.Value
    Me.List_Saved.Requery

End Function

([Form_SQL Editor] aka Editor Pop-Up)

Private Sub Form_Close()
    If PromptSave = True Then
        Select Case MsgBox("Do you want to save your changes?", vbYesNo)
            Case vbYes
                sfModule.Edit RecordLabel, Me.tbTerms.Value, NewLabel
            Case vbNo

        End Select
        PromptSave = False
    End If
End Sub

【问题讨论】:

标签: forms ms-access vba ms-access-2013


【解决方案1】:

sfModule.Edit RecordLabel, Me.tbTerms.Value, NewLabel 之后将Me.List_Saved.Requery(适当地用全局标识符替换“Me”)移动到您的Form_Close。除非您的编辑表单是模态的,否则它会在实际完成/保存任何编辑之前运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多