以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  空值問題  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=18260)

--  作者:hhbb
--  发布时间:2012/4/7 16:43:00
--  空值問題
窗口中有一SQLQuery查詢表,Fill1與Fill2都有"Email"列,設一鍵二用,篩選Email用戶與冇Email用戶,結果,折騰許久,非得如此設置才成!不明白啊??

其中  Fill1的Email列內容是由SQL的INNER JOIN連接[客戶資料]表而來,
        Fill2的Email列內容是由[客戶資料]表賦值而來

[ > \'\', =\'\']  與 [ Is not Null, Is Null] 省掉任何一個都不行

Dim s1 As String
Dim t As Table =Tables("查詢_Table1")
vars("bn1") =not vars("bn1")

If t.DataTable.DataCols.Contains("轉賬方式") Then
   s1 =  iif(vars("bn1") = True," > \'\'"," =\'\'")        
Else
    s1  = iif(vars("bn1") = True," Is not Null"," Is Null")
End If

t.filter = "Email" & s1

--  作者:狐狸爸爸
--  发布时间:2012/4/9 8:23:00
--  
是这样的,因为""不一定就是null
 
正如:
 
所有的表都有一个名为_Locked的列,用于保存行的锁定状态。
如果要筛选已经锁定的行,表达式为:
[_Locked] = True
如果要筛选未锁定的行,表达式却不能简单地设为:
[_Locked] = False
这是因为_Locked列中可能有空值,所以正确的表达式为:
[_Locked] = False Or [_Locked] Is Null
虽然我们用的是_Locked这样一个特殊的列作为例子,但是上面的知识适合任何逻辑

--  作者:hhbb
--  发布时间:2012/4/9 11:04:00
--  
我現在寫成這樣OK,但如以[Email Is not null] 替代 [Email > \'\'],反而不OK了,
[Email Is not null] <> [Email > \'\']嗎?非空[Email > \'\']更通用嗎?

Dim s1 As String
Dim t As Table =Tables("查詢_Table1")

vars("bn1") =not vars("bn1")
s1=  iif(vars("bn1") = True,"Email > \'\'","Email is Null or Email =\'\'")        
t.filter = s1



--  作者:狐狸爸爸
--  发布时间:2012/4/9 11:07:00
--  

最保险的就是:

 

Email is Null or Email =\'\'

 

因为有的单元格是真的null,有的单元格的值是\'\',不是null,只是看上去null


--  作者:hhbb
--  发布时间:2012/4/9 11:12:00
--  
明白Email is Null or Email =\'\'

我說是[Email Is not null] 不等於 [Email > \'\']嗎?

--  作者:狐狸爸爸
--  发布时间:2012/4/9 11:14:00
--  

不等于的。


--  作者:hhbb
--  发布时间:2012/4/9 11:24:00
--  
以下是引用狐狸爸爸在2012-4-9 11:14:00的发言:

不等于的。


昏!這個空與非空還真複雜! 難道何時用 [Email > \'\'],何時用[Email Is not null]只能實踐了?



--  作者:狐狸爸爸
--  发布时间:2012/4/9 11:25:00
--  
不用实践,不管三七二一,两个都写上,用or连起来。
[此贴子已经被作者于2012-4-9 11:25:27编辑过]

--  作者:hhbb
--  发布时间:2012/4/9 11:30:00
--  
以下是引用狐狸爸爸在2012-4-9 11:25:00的发言:
不用实践,不管三七二一,两个都写上,用or连起来。
不行啊!這個OK
Dim s1 As String
Dim t As Table =Tables("查詢_Table1")
vars("bn1") =not vars("bn1")
s1=  iif(vars("bn1") = True,"Email > \'\'","Email is Null or Email =\'\'")        
t.filter = s1


兩個都寫上不OK啊?
Dim s1 As String
Dim t As Table =Tables("查詢_Table1")
vars("bn1") =not vars("bn1")
s1=  iif(vars("bn1") = True,"Email Is not Null or Email > \'\'","Email is Null or Email =\'\'")        
t.filter = s1


--  作者:狐狸爸爸
--  发布时间:2012/4/9 11:36:00
--  
第一个是正确:
 
Email is Null or Email = \'\'
 
第二个应该:
 
Email Is not Null  And Email >\'\'