【问题标题】:Multiple Combo Boxes to filter a listbox多个组合框来过滤列表框
【发布时间】:2018-08-15 20:04:36
【问题描述】:

我有一个包含 2 个组合框和 1 个列表框的表单。当我使用按钮和文本框进行搜索时,会填充列表框。每个组合框独立过滤列表框,但我不知道如何让它们分层。即,如果我在两个组合框中都选择了选项,我希望这两个过滤器都应用于列表框。

我想执行以下操作之一: a) 让过滤器基于动态分层 要么 b) 点击搜索按钮时应用过滤器

我目前的布局是:

组合框:cboJob、cboCompany 列表框:lstResume 搜索文本框:txtKeywords 搜索按钮:btnSearch 数据取自 qryResume 所有数据都是文本

当前代码:

Private Sub btnSearch_Click()
Dim SQL As String
SQL = "SELECT qryResume.ID, qryResume.Company, qryResume.Job, qryResume.LastUpdated " _
    & "FROM qryResume " _
    & "Where Company LIKE '*" & Me.txtKeywords & "*' " _
    & " OR Job LIKE '*" & Me.txtKeywords & "*' " _
    & "ORDER BY qryResume.Company "
    Me.lstResume.RowSource = SQL
    Me.lstResume.Requery

End Sub

Private Sub cboCompany_AfterUpdate()
Dim SQL As String
SQL = "SELECT qryResume.ID, qryResume.Company, qryResume.Job, qryResume.LastUpdated " _
    & "FROM qryResume " _
    & "WHERE qryResume.Company = '" & cboCompany.Text & "'" _
    & "ORDER BY qryResume.Company"
    Me.lstResume.RowSource = SQL
    Me.lstResume.Requery

End Sub

Private Sub cboJob_AfterUpdate()
Dim SQL As String
SQL = "SELECT qryResume.ID, qryResume.Company, qryResume.Job, qryResume.LastUpdated " _
    & "FROM qryResume " _
    & "WHERE qryResume.Job = '" & cboJob.Text & "'" _
    & "ORDER BY qryResume.Company"
    Me.lstResume.RowSource = SQL
    Me.lstResume.Requery

End Sub

【问题讨论】:

    标签: sql vba ms-access combobox listbox


    【解决方案1】:

    如果您可以使用.Value 属性或.Column 集合代替.Text,您可以很容易地将此​​代码重构为以下内容:

    Private Sub RequerylstResume()
       Dim SQL As String
       SQL = "SELECT qryResume.ID, qryResume.Company, qryResume.Job, qryResume.LastUpdated " _
        & "FROM qryResume " _
        & "WHERE 1=1 "
        If cboJob.Value & "" <> "" Then
            SQL = SQL &  " AND qryResume.Job = '" & cboJob.Value & "'"
        End If
        If cboCompany.Value & "" <> "" Then
            SQL = SQL & " AND qryResume.Company = '" & cboCompany.Value & "'"
        End If
        If Me.TextKeyWords.Value & "" <> "" Then 
            SQL = SQL & " AND (Company LIKE '*" & Me.txtKeywords & "*' " _
            & " OR Job LIKE '*" & Me.txtKeywords.Value & "*') "
        End If
        SQL = SQL & " ORDER BY qryResume.Company" 
        Me.lstResume.RowSource = SQL
        Me.lstResume.Requery
    End Sub
    

    然后,每当您想执行搜索时,只需致电RequerylstResume

    你这样调用一个子:

    Private Sub cboJob_AfterUpdate()
        RequerylstResume
    End Sub
    

    并将您要调用的子程序放在同一个模块中,在任何其他子程序之外

    【讨论】:

    • 对不起,我对Access有点新,如何调用requery?我把那个代码放在哪里?在按钮点击区域?非常感谢您的帮助!
    • 任何你想要的地方。我会把它放在你以前有代码的所有部分(在组合框和搜索框更新之后)。但这取决于您的偏好,您可能只希望它出现在搜索按钮上。
    • 如果我将它附加到按钮上,你能告诉我它的外观吗?谢谢!
    • 我不断收到编译错误:参数数量错误或属性分配无效
    • 我做了一些小的改动。请具体说明:你从哪里得到那个错误(哪一行,什么时候做什么)?
    猜你喜欢
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    相关资源
    最近更新 更多