【问题标题】:Query not running with "*" criteria查询未使用“*”条件运行
【发布时间】:2012-06-29 15:51:02
【问题描述】:

我有一个查询,我希望条件查看组合框。我使用以下行源填充组合框以添加“全部”选项:

SELECT id, team FROM tblTeams ORDER BY team UNION SELECT "*", "<ALL>" FROM tblTeams;

如果我选择一个团队,查询运行良好(条件是针对 id,组合框的绑定列是 1)。但是,如果我选择 ,我会收到警告:“此表达式键入错误,或者它太复杂而无法计算。例如,一个数字表达式可能包含太多复杂元素。尝试通过分配部分来简化表达式变量的表达式。”

该字段是一个整数,所以我认为 * 引起了问题。我尝试将其更改为“> 0”,但这给了我同样的错误。任何关于使这项工作的建议,这样我就不必使用 VBA 来操作查询(我可以这样做,但我觉得如果你不这样做会更干净——让我知道这是否是一个错误的想法) ?

【问题讨论】:

    标签: ms-access


    【解决方案1】:

    如果 tblTeams 中的 'id' 字段是数字,则尝试使用诸如 '*' 或 '>0' 之类的字符串会在它们通过 UNION 连接在一起时产生错误。

    根据您的需要,我建议您使用类似下面的查询,其中您使用 -1 作为您的“id”,或其他类型的唯一数字“id”。

    假设您的“id”字段都是正数。然后,您可以测试负数以确定是否应返回所有记录。

    SELECT id, team FROM tblTeams 
    UNION 
    SELECT -1 as id, "<ALL>" as team FROM tblTeams 
    ORDER BY team
    

    或者,您可以将“id”字段转换为字符串,因此它是一个类似于“*”或“>0”的字符串。重要的是字段必须具有相同的数据类型。

    SELECT Cstr(id), team FROM tblTeams
    UNION
    SELECT "*" as id, "<All>" as team from tblTeams
    ORDER BY team
    

    【讨论】:

    • 谢谢,Fink——我喜欢第一个答案,但我真的希望不必使用任何代码就能做到这一点,而且我不知道如何在不这样做的情况下测试负数.在第二个中,这会将组合框的值更改为字符串,但它是驱动字段数据类型的查询 - 或者您是否也将 cstr 添加到查询字段?我实际上会去测试一下,尽管 Remou 有一个解决方案,它只修改了查询以允许正确的结果。
    • 我测试了 Cstr(在查询字段和组合框的 id 上),当我选择 时报告运行,但没有返回任何记录。
    【解决方案2】:

    在我看来,您希望将表单作为查询中的条件行。

    尝试使用 Like。这对我有用:

    SELECT Table1.ID, Table1.Team
    FROM Table1
    WHERE Table1.ID Like [Forms]![Table1]![MyCombo]
    

    这不需要任何代码即可工作。如果选择一个数字,则返回该数字,如果选择 All,则返回所有非空记录。

    【讨论】:

    • 像往常一样,@Remou,你成功了!我不确定我是否理解它为什么会起作用——“Like”使它返回所有非空记录?或者当它被评估时是“Like *”,这就是它返回所有非空记录的原因?谢谢!
    • 像这样运行查询SELECT 1 like "1" As Like1, 1 like "*" As LikeAsterisk, Format( 1 like "1", "true/false") As Like1t, Format(1 like "*", "true/false") As LikeAsteriskt FROM (SELECT Top 1 ID FROM Table1) As t 你会看到 1 就像“1”和“*”一样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 2018-03-16
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多