2013-10-24 84 views
2

我有一个Access数据库有两个表:“contacts”和“country” 这些包含了每个字段的数量。过滤一个基于多个列表框的查询形式

我有一个查询,“过滤器”,将这两个表一起。

我想创建一个窗体,其中包含与查询中的字段一样多的列表框。用户可以打开表单并从每个列表框中选择多个数据 - 行源被绑定回上面的两个表格。然后点击一个按钮,查询将被显示,并且过滤器将被应用,这取决于列表框中的用户选择。如果没有选择任何内容,则查询将显示为不带过滤器。同样,用户不需要从所有列表框中进行选择。

任何帮助将不胜感激。我已经从其他网站取消了一些代码,允许我为单个列表框应用过滤器。多个列表框难以扩展。这是一个荒谬的要求?

PS我可以发布我现有的代码,但我相信现在这是'红鲱鱼',并且最好从头开始。

+0

这听起来像是访问功能‘按窗体筛选’。如果你没有意识到这一点,请考虑一下。如果你意识到这一点,请解释你所期望的方法是如何不同的。 – HansUp

+0

嗨HansUp! “按表单筛选”与我要查找的内容之间的区别在于最终过滤后的查询本身显示 - 不是过滤的表单...这是否有意义?我正在寻找传递列表框中的数据以供给查询。 – user2915372

+0

如果您使用的记录源是查询的表单,不确定我是否理解这种区分。无论如何,你见过艾伦布朗的[搜索标准]表格(http://allenbrowne.com/ser-62.html)吗? – HansUp

回答

2

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

这意味着您必须检查每个列表框的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 
+0

好吧,这看起来不错! :)明天我会有一个适当的外观。我会让你知道我如何继续。谢谢! – user2915372

+0

太棒了!我现在有两个列表框一起工作。对于那些寻找额外的我有strnames1,strnames2,strnames3等等。然后对于代码的每一次迭代,我已经用'“和c.fxxxx”IN“替换了”WHERE c.fname IN(“&strNames1&”) &strNamesx&“)”'。 – user2915372

+0

Thanks @HansUp!非常感谢您的帮助! – user2915372

相关问题