【问题标题】:Advanced Filter Criteria in AccessAccess 中的高级筛选条件
【发布时间】:2013-11-12 20:32:37
【问题描述】:

问题很简单,但我就是想不通。

我有两张表可以访问,一张是记录,另一张是“关键词”。我需要过滤包含某些“关键词”的记录。换句话说,使用一个表字段作为另一个表字段的筛选条件,但不链接它们,因为“关键词”表只包含随机词而不是整条记录。

在 excel 中,我可以对我的记录运行高级过滤器,只需将关键词列表(并使用通配符)指定为条件,但在访问权限中,我还没有找到根据另一个表字段进行过滤的方法。

有什么想法吗?

【问题讨论】:

  • 你应该多尝试,一步一步都没有。
  • 您对用户界面有更详细的说明吗?您想要多个“关键字”搜索吗?您要保存过滤器吗?
  • 是的,我确实想要多个关键字搜索,实际上我有一个包含几百个的列表,我的想法是过滤它们,因为我很肯定包含这些关键字的记录只是垃圾。我还有一个表示真实数据的关键字列表。

标签: ms-access filtering


【解决方案1】:

您可能需要创建一个函数来输出自定义 SQL,其中包含所有关键字。这是一个帮助您入门的示例。

Public Function fGetTrashRecords()
'add your own error handling
Dim SQL As String
Dim rst As DAO.Recordset
Dim rstTrash As DAO.Recordset
Dim db As DAO.Database

Set db = CurrentDb
Set rst = db.OpenRecordset("SELECT sKeyWord FROM tblBadKeyWords", dbOpenSnapshot)
If Not rst Is Nothing Then
    rst.MoveFirst
    Do While Not rst.EOF
        SQL = SQL & " strFieldContaingKeyWord LIKE *'" & rst!sKeyWord & "'* OR"
        rst.MoveNext
    Loop
    If SQL > "" Then SQL = Left(SQL, Len(SQL) - 2) 'get rid of the last OR
    rst.Close
    Set rst = Nothing
End If
If SQL > "" Then
    Set rstTrash = db.OpenRecordset("SELECT * FROM tblHasKeyWords WHERE " & SQL, dbOpenDynaset, dbSeeChanges)
    If Not rstTrash Is Nothing Then
        rstTrash.MoveFirst
        Do While Not rstTrash.EOF
            Debug.Print rstTrash!ID
            rstTrash.MoveNext
        Loop
        rstTrash.Close
        Set rstTrash = Nothing
    End If
End If
Set db = Nothing

End Function

【讨论】:

  • 就像我在 excel 中所做的那样,猜猜它会这样。感谢您的帮助,我真的会帮助我不要从头开始。
  • 给我涂上紫色,但你不应该使用 OR 运算符,而不是 AND 运算符吗?
  • 绝对。我改变了答案。
猜你喜欢
  • 2019-10-12
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
相关资源
最近更新 更多