我的理解是您有一个带有未绑定多选列表框的表单,并且您想在数据表视图中打开一个查询并根据列表框选择进行查询。
这意味着您必须检查ItemsSelected
每个列表框的集合并SQL
相应地更新查询的属性。
在我的测试表单上,其中包括一个名为lstFname的多选列表框,在列表框中选择名称Jack、Dave 和 Tim,然后单击命令按钮 ( cmdOpenQuery ),创建此SELECT
语句。
SELECT c.*
FROM Contacts AS c
WHERE c.fname IN ('Dave','Jack','Tim')
然后将该语句保存为SQL
名为qrySearchForm的查询的属性。最后,该查询在数据表视图中打开。
但是,我的示例仅包含一个列表框,而您有多个。因此,您还有更多工作要做来扩展这个简单的示例。
这是我表单的代码模块...
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