【问题标题】:Access Split Form Multiple Filters访问拆分表单多个过滤器
【发布时间】:2020-07-06 16:12:50
【问题描述】:

我有一个带有订单数据库的 Access 数据库,我的用户使用的主要表单是拆分表单视图,顶部是一个不错的 GUI 记录查看器,底部是这些记录的数据表列表视图。

在表单上,​​我有一个文本框,用户可以在其中输入数字以将订单号提交给数据表中的文件管理器。该代码位于_Change() 下,因此它正在使用匹配的订单号积极更新数据表。

订单有如下几个字段:

状态:待定、打开、关闭
类型:供应商、分销商、合同

我创建了一个选项组以允许用户选择 OPEN 然后仅查看 open 订单或 OPEN & Vendor 仅查看 open 和 vendor 订单。该代码位于_Click() 下,并通过一个案例语句和每个案例的表单过滤器来完成。

但我的问题是,如果选择了其中一个选项并且用户开始输入订单号,则按订单号搜索的代码将清除过滤器并忽略选项组选择设置的过滤器。

能够选择一个过滤掉记录的案例,然后使用form 上的textbox 搜索中的条目搜索这些记录的想法是什么?

我猜我需要删除我的文本框搜索中的代码部分,该部分会屏蔽过滤器,但我想知道是否有一种想法方法来执行这种类型的过滤器然后搜索。

谢谢。

更新 1:

在下面添加了我的代码。这是用户用于搜索零件编号 (PARTNO) 的组合框/文本框。他们可以输入零件编号的任何部分,并且在输入新字符时过滤器会自动过滤。

Private Sub cmbPARTNOSEARCH_Change()

If Nz(Me.cmbPARTNOSEARCH.Text) = "" Then
Me.cmbPARTNOSEARCH.Enabled = True
Me.Form.Filter = ""
Me.FilterOn = False

ElseIf Me.cmbPARTNOSEARCH.ListIndex <> -1 Then
If Me.cmbPARTNOSEARCH.ListIndex <> -1 Then
Me.Form.Filter = "[PARTNO] = '" & _
Replace(Me.cmbPARTNOSEARCH.Text, "'", "''") & "'"
Me.FilterOn = True

Else
Me.Form.Filter = "[PARTNO] Like '*" & _
Replace(Me.cmbPARTNOSEARCH.Text, "'", "''") & "*'"
Me.FilterOn = True

End If
End If

Me.cmbPARTNOSEARCH.SetFocus
Me.cmbPARTNOSEARCH.SelStart = Len(Me.cmbPARTNOSEARCH.Text)

End Sub

【问题讨论】:

  • 为了帮助您,我们需要查看您现有的代码。请编辑您的问题并添加它。
  • 已添加代码。谢谢。

标签: vba forms ms-access


【解决方案1】:

您需要一个单独的函数来查看所有(两个)过滤器控件,并从中构建和应用过滤器。

除了最后两行之外,_Change sub 中的所有内容都进入该函数,以及选项组中的 _Click 代码。

该函数查看两个过滤器控件,如果两者都设置了,则构建一个 AND 过滤器。
它从两个事件过程中调用。

编辑:

这是一个带有多个过滤器控件的搜索表单的很好示例:
http://allenbrowne.com/ser-62.html

在您的情况下,由于您在cmbPARTNOSEARCH_Change() 上调用该函数,因此您需要考虑组合框是否具有焦点(然后使用其.Text 属性)(然后使用其.Value)。

您可以为此使用Screen.ActiveControl,或将参数传递给函数以进行区分。


旁注:在您的代码中

ElseIf Me.cmbPARTNOSEARCH.ListIndex <> -1 Then
    If Me.cmbPARTNOSEARCH.ListIndex <> -1 Then

这没有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多