Microsoft Access 2010 中的多个文本过滤器
Posted
技术标签:
【中文标题】Microsoft Access 2010 中的多个文本过滤器【英文标题】:Multiple text filters in Microsoft Access 2010 【发布时间】:2016-06-23 14:31:01 【问题描述】:我想使用两个文本框来过滤我的数据,StaffTotalSearchText1 和 StaffTotalSearchText2。
我知道只有最近的 DoCmd.ApplyFilter 命令适用,这意味着我不知道如何应用两个文本过滤器。
编辑:找到解决方案 - 请参阅 Johnny 的 RecordSource 代码 应用过滤器的一种方法是执行加载的数据 (RecordSource) - 仍然允许使用“DoCmd.ApplyFilter”。
我创建了一个“锁定过滤器 1”按钮。启用时,过滤器适用;禁用时,没有过滤器。
约翰尼的答案有正确的代码来过滤加载的数据。
【问题讨论】:
如果您只是刷新数据源并在其上使用过滤器会容易得多。 【参考方案1】:只需在过滤器中使用两个值并在两个过滤器事件中使用相同的代码:
DoCmd.ApplyFilter "", _
"[Forename] Like '*" & me![StaffTotalSearchText1] & "*'" & _
" Or [Surname] Like '*" & me![StaffTotalSearchText1] & "*'" & _
" Or [Forename] Like '*" & me[StaffTotalSearchText2] & "*'" & _
" Or [Surname] Like '*" & me[StaffTotalSearchText2] & "*'"
编辑:在第一个过滤器之后应用第二个过滤器:
If Not IsNull(Me![StaffTotalSearchText1]) And Len(Me![StaffTotalSearchText1] & "") <> "" Then
strFilter = "[Forename] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
" Or [Surname] Like '*" & Me![StaffTotalSearchText1] & "*'"
If Not IsNull(Me![StaffTotalSearchText2]) And Len(Me![StaffTotalSearchText2] & "") <> "" Then
strFilter = "(" & strFilter & ") AND " & _
"( [Forename] Like '*" & Me![StaffTotalSearchText2] & "*'" & _
" Or [Surname] Like '*" & Me![StaffTotalSearchText2] & "*')"
End If
End If
DoCmd.ApplyFilter "", strFilter
如果您想使用RecordSource
,您可以使用相同的过滤器,但必须为 select 命令添加 SQL:
strFilter = ""
If Not IsNull(Me![StaffTotalSearchText1]) And Len(Me![StaffTotalSearchText1] & "") <> "" Then
strFilter = "[Forename] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
" Or [Surname] Like '*" & Me![StaffTotalSearchText1] & "*'"
If Not IsNull(Me![StaffTotalSearchText2]) And Len(Me![StaffTotalSearchText2] & "") <> "" Then
strFilter = "(" & strFilter & ") AND " & _
"( [Forename] Like '*" & Me![StaffTotalSearchText2] & "*'" & _
" Or [Surname] Like '*" & Me![StaffTotalSearchText2] & "*')"
End If
End If
If strFilter <> "" Then
strFilter = "SELECT * FROM StaffTable WHERE " & strFilter
Else
strFilter = "[StaffTable]"
End If
Me.RecordSource = strFilter
【讨论】:
使用此代码,只有 StaffTotalSearchText1 中的文本充当过滤器。另一个文本输入项肯定命名为“StaffTotalSearchText2” @Idios 用修复改变了我的答案 太棒了!...很高兴能帮上忙!如果您觉得它对您有用,请随时accept my answer,这将有助于我的帐户:-) 好的,我想我需要更具体一点:我不想让结果与任一文本字段匹配,我想先用 StaffTotalSearchText1 过滤我的数据,然后过滤这个过滤后的数据与 StaffTotalSearchText2 @Idios 我添加了更多代码以允许两个搜索条件【参考方案2】:试试这个:
Me.RecordSource = "SELECT * FROM StaffTable " & _
"WHERE [Forename] Like '*" & [Forms]![StaffTotalQuery]![StaffTotalSearchText1] & "*' " & _
"Or [Surname] Like '*" & me![StaffTotalSearchText1] & "*' " & _
"Or [ProfessionalID] Like '*" & me![StaffTotalSearchText1] & "*'"
假设您指向正确的对象(我猜 Forename 在不同的表单上?这是您唯一通过表单名称引用的对象),这应该可以。
【讨论】:
运行是否正确?只是让您知道,它的编写方式将在满足 任何 条件时返回结果,因为您使用的是“或”。如果您只想返回满足所有条件的结果,请使用“And”。 请仔细检查我的编辑,然后我会在这个答案下清理我的 cmets。 P.P.S.我们可以扩展这个方法,或者应用另一种方法,以允许使用三个文本过滤器吗? 您可以添加任意数量的过滤器。您可以将其中一些设置为有条件的。你几乎可以做任何事情。至于“交友”,我认为这个网站没有这个选项。以上是关于Microsoft Access 2010 中的多个文本过滤器的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Access 2010 中的多个文本过滤器
Microsoft Access 中的 Scope_Identity()
我的连接 C# 有问题 - Microsoft Access 2010
Microsoft Access 2010 查询不产生任何结果