【发布时间】: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
【问题讨论】:
-
你能让这个问题更简单吗,例如尝试将其复制到干净的数据库中?所有这些代码似乎都不相关。见:How to create a minimal, complete and verifiable example
-
@ErikvonAsmuth 会的。抱歉,对这一切还是陌生的。
标签: forms ms-access vba ms-access-2013