访问拆分表格多个过滤器

时间:2016-07-13 02:09:05

标签: forms ms-access access-vba access

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

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

订单包含以下几个字段:

  

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

我创建了一个Option组,允许用户选择OPEN,然后只查看 open 订单或OPEN&供应商仅查看打开供应商订单。代码位于_Click()下,并通过Case语句和每个案例的表单过滤器完成。

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

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

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

谢谢。

更新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

1 个答案:

答案 0 :(得分:0)

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

除了最后两行之外,_Change子行中的所有内容都会进入该功能,并加上选项组中的_Click代码。

该函数查看两个过滤器控件,并在两者都设置的情况下构建AND过滤器 它是从两个事件程序中调用的。

修改

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

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

您可以使用.Value,或者将参数传递给函数以进行区分。

旁注:您的代码中有

Screen.ActiveControl

这没有意义。