MS Access搜索拆分表格,带有未绑定的列表框

时间:2019-11-26 15:57:26

标签: vba ms-access listbox

我是MS访问的新手,正在努力提出正确的代码行以启用多参数搜索表单。我有一个查询,它从3个表中收集信息。此查询中的两个字段是级联组合框和列表框。列表框从组合框更新(通过Requery)。对于组合框中的每个值,列表框中有3-5个值。我试图建立一个搜索表单(带有电子表格的拆分表单),其中“未绑定”组合框和列表框将找到在列表框中选择的所有值,并在拆分表单的电子表格中显示结果值池。组合列表框和表单可以正常显示所有初始值,并且在列表框中仅选择一个值时可以正常运行。但是,当在列表框中选择多个值时,我会收到一条消息

  

查询表达式'(GistID =(4,9))'中的语法错误(逗号)

或类似名称,具体取决于GistName ID#。

此表单的代码:

Private Sub cmdSearch_Click()
    Dim varItem as Variant
    Dim strSearch As String
    Dim Task as String

    For Each varItem In Me!listbGist.ItemsSelected
        strSearch=strSearch & "," & Me.listbGist.ItemData(varItem)
    Next varItem
    If Len(strSearch)=0 Then
        Task="select * From qryScreening"
    Else
        strSearch=Right(strSearch, Len(strSearch)-1)
        Task="select * from qryScreening where (GistID=("& strSearch & "))"
    End if
    DoCmD. ApplyFilter Task
End Sub

代码生成一个字符串,X,X,X,并且Len函数删除了我通过MsgBox(strSearch)获得的第一个逗号,但是如果在列表框中选择了多个值,则过滤器Task不会运行。 您能否为目前无法使用的该代码提出补救措施。

1 个答案:

答案 0 :(得分:0)

您需要使用SQL IN或构建OR语句。 IN更具可读性。

像这样:

=必须像这样select * from [qryScreening] where [GistID] in (1,2,3,4,5)

另外,检查所选项目的数量可能会更好,而不是依赖字符串长度。