多个组合框用于过滤列表框

时间:2018-03-07 16:21:26

标签: sql vba ms-access combobox listbox

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

我想做以下其中一项: a)基于动态分层过滤器 要么 b)单击搜索按钮时应用过滤器

我目前的布局是:

组合框:cboJob,cboCompany ListBox: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

1 个答案:

答案 0 :(得分:0)

如果您可以使用.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

并将要调用的子项放在同一模块中,而不是任何其他子

相关问题