【问题标题】:Filter multiple value/criteria from same field in query using Access form text box使用 Access 表单文本框从查询中的同一字段过滤多个值/条件
【发布时间】:2019-10-18 04:11:05
【问题描述】:

我想使用 Access 表单中的多个条件过滤查询中的字段。
例如具有 2 个条件的字段 Prime Part
这是我的表格
我正在使用来自https://stackoverflow.com/a/19568169
的方法 但是当我在文本框[Forms]![6M_DEMAND_FILTER]![Prime Part][Forms]![6M_DEMAND_FILTER]![Prime Part3] 中填写值并将其他留空时,我的结果一无所获。 这是我的查询 sql

SELECT [6M_DEMAND].Region, [6M_DEMAND].Partnumber, [6M_DEMAND].[Part Name], [6M_DEMAND].[Prime Part], [6M_DEMAND].[Top Most Part], [6M_DEMAND].[Planner Name], [6M_DEMAND].[Part Cost], [6M_DEMAND].[Gcc 1], [6M_DEMAND].[Gcc 2], [6M_DEMAND].[Gcc 3], [6M_DEMAND].[Lob Model], [6M_DEMAND].[Region Age Class], [6M_DEMAND].Rtsdate, [6M_DEMAND].Eopdate, [6M_DEMAND].[Buy Part], [6M_DEMAND].[Return Warranty Iw], [6M_DEMAND].[Iw Yield Percentage], [6M_DEMAND].[Iw Yield Override], [6M_DEMAND].[Return Warranty Oow], [6M_DEMAND].[Oow Yield Percentage], [6M_DEMAND].[Oow Yield Override], [6M_DEMAND].Mpp, [6M_DEMAND].[Mpp(in)/Ccc Client Material Class], [6M_DEMAND].[Apcc Material Class/Ccc Ent Material Class], [6M_DEMAND].Jpn4hr, [6M_DEMAND].[Asu Count], [6M_DEMAND].Hostlocid, [6M_DEMAND].Country, [6M_DEMAND].Ib, [6M_DEMAND].[Stock Level Custom 2/Asl Lock Note], [6M_DEMAND].Aslitem, [6M_DEMAND].Safetystock, [6M_DEMAND].Ohb, [6M_DEMAND].[Fg Ohb (ohgood)], [6M_DEMAND].[Apj - Stock In Transit (csk)], [6M_DEMAND].[Usg 12m], [6M_DEMAND].[Usg -6m], [6M_DEMAND].[Usg -5m], [6M_DEMAND].[Usg -4m], [6M_DEMAND].[Usg -3m], [6M_DEMAND].[Usg -2m], [6M_DEMAND].[Usg -1m], [6M_DEMAND].[Usg -4w], [6M_DEMAND].[Usg -3w], [6M_DEMAND].[Usg -2w], [6M_DEMAND].[Usg -1w], [6M_DEMAND].[Current Wk Usg], [6M_DEMAND].[Op Qty], [6M_DEMAND].[Planner Code], [6M_DEMAND].[Region Lob], [6M_DEMAND].[Regional Com Code]
FROM 6M_DEMAND
WHERE (
           [6M_DEMAND].[Prime Part] Like "*" & [Forms]![6M_DEMAND_FILTER]![Prime Part] & "*"
        OR [Forms]![6M_DEMAND_FILTER]![Prime Part] Is Null
    )
 AND
    (
           [6M_DEMAND].[Prime Part] Like "*" & [Forms]![6M_DEMAND_FILTER]![Prime Part1] & "*"
        OR [Forms]![6M_DEMAND_FILTER]![Prime Part1] Is Null
    )
 AND
    (
           [6M_DEMAND].[Prime Part] Like "*" & [Forms]![6M_DEMAND_FILTER]![Prime Part2] & "*"
        OR [Forms]![6M_DEMAND_FILTER]![Prime Part2] Is Null
    )
AND
    (
           [6M_DEMAND].[Prime Part] Like "*" & [Forms]![6M_DEMAND_FILTER]![Prime Part3] & "*"
        OR [Forms]![6M_DEMAND_FILTER]![Prime Part3] Is Null
    )
 AND
    (
           [6M_DEMAND].[Prime Part] Like "*" & [Forms]![6M_DEMAND_FILTER]![Prime Part4] & "*"
        OR [Forms]![6M_DEMAND_FILTER]![Prime Part4] Is Null
    )
 AND
    (
           [6M_DEMAND].[Prime Part] Like "*" & [Forms]![6M_DEMAND_FILTER]![Prime Part5] & "*"
        OR [Forms]![6M_DEMAND_FILTER]![Prime Part5] Is Null
    )
