【问题标题】:Multiple Combo boxes filtering Listbox (Revisited?)多个组合框过滤列表框(重新访问?)
【发布时间】:2019-08-30 22:19:34
【问题描述】:

我正在尝试根据几个组合框过滤列表框。看起来很容易,对吧?事实上,我几乎找到了我的问题的确切答案,但是我似乎无法让它正常工作。 (见:Multiple Combo Boxes to filter a listbox

使用上述解决方案中的代码(显然是为了我的目的而修改的)似乎并不想专门过滤掉任何东西。相反,它根本没有在查询中找到任何与过滤匹配的记录。

我有五个组合框,它们从查询 (qryCustomerWants) 中获取唯一值,并根据查询中的相应列填充五个组合框中的每一个。当我单击其中一个组合框时,列表框会更新,并且应该根据组合框中选择的搜索条件过滤结果。

Private Sub RequerylstCustomers()
   Dim SQL As String
   SQL = "SELECT qryCustomerWants.ID, qryCustomerWants.Type, qryCustomerWants.Make, qryCustomerWants.Model, qryCustomerWants.YearWanted, qryCustomerWants.Condition " _
    & "FROM qryCustomerWants " _
    & "WHERE 1=1 "
    If cboType.Value & "" <> "" Then
        SQL = SQL & " AND qryCustomerWants.Type = '" & cboType.Value & "'"
    End If
    If cboMake.Value & "" <> "" Then
        SQL = SQL & " AND qryCustomerWants.Make = '" & cboMake.Value & "'"
    End If
    If cboModel.Value & "" <> "" Then
        SQL = SQL & " AND qryCustomerWants.Model = '" & cboModel.Value & "'"
    End If
    If cboYear.Value & "" <> "" Then
        SQL = SQL & " AND qryCustomerWants.Year = '" & cboYear.Value & "'"
    End If
    If cboCondition.Value & "" <> "" Then
        SQL = SQL & " AND qryCustomerWants.Condition = '" & cboCondition.Value & "'"
    End If
    SQL = SQL & " ORDER BY qryContactWants.Last"
    Me.lstCustomers.RowSource = SQL
    Me.lstCustomers.Requery
End Sub

我使用以下方法调用函数:

Private Sub cboType_AfterUpdate()
    RequerylstCustomers
End Sub

目前,每次我从组合框中(其中任何一个)中选择一个项目时,它都会清除整个列表框。我知道有与搜索参数匹配的记录,因此它应该将这些记录过滤到一个较小的列表中,每个组合框我从中选择一个条目。

我在哪里搞砸了?谢谢!

【问题讨论】:

  • 表格中的字段有哪些类型?看起来它们都是文本字段?列表框的原始行源是什么?尝试在RequerylstCustomers 末尾使用Debug.Print SQL 并使用打印的结果运行查询以查看问题所在。还有一个:在查询的选择中有YearWanted,但您过滤Year...
  • 这是 Debugging 的 SQL 输出:SELECT qryCustomerWants.ID, qryCustomerWants.Type, qryCustomerWants.Make, qryCustomerWants.Model, qryCustomerWants.YearWanted, qryCustomerWants.Condition FROM qryCustomerWants WHERE 1=1 AND qryCustomerWants.Type = 'Boat' ORDER BY qryContactWants.Last
  • 感谢您指出错字,我还没到那部分哈哈。还是谢谢!
  • 当您使用该 SQL 创建新查询时,它运行良好吗?
  • 天啊。我真是个失败者。查询的实际名称是qryContactwants,而不是qryCustomerWants。但是现在我有另一个问题,它是Me.lstCustomers.RowSource = SQL 行——我不希望该行等于 SQL 结果,我希望它等于客户名称,就像它最初所做的那样。当我将该行从 sub 中取出时,列表框不会更新并列出所有名称而不是过滤掉它们。

标签: sql ms-access filter


【解决方案1】:

我现在看到,您的 Order By 使用 qryContactWants 而不是 qryCustomerWants

我想这就是你的问题的原因。

【讨论】:

  • 确实是这样。除了带来另一个问题(见我上面的评论)。
猜你喜欢
  • 2018-08-15
  • 2017-11-27
  • 1970-01-01
  • 2016-11-25
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多