MS Access SQL If Then语句的复选框

时间:2014-08-01 19:46:23

标签: sql database ms-access ms-access-2010

我正在尝试运行搜索查询。它如下。最后两行代码不起作用。这是一个复选框。如果选中checkboxYes,则仅拉取已检查数据库的YES / NO字段中的项目。如果选中了checkboxNo,则仅拉取已检查的数据库的YEs / No字段中的项目。如果选中了BOTH框,则拉出所有项目。我无法让任何一种情况发挥作用。除复选框之外的所有其他字段均可正常工作。

 SELECT *
 FROM NLog
 Where
(([Forms]![FrmSearch]![Combo13] is Null) OR ((NLog.State)=[Forms]![FrmSearch]![Combo13])) and

(([Forms]![FrmSearch]![daterecsrt] is Null) or (((NLog.DateRec) Between [Forms]![FrmSearch]![daterecsrt] And [Forms]![FrmSearch]![daterecend]))) and

(([Forms]![FrmSearch]![datesrttxt3] is Null) or (((NLog.DateRec) Between [Forms]![FrmSearch]![datesrttxt3] And [Forms]![FrmSearch]![dateendtxt3]))) and

(([Forms]![FrmSearch]![checkyes] is Null) or  ((NLog.Compchk)=True)) and

(([Forms]![FrmSearch]![checkNo] is Null) or  ((NLog.Compchk)=False)) 

谢谢!

我正在使用MS Acess 2010.这是使用表单上的框来运行查询。

1 个答案:

答案 0 :(得分:0)

NLog是一个表,那么为什么要将表中的字段引用为[Forms]![FrmSearch]![Combo13]等等。这些是表单上的控件而不是表中的字段。你的查询真的不应该是:

SELECT * FROM NLog WHERE
(NLog.State is Null OR NLog.State = Forms!FrmSearch!Combo13)
AND (NLog.DateRec is Null OR NLog.DateRec Between Forms!FrmSearch!daterecsrt And Forms!FrmSearch!daterecend
AND (NLog.DateRec is Null OR NLog.DateRec Between Forms!FrmSearch!datesrttxt3 And Forms!FrmSearch!dateendtxt3) 
AND (NLog.Compchk is Null OR  NLog.Compchk = True) 
AND (NLog.Compchk is Null OR NLog.Compchk = False) 

此外,以下内容不会给您任何结果:

AND (NLog.Compchk is Null OR NLog.Compchk = True) 
AND (NLog.Compchk is Null OR NLog.Compchk = False) 

NLog.Compchk不能同时为TrueFalse。它将是一个或另一个或Null

您需要检查框是否已选中并围绕该框构建查询的最后一部分(即IIF())。