我有一个显示简单数据网格的子表单,允许用户对列进行升序或降序排序。
该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中实现记录集的排序?
答案 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
虽然这可以按我的意愿工作,但似乎查询的参数化不再正常工作。显然,查询返回查询表中的所有记录,并仅在之后过滤记录集。