我的理解是,您有一个未绑定的多选列表框的表单,并且您希望在数据表视图中打开一个查询,并根据列表框选择来查询该查询。
这意味着您必须检查每个列表框的ItemsSelected
集合并相应地更新查询的SQL
属性。
在我的测试形式,其中包括一个名为lstFname多选列表框中,选择名称杰克,大卫和Tim在列表框中,然后单击命令按钮(cmdOpenQuery),创建这SELECT
声明。
SELECT c.*
FROM Contacts AS c
WHERE c.fname IN ('Dave','Jack','Tim')
然后该语句将被保存为一个名为qrySearchForm查询SQL
财产。最后,该查询在数据表视图中打开。
但是我的例子只包含一个列表框,而你有几个。所以你有更多的工作要做,以扩展这个简单的例子。
这里是我的窗体的代码模块...
Option Compare Database
Option Explicit ' <- include this in ALL modules!
Private Sub cmdOpenQuery_Click()
Const cstrQuery As String = "qrySearchForm"
Dim strNames As String
Dim strSelect As String
Dim varItm As Variant
strSelect = "SELECT c.*" & vbCrLf & "FROM Contacts AS c"
For Each varItm In Me.lstFname.ItemsSelected
strNames = strNames & ",'" & _
Me.lstFname.ItemData(varItm) & "'"
Next varItm
If Len(strNames) > 0 Then
strNames = Mid(strNames, 2) ' discard leading comma
strSelect = strSelect & vbCrLf & _
"WHERE c.fname IN (" & strNames & ")"
End If
Debug.Print strSelect
CurrentDb.QueryDefs(cstrQuery).Sql = strSelect
DoCmd.OpenQuery cstrQuery
End Sub
这听起来像是访问功能‘按窗体筛选’。如果你没有意识到这一点,请考虑一下。如果你意识到这一点,请解释你所期望的方法是如何不同的。 – HansUp
嗨HansUp! “按表单筛选”与我要查找的内容之间的区别在于最终过滤后的查询本身显示 - 不是过滤的表单...这是否有意义?我正在寻找传递列表框中的数据以供给查询。 – user2915372
如果您使用的记录源是查询的表单,不确定我是否理解这种区分。无论如何,你见过艾伦布朗的[搜索标准]表格(http://allenbrowne.com/ser-62.html)吗? – HansUp