绑定到表的列表框并未完全反映查询后表的更新

绑定到表的列表框并未完全反映查询后表的更新

问题描述:

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

Saved Filter List

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

据我所知,填充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编辑]又名编辑器弹出)

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 
+0

你可以提出这个问题更小,例如尝试复制它在一个干净的数据库?所有代码都是相关的,似乎不太可能。请参阅:[如何创建最小,完整和可验证的示例](https://*.com/help/mcve) –

+0

@ErikvonAsmuth会做。对不起,这还是新的。 –

移动Me.List_Saved.Requery(适当地更换“Me”带有全局标识符)之后。除非你的编辑表单是模态的,否则它在任何编辑实际完成/保存之前运行。