使用表单输入更改访问sql

时间:2012-09-13 14:16:15

标签: sql ms-access ms-access-2007

我已经在ms-access中创建了一个表单,以根据表单获取查询输出。

访问查询中的sql为:

SELECT w.* FROM work_log1 AS w, [task name] AS t WHERE t.task_name=forms!
[Accenture QC]!combo4 And t.task_id=w.task_name And w.activity_start_date Between  
forms ![Accenture QC]!text0 And forms![Accenture QC]!text11 
and w.[TAT] = forms![Accenture QC]!combo46

现在一切正常,但如果combo46为空,我想删除最后一个过滤行。

我以某种方式使sql成为这样:

and iif(forms![Accenture QC]!combo46 = '', t.task_id=w.task_name ,
t.task_id=w.task_name   and w.[TAT] = forms![Accenture QC]!combo46)

这是否是正确的方法,如果只应用此TAT过滤器会怎样?

我的意思是如何写这样的东西:

"SELECT w.* FROM work_log1 AS w where (w.[TAT] = forms![Accenture QC]!combo46 
OR forms![Accenture QC]!combo46 Is Null)" 

由于

1 个答案:

答案 0 :(得分:1)

目前,WHERE子句的最后一部分是......

and w.[TAT] = forms![Accenture QC]!combo46

如果您的目标是在w.[TAT]为空时忽略combo46上的约束,请尝试以下操作:

AND (w.[TAT] = forms![Accenture QC]!combo46
    OR forms![Accenture QC]!combo46 Is Null)

如果“ blank ”可能表示Null以外的任何内容,例如空(零长度)字符串或空格字符,则可能不那么简单。您可以在一个表达式中捕获所有这些可能性。

Len(Trim(forms![Accenture QC]!combo46 & "")) = 0

在您问题的最新版本中...

SELECT w.*
FROM work_log1 AS w
where
       w.[TAT] = forms![Accenture QC]!combo46 
    OR Len(Trim(forms![Accenture QC]!combo46 & "")) = 0