版友三個(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è)搞球不清,既然是搞球不清,也就不必去刻意地搞清楚。大概齊知道怎么回事,怎么處理就行了。 |
|站長郵箱|小黑屋|手機(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.