【问题标题】:How to create an 'All' option in Access VBA forms to be passed as a query parameter?如何在 Access VBA 表单中创建“全部”选项以作为查询参数传递?
【发布时间】:2016-10-02 18:43:37
【问题描述】:

我有一个名为 Persons 的表,例如:

     ID        Name

     1         John
     2         Jerry
     3         Jack

我设置了一个名为 Form1 的表单,其中包含一个名为 Combo1 的组合框。

Combo1 有 3 个值-

    1
    2
    3
    All

然后我设置以下查询:

    Select * From Persons WHERE Persons.ID = (Forms![Form1]![Combo1]);

当在组合框中选择 1,2 或 3 时,查询工作正常,但我不知道如何使它在用户选择“全部”时选择所有记录。

【问题讨论】:

    标签: ms-access vba ms-access-2007


    【解决方案1】:

    我不明白为什么需要 VBA。在我看来,您只需查询即可获得所需的内容...

    Select *
    From Persons
    WHERE
            Persons.ID = Forms![Form1]![Combo1]
        OR Forms![Form1]![Combo1] = 'All';
    

    当在组合框中选择全部时,条件Forms![Form1]![Combo1] = 'All'对于表中的所有行都将为True。所以没有一个被排除在查询的结果集中。

    当在组合框中选择 All 以外的任何内容时,查询将仅返回 ID 值与组合框值匹配的行。

    【讨论】:

    • 如果我使用两个参数,有什么办法吗?例如,如果我对查询使用两个参数,例如:
    • 如何使它适用于多个参数?我将表格修改为如下所示: ID 名称 1 John 1 Jerry 2 Jack 2 Ben 3 Bill 我添加了另一个名为 Combo2 的组合框。 Combo2 具有三个值 - John、Jerry、All 我将查询修改为以下内容: Select * From Persons WHERE Persons.ID > Forms![Form1]![Combo1] AND Persons.Name = Forms![Form1]![Combo2 ] 我怎样才能使它工作,以便用户可以查看 ID 大于 1 的所有名称?
    • 我不明白你现在在问什么。考虑提交一个新问题。
    • 您可以通过SELECT * FROM Persons WHERE Forms![Form1]![Combo1] IN ('All', Persons.ID) 实现与原始答案相同的结果 - 这可能为多个参数提供更多灵活性
    【解决方案2】:

    不确定您的 Combo1 现在是什么样子? 您是否要求显示 ID > 1 的所有条目或所有条目 > 比 Combo1 中选择的 ID - 并且您仍然在 Combo 1 中具有 ALL 选项?

    如果您只是问最后一个问题:

    我怎样才能使它工作,以便用户可以查看 ID 的所有名称 大于 1?

    那你大概可以用

    Select * From Persons WHERE Persons.ID > 1 
    AND (Persons.Name = Forms![Form1]![Combo2] OR Forms![Form1]![Combo2] = 'All');
    

    但现在我认为你让每个人都对你想要的东西感到困惑。希望我猜对了,让你走上正确的道路

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 2019-09-28
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      相关资源
      最近更新 更多