GROUP BY [6M_DEMAND].Region, [6M_DEMAND].Partnumber, [6M_DEMAND].[Part Name], [6M_DEMAND].[Prime Part], [6M_DEMAND].[Top Most Part], [6M_DEMAND].[Planner Name], [6M_DEMAND].[Part Cost], [6M_DEMAND].[Gcc 1], [6M_DEMAND].[Gcc 2], [6M_DEMAND].[Gcc 3], [6M_DEMAND].[Lob Model], [6M_DEMAND].[Region Age Class], [6M_DEMAND].Rtsdate, [6M_DEMAND].Eopdate, [6M_DEMAND].[Buy Part], [6M_DEMAND].[Return Warranty Iw], [6M_DEMAND].[Iw Yield Percentage], [6M_DEMAND].[Iw Yield Override], [6M_DEMAND].[Return Warranty Oow], [6M_DEMAND].[Oow Yield Percentage], [6M_DEMAND].[Oow Yield Override], [6M_DEMAND].Mpp, [6M_DEMAND].[Mpp(in)/Ccc Client Material Class], [6M_DEMAND].[Apcc Material Class/Ccc Ent Material Class], [6M_DEMAND].Jpn4hr, [6M_DEMAND].[Asu Count], [6M_DEMAND].Hostlocid, [6M_DEMAND].Country, [6M_DEMAND].Ib, [6M_DEMAND].[Stock Level Custom 2/Asl Lock Note], [6M_DEMAND].Aslitem, [6M_DEMAND].Safetystock, [6M_DEMAND].Ohb, [6M_DEMAND].[Fg Ohb (ohgood)], [6M_DEMAND].[Apj - Stock In Transit (csk)], [6M_DEMAND].[Usg 12m], [6M_DEMAND].[Usg -6m], [6M_DEMAND].[Usg -5m], [6M_DEMAND].[Usg -4m], [6M_DEMAND].[Usg -3m], [6M_DEMAND].[Usg -2m], [6M_DEMAND].[Usg -1m], [6M_DEMAND].[Usg -4w], [6M_DEMAND].[Usg -3w], [6M_DEMAND].[Usg -2w], [6M_DEMAND].[Usg -1w], [6M_DEMAND].[Current Wk Usg], [6M_DEMAND].[Op Qty], [6M_DEMAND].[Planner Code], [6M_DEMAND].[Region Lob], [6M_DEMAND].[Regional Com Code];

你能帮我解决这个问题吗
谢谢。

【问题讨论】:

  • 您遵循的示例与您的情况不同,因为您的多个条件适用于同一字段。 AND 运算符不起作用,因为没有单个记录可以满足匹配所有输入的条件。当你改用 OR 时会发生什么?
  • 为什么要使用 GROUP BY?没有汇总计算。
  • 我们使用 OR 我的查询将变得很大,然后无法导出到 excel。我将尝试您在下面提供的选项。

标签: ms-access


【解决方案1】:

选项:

  1. 将 InStr() 函数与串联控件一起使用:
SELECT 6M_Demand.* FROM 6M_Demand
WHERE InStr([Forms]![6M_DEMAND_FILTER]![Prime Part1] & "," 
& [Forms]![6M_DEMAND_FILTER]![Prime Part2] & "," 
& [Forms]![6M_DEMAND_FILTER]![Prime Part3] & "," 
& [Forms]![6M_DEMAND_FILTER]![Prime Part4] & "," 
& [Forms]![6M_DEMAND_FILTER]![Prime Part5], [Prime Part]) > 0;
  1. 将 LIKE 和通配符与串联控件一起使用:
SELECT 6M_Demand.* FROM 6M_Demand
WHERE [Forms]![6M_DEMAND_FILTER]![Prime Part1] & "," 
& [Forms]![6M_DEMAND_FILTER]![Prime Part2] & "," 
& [Forms]![6M_DEMAND_FILTER]![Prime Part3] & "," 
& [Forms]![6M_DEMAND_FILTER]![Prime Part4] & "," 
& [Forms]![6M_DEMAND_FILTER]![Prime Part5] LIKE "*" & [Prime Part] & "*";
  1. VBA 构造过滤条件并应用于表单或报表

建议不要在命名约定中使用空格或标点符号/特殊字符。

【讨论】:

  • 非常感谢,我确实得到了需要使用or 的一般逻辑,但是当我这样做时,查询将包括所有数据(如果有)textbox 留空。有了你的回答,我可以得到 2 个值,即使其他值也留空。
猜你喜欢
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 2020-06-27
  • 1970-01-01
  • 2021-12-11
相关资源
最近更新 更多