【问题标题】:Subform filtering based off multiple parameters (Combobox AND Textbox)基于多个参数的子表单过滤(组合框和文本框)
【发布时间】:2018-07-27 08:11:54
【问题描述】:

我想根据表单上的两个参数(组合框和文本框)过滤子表单。

我有一个带有组合框 cboTimePeriod 的表单,它显示表 TimePeriod 中的数据(例如 TimePeriod=”10.01.2018-10.02.2018”;ID=12)。

组合框数据:

数据行来源= SELECT [tblTimePeriod].[TimePeriod], [tblTimePeriod].[ID] FROM tblTimePeriod ORDER BY [TimePeriod];

数据绑定列=2(绑定到 ID)

Format Column Count=1(显示 TimePeriod 的文本值) 格式列表宽度=2,54cm

我还有一些带有城市的 cbobuttons,所以当我按下一个名为“波士顿”的按钮时,TextBox txtCity 显示即“波士顿”。

我想要的是,当我选择时间段 (cboTimePeriod) 时,必须根据这两个参数过滤子表单(在文本框中选择 TimePeriod AND City)。

正如您可能猜到的那样,它不起作用。

我尝试了几个代码,这是我用过的一个:

'How do I filter an Access subform with multiple combo boxes in the form?

这是我的实现,它不起作用:

Dim strWhere As String

 If Nz(Me.cboTimePeriod, "") <> "" Then
strWhere = strWhere & "[TimePeriodID] = '" & Trim(Me. cboTimePeriod) & " ' AND "
End If

If Nz(Me.txtSelectedCity, "") <> "" Then
    strWhere = strWhere & "[CityName] = '" & Trim(Me. txtSelectedCity) & " ' AND "
End If

If strWhere <> "" Then
    strWhere = Left(strWhere, Len(strWhere) - 5)
    Me.qry_SomeData_subform.Form.Filter = strWhere 'after this line, function exits the code        
Me.qry_ SomeData_subform.Form.FilterOn = True
Else    
    Me.qry_ SomeData_subform.Form.Filter = ""      
    Me.qry_ SomeData_subform.Form.FilterOn = False
End If

strWhere 给出了这个: strWhere = "[TimePreriodID] = '12 ' AND [CityName] = 'Boston '"

应用过滤器后,子表单上的“未过滤”更改为“已过滤”,但数据没有变化。

感谢任何帮助。

【问题讨论】:

    标签: vba ms-access-2010 subform


    【解决方案1】:

    我猜 TimePeriod 是 数字,因此(并更正空格):

    strWhere = strWhere & "[TimePeriodID] = " & Me!cboTimePeriod.Value & " AND "
    

    和:

    strWhere = strWhere & "[CityName] = '" & Trim(Me!txtSelectedCity.Value) & "' AND "
    

    编辑: 要查找另一列,这里是第二列:

    strWhere = strWhere & "[CityName] = '" & Trim(Me!txtSelectedCity.Column(1)) & "' AND "
    

    【讨论】:

    • 没有成功;有修正的第一个条件,没有第二个条件,有效。
    • 在即时窗口中打印 strWhere 返回:[TimePeriodID] = 13 AND 这是正确的。
    • 按照您的建议添加更正会导致即时窗口中的 strWhere 值如下所示:[TimePeriodID] = 12 AND [CityName] = 'Boston' 但子表单数据未被过滤。什么也没发生。
    • 如果仅使用 TimePeriod 正确过滤,您可能没有“波士顿”的 CityName。
    • 当我按下组合框“波士顿”时,txtSelectedCity =“波士顿”。相同的文本在 tblCity 中。但。当我将 txtbox 更改为组合框并更改 strWhere=strWhere & "[CityID] = " & Trim(Me.cboCity) & " AND " 时,它可以工作。但这不是解决方案。令我困惑的是如何让它与字符串一起工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多