参数化查询重新评估排序

时间:2016-04-08 07:12:35

标签: vba ms-access-2010

我有一个显示简单数据网格的子表单,允许用户对列进行升序或降序排序。

该datagrid的数据由refresh-function提供,该函数使用参数化查询来设置datagrid的记录源​​:

Dim query     As DAO.QueryDef
Dim recordSet As DAO.Recordset

Set query = CurrentDb.QueryDefs("DatagridQuery")
query.Parameters("one").Value = combobox_1_value
query.Parameters("two").Value = combobox_2_value
Set recordSet = query.OpenRecordSet
Set Me.subform.From.Recordset = recordSet

在此上下文中,combobox_1_value和combobox_2_value分别由父表单中的两个不同组合框提供。

现在出现的问题是,每次设置sort或filter属性时,datagrid似乎都会重新评估基础查询,提示用户手动输入参数,而不是从组合框值中获取参数值。

有没有办法可以将我的组合框的值绑定到查询的参数或覆盖排序和过滤功能,以便我可以直接在vba中实现记录集的排序?

2 个答案:

答案 0 :(得分:0)

如果您(重新)设置了记录集,则表单将始终被重新获取。

您可以做的是设置表单的过滤器属性:

Me!subform.Form.Filter = "[SomeField] = somevalue"
Me!subform.Form.FilterOn = True

为了对 OrderBy 属性进行排序:

Me!subform.Form.OrderBy = "[SomeField] Asc"
Me!subform.Form.OrderByOn = True

答案 1 :(得分:0)

我找到了一种解决方案,显然会导致更长的运行时间。

我已经重写了子窗体的查询,以使用全局函数作为查询参数:

Public Function GetComboboxValue()
    GetComboboxValue = Forms!Form1!Combobox.Value
End Function

相应的查询如下所示:

SELECT * FROM sampleTbl
WHERE ForeignID = GetComboboxValue()

另外我已经设置了Combobox的afterUpdateEvent来重新查询子表单:

Private Sub combobBox_AfterUpdate()
    Me.subform.Requery
End Sub

虽然这可以按我的意愿工作,但似乎查询的参数化不再正常工作。显然,查询返回查询表中的所有记录,并仅在之后过滤记录集。