Ms access 使用多选列表框的结果作为查询where子句 这是我的第一篇文章,所以请原谅,如果我还没有达到所有的惯例。

Ms access 使用多选列表框的结果作为查询where子句 这是我的第一篇文章,所以请原谅,如果我还没有达到所有的惯例。,ms-access,file-access,Ms Access,File Access,问题如下,我刚刚开始创建MS Access数据库,我在这方面做得很好,我最近刚刚完成了一个完整的项目,目前正在创建报告,我试图创建一个带有选项卡控件的筛选表单,在每个页面上都有一个多选择列表框,该列表框预先填充了表中的数据,我无法使用按钮或类似工具创建筛选器,因为我希望它是动态的,筛选器必须支持多个条件,我尝试在查询中使用列表框选择的结果,使用我的代码的结果,我创建了一个用逗号分隔的数字字符串(我没有引用这些数字,因为我将它们与数字字段进行比较)。我循环浏览列表框中的所有选定项,并将它们彼此添加

问题如下,我刚刚开始创建MS Access数据库,我在这方面做得很好,我最近刚刚完成了一个完整的项目,目前正在创建报告,我试图创建一个带有选项卡控件的筛选表单,在每个页面上都有一个多选择列表框,该列表框预先填充了表中的数据,我无法使用按钮或类似工具创建筛选器,因为我希望它是动态的,筛选器必须支持多个条件,我尝试在查询中使用列表框选择的结果,使用我的代码的结果,我创建了一个用逗号分隔的数字字符串(我没有引用这些数字,因为我将它们与数字字段进行比较)。我循环浏览列表框中的所有选定项,并将它们彼此添加,以逗号分隔

lstSel = lstSel & listbox.itemdata(index) &","
然后使用

lstSel = left(lstSel,Len(lstSel)-1)
我将值传递到表单上的一个文本框中,我正试图使用该文本框进行查询
其中[ID]位于(Forms!myForm!myTxtbxResult)


我没有收到任何错误,我重新查询控件和报告,但没有任何效果。

请查看Allen Browne提供的这一技巧,绕过任何查询需求:

我知道这是一个非常老的问题,但如果其他人对此有困难,我会通过在字符串周围添加单引号来动态使用IN运算符

lstSel = lstSel & listbox.itemdata(index) &","
这将导致一个如下所示的查询

Select * From ... IN(str1,str2,str3,...)
这不是IN()的正确语法(请参阅)

但是,-

lstSel = lstSel & "'" & listbox.itemdata(index) & "'" &","
这将表明

Select .... IN('str1','str2','str3',...)

这应该可以解决问题

看看艾伦·布朗提供的这个技巧,绕过任何查询需求:如何提出好的问题,并进行参观。它不起作用,因为Access将文本框内容视为一个字符串,而不是一组离散元素。@Rene引用的Allen Browne文章中显示的方法实际上是动态构建和使用SQL in操作符的唯一方法。设置DoCmd.OpenReport方法的WHERE条件参数,而不是动态参数化查询。谢谢您的回答!我还没有机会尝试。。。但是谢谢你给我指路!关键部分是参数中的
中的元素需要用双引号分隔,双引号是一个保留字符。