Forms 基于表单中的多个列表框筛选查询

Forms 基于表单中的多个列表框筛选查询,forms,ms-access,filter,listbox,vba,Forms,Ms Access,Filter,Listbox,Vba,我有一个Access数据库,有两个表:“联系人”和“国家” 每个字段中包含多个字段 我有一个查询“Filter”,它将这两个表放在一起 我想创建一个表单,其中的列表框数量与查询中的字段数量相同。用户可以打开表单并从每个列表框中选择多个数据-行源绑定到上面的两个表。然后单击按钮,将显示查询,并根据用户在列表框中的选择应用过滤器。如果未选择任何内容,则显示不带过滤器的查询。同样,用户不需要从所有列表框中进行选择 任何帮助都将不胜感激。我从其他网站上提取了一些代码,这些代码允许我为单个列表框应用过滤器

我有一个Access数据库,有两个表:“联系人”和“国家” 每个字段中包含多个字段

我有一个查询“Filter”,它将这两个表放在一起

我想创建一个表单,其中的列表框数量与查询中的字段数量相同。用户可以打开表单并从每个列表框中选择多个数据-行源绑定到上面的两个表。然后单击按钮,将显示查询,并根据用户在列表框中的选择应用过滤器。如果未选择任何内容,则显示不带过滤器的查询。同样,用户不需要从所有列表框中进行选择

任何帮助都将不胜感激。我从其他网站上提取了一些代码,这些代码允许我为单个列表框应用过滤器。困难在于扩展多个列表框。这是一个荒谬的要求吗


PS我可以发布我的现有代码,但我认为这现在是一个“红鲱鱼”,最好从头开始。

我的理解是,您有一个带有未绑定的多选列表框的表单,您希望在数据表视图中打开一个查询,并根据列表框选择进行查询

这意味着您必须检查每个列表框的
ItemsSelected
集合,并相应地更新查询的
SQL
属性

在我的测试表单(其中包括一个名为lstFname的多选列表框)上,在列表框中选择名称Jack、Dave和Tim,然后单击命令按钮(cmdOpenQuery),创建此
select
语句

选择c*
从联系人中选择c
其中c.fname在('Dave','Jack','Tim')中
然后,该语句保存为名为qrySearchForm的查询的
SQL
属性。最后,在数据表视图中打开该查询

但是,我的示例只包含一个列表框,而您有几个列表框。因此,要扩展这个简单的示例,您还有更多的工作要做

这是我的表单的代码模块

选项比较数据库
选项显式“0”,然后
strNames=Mid(strNames,2)“放弃前导逗号
strSelect=strSelect&vbCrLf&_
其中c.fname在(“&strNames&”)中
如果结束
调试。打印strSelect
CurrentDb.querydfs(cstrQuery).Sql=strSelect
DoCmd.OpenQuery cstrQuery
端接头

这听起来像Access的“按表单过滤”功能。如果你不知道,那就调查一下。如果你意识到这一点,请解释你想要的方法是如何不同的!“按表单筛选”和我要查找的内容之间的区别在于,最终显示的是筛选后的查询本身,而不是筛选后的表单。。。这有意义吗?我希望将列表框中的数据传递到查询中。如果您使用的表单的记录源是查询,我不确定是否理解这种区别。不管怎样,你看过艾伦·布朗的吗?我想我迷路了。在表单的文本框中选择查询条件后,是否要在“数据表”视图中打开查询?我仍在掌握Access,因此我发现很难准确地表达我要查找的内容。表单没有记录源-未绑定。列表框从表(即行源)获取数据。查询与表单是分开的。最后,我只想显示select查询中的“原始”数据。Allen Browne的搜索条件与我的要求类似,唯一的区别是用户需要能够一次搜索多个数据(例如:搜索Jack、Dave、Tim等(通过列表框)并返回所有这些记录(通过选择查询))。好的,这看起来不错!)明天我要好好看看。我会告诉你我的进展。谢谢明亮的我现在有两个列表框串联工作。对于那些寻找额外信息的人,我有strnames1、strnames2、strnames3等。然后对于代码的每次迭代,我都将
“其中,”&strnames1&“
中的c.fname替换为
,“&strNamesx&“
”中的c.fxxx替换为