【发布时间】:2013-09-04 13:48:29
【问题描述】:
我正在尝试定义一个 SQL 语句以用作 MSAccess 表单上 ComboBox 的行源。 SQL 应该从表 tblI 中选择记录,其中特定表字段与用户设置的变体参数 varS 匹配;但是,如果 varS 为 Null 或不存在于另一个表 tblS 中,则 SQl 应选择 tblI 中的所有记录。
我可以对它的第一部分进行编码(varS 匹配或为空):
SELECT tblI.ID, tblI.S FROM tblI WHERE ((tblI.S = varS) OR (varS Is Null)) ORDER BY tblI.ID;
我正在苦苦挣扎的地方是合并最后一个元素(varS 不存在于 tblS 中)。我可以为 tblS 中没有 varS 编写一个测试代码:
Is Null(DLookup("[tbls.ID]","tblS","[tblS.ID]= " & varS))
但我不知道如何将其合并到 SQL 语句中。这应该有效吗?
SELECT tblI.ID, tblI.S FROM tblI WHERE tblI.S = varS OR varS Is Null OR DLookup("[tbls.ID]","tblS","[tblS.ID]= " & varS) Is Null ORDER BY tblI.ID;
当作为查询运行时,无论 varS 的值如何,它都会返回 tblS 中的每条记录。
表结构:
tblI 包含 2 个字段,Autonumber ID 和 Long S
tblS 包含 1 个字段,自动编号 ID
【问题讨论】:
-
"...用户设置的变体参数 varS" 您使用什么方法让用户为
varS提供值? -
@HansUp 来源于ComboBox中选择的值;如果未选择任何值,则将其设置为 tblS 中不存在的值(类似于stackoverflow.com/a/18407742/1943174 中描述的内容)