我有一个查询,该查询基于表单(任务存档)上的布尔值进行过滤。布尔值以long形式存储在基础表中(仅允许使用0和-1)。
我想编写一个查询,该查询将只显示那些错误的记录(未归档的记录)或所有记录。
我希望下面的查询能够正常工作,但它不会...仅返回那些归档字段设置为True
(-1)的记录:
SELECT tbl_Tasks.TaskID, tbl_Tasks.TArchive
FROM tbl_Tasks
WHERE (((tbl_Tasks.TArchive)=
IIf([Forms]![frm_Activity]![txtArchivedTaskDisplay]=0,False,
(tbl_Tasks.TArchive)=0 Or (tbl_Tasks.TArchive)=-1)));
下面的查询(我希望仅显示True
的那些记录)实际上返回了所有记录:
SELECT tbl_Tasks.TaskID, tbl_Tasks.TArchive
FROM tbl_Tasks
WHERE (((tbl_Tasks.TArchive)=
IIf([Forms]![frm_Activity]![txtArchivedTaskDisplay]=0,False,
(tbl_Tasks.TArchive)<>0)));
这是为什么? 访问在这里遵循什么逻辑?
答案 0 :(得分:1)
您不能将SQL放在IIF
中的条件位置。如果可能,将评估IIF中的所有内容。由于您只有0或-1,因此评估始终为真。
((tbl_Tasks.TArchive)=0 Or (tbl_Tasks.TArchive)=-1) => true
这就是为什么您只看到TArchive = true
您可以为第一个查询尝试类似的操作:
WHERE
tbl_Tasks.TArchive **<** IIf(displayArchivedOnly,0,1);
第二个:
WHERE
tbl_Tasks.TArchive = [Forms]![frm_Activity]![txtArchivedTaskDisplay]
假设您的txtArchivedTaskDisplay
拥有true或false值(如切换按钮)。但是再次,请阅读更多有关iif的工作原理。