2014-02-11 159 views
2

我有一个2嵌入子窗体的形式。MSAccess:零vs'' - 让我疯狂

subform_1上的on-click事件将subform_2的recordource设置为从所选subform_1记录(所有TEXT字段)引用5 attrs的记录源。

strSQL = "SELECT Table_1.* FROM Table_1 " & _ 
    "WHERE (((Table_1.Attr_A)= '" & Forms![mainform]![subform_1]![attr1] & "') " & _ 
    "AND ((Table_1.Attr_B) = '" & Forms![mainform]![subform_1]![attr2] & "') " & _ 
    "AND ((Table_1.Attr_C) = '" & Forms![mainform]![subform_1]![attr3] & "') " & _ 
    "AND ((Table_1.Attr_D) = '" & Forms![mainform]![subform_1]![attr4] & "') " & _ 
    "AND ((Table_1.Attr_E) = '" & Forms![mainform]![subform_1]![attr5] & "'));" 
Forms![mainform]![subform_2].Form.RecordSource = strSQL 

我的问题是某些记录可能有5个所需attrs中的NULL值,这是一个有效的条件。当subform_1值为NULL时,周围的“'导致集合中的(0)个记录。

有效处理subform_1中NULL条件的任何建议?

+1

可你只需要使用'或NULL'每个ATTR可能是NULL? –

+0

谢谢,这让我很接近,但返回所有5个Attrs都为空的有效条件,并且每个排列的Null和Not Null attr数据都是空的。 –

+0

@Joe T是对的,你需要使WHERE子句看起来像: 其中(Attr_A ='xyz'或Attr_A为Null)AND(Attr_B ='abc'或Attr_B为空)..... –

回答

2

如果你只考虑Table_1.Attr_A,我想你是说你要这个......

"SELECT t1.* FROM Table_1 AS t1 " & _ 
"WHERE (t1.Attr_A & '') = '" & Forms![mainform]![subform_1]![attr1] & "'" 

如果这是正确的,基于Attr_B下一个条件添加AND

"SELECT t1.* FROM Table_1 AS t1 " & _ 
"WHERE " & _ 
"(t1.Attr_A & '') = '" & Forms![mainform]![subform_1]![attr1] & "'" & _ 
" AND (t1.Attr_B & '') = '" & Forms![mainform]![subform_1]![attr2] & "'" 

并通过添加其余条件继续。

+1

HansUp - 一直在寻找这个太久。您的解决方案将使用NULL Attr Values @ Thanks返回记录! –

0

相信Nz功能,还可以使用:

"SELECT t1.* FROM Table_1 AS t1 " & _ 
"WHERE Nz(t1.Attr_A) = '" & Forms![mainform]![subform_1]![attr1] & "'"