設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

【Access小品】搞球不清 -- Null的概述

2015-5-30 14:02| 發(fā)布者: admin| 查看: 1819| 評(píng)論: 8|原作者: todaynew|來自: m.mzhfr.cn

摘要:   版友三個(gè)太陽同志用了一個(gè)IF me.Text0=Null Then這樣一個(gè)判斷,沒有能得到正確的結(jié)果。于是告訴他應(yīng)該寫做:IF isnull(me.Text0) Then。本來這個(gè)問題的解答就此該結(jié)束,但三個(gè)太陽同志繼續(xù)問他的寫法為什么是錯(cuò) ...
  版友三個(gè)太陽同志用了一個(gè)IF me.Text0=Null Then這樣一個(gè)判斷,沒有能得到正確的結(jié)果。于是告訴他應(yīng)該寫做:IF isnull(me.Text0) Then。本來這個(gè)問題的解答就此該結(jié)束,但三個(gè)太陽同志繼續(xù)問他的寫法為什么是錯(cuò)的。這就使得問題復(fù)雜化了,因?yàn)閷?duì)此問題我也沒全然搞清楚。

  三個(gè)太陽同志的問題關(guān)乎Null,而Null就是一個(gè)搞球不清的東西。Null不是字符串空,也不是數(shù)字0,而是值不確定狀態(tài),對(duì)Null的通俗理解就是搞球不清。1和1可以比較,1和2也可以比較。但是兩個(gè)搞球不清是無法比較的,兩個(gè)不確定也是無法比較的。所以Null與Null當(dāng)然也就無法構(gòu)成一個(gè)邏輯表達(dá)式了。當(dāng)文本框中沒有填寫任何東西時(shí),看起來它是空,實(shí)際需要將其理解為不確定。所以當(dāng)文本框沒有填寫任何東西時(shí)它是Null,但它卻不能與Null這個(gè)字面量進(jìn)行比較。

  實(shí)際上在不同程序語言中,關(guān)于Null還是有些差異的。在網(wǎng)頁的腳本語言JavaScript中,存在Undefined類型和Null類型,VBa中的Null似乎比較接近JavaScript中Undefined類型。在類C語言中(C、Java等),Null表示一個(gè)空對(duì)象指針,在類B語言中則是用Nothing來表示。無論如何Null總是琢磨不定和難以理解的。

  好在我們通常不大需要深入的理解Null是什么,而主要是需要判斷是不是Null了。在這個(gè)層面上,我們可以混淆一些概念,并知道不同的情況下的判斷怎么去處理。一般來講在Vba中,我們能對(duì)控件的取值是否為Null進(jìn)行判斷,我們可以用Isnull這個(gè)函數(shù)進(jìn)行。而在控件的有效性規(guī)則屬性中,我們需要寫成Is not Null。在查詢中我們通常也Is Null。如果你對(duì)這些都感到不可理解,你還可以用Nz函數(shù)將Null轉(zhuǎn)換為一個(gè)確定的值,然后進(jìn)行比較。

  除了判斷外,我們是可以用Null進(jìn)行某些賦值處理的。比如我們可以為控件的值賦值為Null,或者對(duì)某個(gè)數(shù)據(jù)表字段更新查詢?yōu)镹ull。不過你如果試圖給一個(gè)內(nèi)存變量賦值Null,那是通常是會(huì)出錯(cuò)的,除非這個(gè)內(nèi)存變量的類型為Variant。如果這個(gè)變量是Object,比如窗體變量、控件變量等,我們可以給它們賦值Nothing,以釋放它們。

  綜上所述,Null就是個(gè)搞球不清,既然是搞球不清,也就不必去刻意地搞清楚。大概齊知道怎么回事,怎么處理就行了。


發(fā)表評(píng)論

最新評(píng)論

引用 風(fēng)中漫步 2015-5-28 16:40
嗯,定義廣泛
引用 roych 2015-5-28 17:21
按我理解,Null為真空(當(dāng)然不是空字符串了)。既然是真空,那就是什么都沒有,數(shù)據(jù)類型自然算是不確定了。兩個(gè)不確定類型的數(shù)據(jù),是無法比較的。因此“Null=Null”是不可能返回TRUE的,同樣地,Null+Null當(dāng)然也不會(huì)返回?cái)?shù)值了。
就好比:一頭豬+一頭牛,不能算是2吧?
引用 sxgaobo 2015-5-28 20:51
深。!
引用 accben 2015-6-22 09:02
有時(shí)我會(huì)用 if len(me.Text0)>0 then 代替 if isnull(me.Text0)=true then
空值不好比較,它是一個(gè)變體。
引用 purplerose 2016-4-20 10:38
ROYCH 比喻不錯(cuò)呀  就好比:一頭豬+一頭牛,不能算是2吧? 是兩種動(dòng)物呀!
引用 輕風(fēng) 2016-4-20 11:30
Null = Null 返回 Null ,不會(huì)返回True或False
引用 woshinide 2016-8-14 17:28
roych: 按我理解,Null為真空(當(dāng)然不是空字符串了)。既然是真空,那就是什么都沒有,數(shù)據(jù)類型自然算是不確定了。兩個(gè)不確定類型的數(shù)據(jù),是無法比較的。因此“Null=Nul ...


查看全部評(píng)論(8)

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 05:23 , Processed in 0.100108 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部