组合框更改后子表单不重新查询

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 我不确定我是否理解您所说的“子表单将根据组合过滤但我必须手动刷新”的意思。请用更清晰的详细信息更新您的原始问题,说明您最初打开表单时在子表单中显示哪些记录,以及在您选择组合框中的项目后显示哪些记录。

以上是关于组合框更改后子表单不重新查询的主要内容,如果未能解决你的问题,请参考以下文章

重新打开文件后子表单无法识别文本框源

MS Access 数据表不会根据组合框更新

在访问中更改组合框值时,可以更改/重新计算计算的文本框值

MS Access:组合框重新查询

绑定组合框在(重新)填充数据源时更改 SelectedItem

更改所有表单上所有组合框对象的设置