以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 空值問題 (http://foxtable.net/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 >\'\' |