我有一个包含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
答案 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
并将要调用的子项放在同一模块中,而不是任何其他子