【问题标题】:Multiple Filter for Subfom in MS AccessMS Access 中子格式的多重过滤器
【发布时间】:2019-03-28 08:57:25
【问题描述】:

我有一个主表单和一个表格子表单。我正在应用多个过滤器来过滤我的主表单,但我的子表单与父字段和子字段属性链接,因此我只能在一个字段上应用过滤器。

如何将子表单中的相同过滤器应用于主表单中的内容?

下面是我的代码,可以帮助你理解:

Private Sub Filtermainform()
    Dim strWhere As String

    'Make string
    If Nz(Me.Combo56, "") <> "" Then
        If IsNumeric(Me.Combo56) Then
        strWhere = strWhere & "[" & Me.Combo54 & "] = " & Me.Combo56 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo54 & "] = '" & Me.Combo56 & "' AND "
        End If
    End If
    If Nz(Me.Combo109, "") <> "" Then
        If IsNumeric(Me.Combo109) Then
        strWhere = strWhere & "[" & Me.Combo107 & "] = " & Me.Combo109 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo107 & "] = '" & Me.Combo109 & "' AND "
        End If
    End If
    If Nz(Me.Combo112, "") <> "" Then
        If IsNumeric(Me.Combo112) Then
        strWhere = strWhere & "[" & Me.Combo111 & "] = " & Me.Combo112 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo111 & "] = '" & Me.Combo112 & "' AND "
        End If
    End If
    If Nz(Me.Combo114, "") <> "" Then
        If IsNumeric(Me.Combo114) Then
        strWhere = strWhere & "[" & Me.Combo113 & "] = " & Me.Combo114 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo113 & "] = '" & Me.Combo114 & "' AND "
        End If
    End If
    If Nz(Me.Combo116, "") <> "" Then
        If IsNumeric(Me.Combo116) Then
        strWhere = strWhere & "[" & Me.Combo115 & "] = " & Me.Combo116 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo115 & "] = '" & Me.Combo116 & "' AND "
        End If
    End If
    If Nz(Me.Combo118, "") <> "" Then
        If IsNumeric(Me.Combo118) Then
        strWhere = strWhere & "[" & Me.Combo117 & "] = " & Me.Combo118 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo117 & "] = '" & Me.Combo118 & "' AND "
        End If
    End If
    If Nz(Me.Combo120, "") <> "" Then
        If IsNumeric(Me.Combo120) Then
        strWhere = strWhere & "[" & Me.Combo119 & "] = " & Me.Combo120 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo119 & "] = '" & Me.Combo120 & "' AND "
        End If
    End If
    If Nz(Me.Combo122, "") <> "" Then
        If IsNumeric(Me.Combo122) Then
        strWhere = strWhere & "[" & Me.Combo121 & "] = " & Me.Combo122 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo121 & "] = '" & Me.Combo122 & "' AND "
        End If
    End If
    If Nz(Me.Combo124, "") <> "" Then
        If IsNumeric(Me.Combo124) Then
        strWhere = strWhere & "[" & Me.Combo123 & "] = " & Me.Combo124 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo123 & "] = '" & Me.Combo124 & "' AND "
        End If
    End If

    'Apply filter
    If strWhere <> "" Then
        strWhere = Left(strWhere, Len(strWhere) - 5) 'Remove the extra AND
        Me.Filter = strWhere
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    MasterField 和 ChildField 规范中可以有多个字段,例如:

    [Id];[FilterField]
    [FK];[FilterField]
    

    要删除过滤器,请将第一个字段加倍,因为您不能修改任何一个规范以使字段数多于另一个(!),因此:

    [Id];[Id]
    [FK];[FK]
    

    【讨论】:

      猜你喜欢
      • 2019-06-05
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2017-06-08
      相关资源
      最近更新 更多