使用存储在另一个表中的关键字过滤 Access 表

问题描述

我有 3 个访问表:tblClients、tblSalesRecords、tblKeywords。它们都由 ClientID 键链接。我的一些客户只需要出现在销售说明记录中的特定品牌的销售记录。因此,我创建了 tblKeywords,其中包含每个客户的关键字(从几个关键字到数十个)。

我需要可以附加到可以根据每个客户端的关键字获取这些记录的表单/报告/查询的 VB 代码。我只能对 ONE 关键字执行此操作,但无法弄清楚如何创建包含所有关键字的完整字符串。

以下是链接到用于准备报告的表单的 sql 代码

SELECT tblSalesRecords.SalesID,tblSalesRecords.ClientID,tblSalesRecords.ItemDescription,tblSalesRecords.Qty
FROM tblSalesRecords
WHERE (((tblSalesRecords.ItemDescription) Like "*" & [Forms].[KeywordsSubform].[Keyword] & "*"));

关键字表示例如下:

客户 ID|关键字 101|三星 101|苹果 101|东芝 102|汽车 102|摩托车 102|公交车

谢谢。

解决方法

一种方法是让一个字段包含要匹配的 EXACT 字符串:

SELECT * FROM tblSalesRecords 
WHERE somefield IN (SELECT keyword FROM tblKeywords) 
AND ClientID = Forms!formname!ClientID

另一个使用 DLookup()。

SELECT * FROM tblSalesRecords 
WHERE NOT DLookup("ClientID","tblKeywords","'" & [fieldname] & "' LIKE '*' & [Keyword] & '*'") IS NULL
AND ClientID = Forms!formname!ClientID;

否则,很可能需要一个 VBA 自定义函数。