查询未以“*”条件运行

时间:2012-06-29 15:51:03

标签: ms-access

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

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

如果我选择一个团队,则查询运行正常(条件是针对id的,并且组合框的绑定列是1)。但是,如果我选择&lt; ALL&gt;,我会收到警告:“此表达式键入不正确,或者它太复杂而无法评估。例如,数字表达式可能包含太多复杂元素。请尝试通过分配部件来简化表达式变量的表达式。“

该字段是一个整数,所以我认为*导致了问题。我尝试将其更改为“&gt; 0”,但这给了我同样的错误。任何使这项工作的建议,所以我不必使用VBA来操纵查询(我很乐意这样做,但我觉得如果你不这样做更清洁 - 让我知道这是否是一个错误的想法) ?

2 个答案:

答案 0 :(得分:2)

如果tblTeams中的“id”字段为数字,则尝试使用“*”或“&gt; 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'字段转换为字符串,因此它就像'*'或'&gt; 0'一样。重要的是字段具有相同的数据类型。

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

答案 1 :(得分:1)

在我看来,您希望将您的表单称为查询中的标准行。

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

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

这不需要任何代码。如果选择了一个数字,将返回该数字,如果选择了全部,则将返回所有非空记录。