【问题标题】:Use Access filter with own keyword search together将 Access 过滤器与自己的关键字搜索一起使用
【发布时间】:2017-08-23 18:00:43
【问题描述】:

我是 access 和 vba 的新手。现在我的第一个项目有问题。我创建了一个带有关键字搜索的表格和表格。我的关键字搜索工作正常,但如果我同时使用访问中的标准过滤器,我只能使用一列中的过滤器,因为所有其他过滤器值都不可用。我制作了一个 msgbox 来查看输出,并且访问在表名前加了一个下划线。

Public Sub btnSearch_Click()
Dim sql As String

sqlQuery = " brands.name LIKE '*" & Me.txtKeywords & "*' " _
         & " OR brands.ID LIKE '*" & Me.txtKeywords & "*' " 

sql = "SELECT brands.* " _
    & " FROM brands " _
    & " WHERE " & sqlQuery

Me.sfrmBrands.Form.RecordSource = sql
Me.sfrmBrands.Form.Requery

End Sub 

和输出

MsgBox (Me.sfrmBrands.Form.Filter)

输出:([_brands].[name]="Test")

但我需要([brands].[name]="Test")

【问题讨论】:

  • @Gustav 是正确的。由于一个简单的印刷错误,将此问题标记为离题。

标签: ms-access vba


【解决方案1】:

应该是:

sqlQuery = " brands.name LIKE '*" & Me.txtKeywords & "*' " & _
           " OR brands.ID LIKE '*" & Me.txtKeywords & "*' " 

此外,您只需设置子表单的 RecordSource 并保持其过滤器设置不变,因此您的消息框将只显示此过滤器。

设置过滤器:

Dim sql As String
Dim Filter As String

sql = "SELECT * FROM brands"
Filter = "[name] LIKE '*" & Me.txtKeywords & "*' " & _
         "OR [ID] LIKE '*" & Me.txtKeywords & "*'" 

Me.sfrmBrands.Form.RecordSource = sql
Me.sfrmBrands.Form.Filter = Filter
Me.sfrmBrands.Form.FilterOn = True

编辑:过滤前过滤:

Me.sfrmBrands.Form.RecordSource = sql
' and perhaps:
Me.sfrmBrands.Form.FilterOn = True

【讨论】:

  • 谢谢,但是有了这个改变,问题是一样的。
  • 我可以看到。你的语法骗了我。
  • 现在关键字设置了过滤器,但我想通过我的关键字过滤表格,然后我想使用标准过滤器值
  • 那么你的原始代码就可以工作了。不需要重新查询,但也许您需要对过滤器进行反应。见编辑。
  • 我的子表单源对象是一个查询。关键字搜索工作,但在关键字搜索后,我只能在一列中使用标准过滤器,而不是全部。如果我使用一个表作为子表单源对象并在其他表中使用关键字搜索它工作正常
【解决方案2】:

我找到了问题,但我没有解决方案。

如果我按关键字搜索

Me.sfrmBrands.Form.RecordSource = sql

将表名从查询名改为子表单名

是否有其他解决方案

Me.sfrmBrands.Form.RecordSource = sql

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2020-08-31
    • 2017-08-17
    • 2022-11-24
    • 2020-01-28
    • 1970-01-01
    相关资源
    最近更新 更多