组合框更改后子表单不重新查询
Posted
技术标签:
【中文标题】组合框更改后子表单不重新查询【英文标题】:Subform not requerying after combobox change 【发布时间】:2019-01-08 13:57:09 【问题描述】:我目前正在使用 Access 2007 创建一个表单,其中组合框过滤可编辑的子表单。
子表单基于一个查询,该查询从组合框中获取一个 Project_ID,并根据该 Project_ID 号过滤子表单表。在表单视图中,我可以更改组合框并在手动刷新过滤子表单后。但是,子表单不会随着组合更改而自动过滤。
我不知道出了什么问题。我尝试了多种 VBA 变体,但没有任何效果。更改后,我目前正在使用此 VBA 脚本来加载子表单。
Private Sub cboProjectSelect_AfterUpdate()
Me!Project_Tracker_Subform.Form.Requery
End Sub
【问题讨论】:
【参考方案1】:您当前的AfterUpdate
代码只是要求子表单重新查询现有的过滤条件,这将导致显示相同的记录。
在您的情况下,您希望更新子表单过滤条件以引用在 ComboBox 中选择的新值。为此,您需要这样的东西:
Dim mssql As String
If Len(Me.cboProjectSelect.Value & "") > 0 Then
mssql = "[Project_ID] = " & Me.cboProjectSelect.Value
Me.Project_Tracker_Subform.Form.Filter = mssql
Me.Project_Tracker_Subform.Form.FilterOn = True
End If
如果在 ComboBox 中选择了一个值,此代码只会更新子表单(即,如果用户清除 ComboBox 值,If
语句将阻止更新子表单)
然后这段代码设置你的新过滤器并告诉子表单使用FilterOn = True
执行过滤器。
如果用户确实清除了 ComboBox,您可能希望从子表单中删除所有过滤。在这种情况下,您可以添加一个Else
子句,例如:
Else
Me.Project_Tracker_Subform.Form.FilterOn = False
End If
【讨论】:
听起来是对的。我复制了你的代码,但它似乎仍然不起作用。我仍然遇到子表单将根据组合过滤但我必须手动刷新的问题。 ** 这是代码。 Private Sub cboProjectSelect_AfterUpdate() Dim mssql As String If Len(Me.cboProjectSelect.Value & "") > 0 Then mssql = "[Project] = " & Me.cboProjectSelect.Value Me.Project_Tracker_Subform.Form.Filter = mssql Me.Project_Tracker_Subform .Form.FilterOn = True Else Me.Project_Tracker_Subform_(1).Form.FilterOn = False End If** End Sub 我不确定我是否理解您所说的“子表单将根据组合过滤但我必须手动刷新”的意思。请用更清晰的详细信息更新您的原始问题,说明您最初打开表单时在子表单中显示哪些记录,以及在您选择组合框中的项目后显示哪些记录。以上是关于组合框更改后子表单不重新查询的主要内容,如果未能解决你的问题,请参考以下文章