欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

VB中判斷空的幾種方法(Null, Missing, Empty, Nothing, vbNullString)

 更新時間:2024年04月14日 10:20:05   作者:夏詩曼CharmaineXia  
本文主要介紹了VB中判斷空的幾種方法,包含Null, Missing, Empty, Nothing, vbNullString這幾張,你知道它們的區(qū)別嗎,下面就一起來介紹一下

vb6中存在幾個虛幻的值:Null、Missing、Empty、Nothing、vbNullString。除了最后一個之外,每一個值都不能直接用“a=值”來判斷。下面分別解釋一下這幾個值的含義。

1、Null

Null(空值)指一個不合法的數(shù)據(jù),判斷一個變量是否為Null使用SQL中的isNull函數(shù)。

1.1 ISNull函數(shù)

ISNULL函數(shù):使用指定的替換值替換 NULL。

語法:ISNULL ( check_expression , replacement_value )

isnull(a,0)  '如果a字段有空值返回0 沒有空值就返回a的本身
isnull(a,1)=2 '字段a有空值返回1,判斷isnull(a,1)是否等于2

'從TbStudent里查找stuAdress為空值的學(xué)生姓名和學(xué)號,并把空值替換成未知'
'stuAdress是int類型的,未知是varchar類型的,不允許添到同一列上'
select stuName,stuNumber,ISNULL(stuAdress,'未知') from TbStudent

check_expression:將被檢查是否為 NULL的表達(dá)式。check_expression 可以是任何類型的。

replacement_value:代替值,在 check_expression 為 NULL時將返回的表達(dá)式。

注釋:

replacement_value 必須與 check_expresssion 具有相同的類型。

如果 check_expression 不為 NULL,那么返回該表達(dá)式的值;否則返回 replacement_value。

1.2 使用Null的三種情況

(1)最簡單的,函數(shù)直接返回Null給調(diào)用方。譬如

Function DivideEx(ByVal A as Double, ByVal B as Double) as Double

	If B=0 Then		'當(dāng)B=0時返回Null,表示為不合法數(shù)據(jù)'
		DivideEx=Null
	Else
		DivideEx=A/B
	End if
End Function

(2)數(shù)據(jù)庫中,當(dāng)一個字段設(shè)為“允許空值”時,VB讀取到空值就會用Null表示,例如

Function GetCity(rst as ADODB.Recordset) as String

	If isNull(rst.Field("City")) Then	'當(dāng)City字段為空時返回Province字段,否則返回City字段'
	   GetCity=rst.Field("Province") 
	Else 
		GetCity=rst.Field("City")
	End if
End Function

(3)在調(diào)用庫函數(shù)時,如果遇到傳送變量類型與定義類型不一樣時有時會出現(xiàn)Null值。

Null值在計算時有點(diǎn)奇怪,譬如Null-Null=Null,Null+10=10,Null+""=""

2、Missing

Missing指傳遞進(jìn)入Variant變量的缺少,判斷Missing使用isMissing函數(shù)。
Missing只會在Varient中出現(xiàn),如果給入的數(shù)據(jù)類型是Byte,Integer,Long,Single,Double等缺少時為0;String缺少時為"";Object缺少時為Nothing。**

data value;
   input var1 var2 @@;
   if missing(var2) then delete;	'如果var2的的對象丟失,就刪除'
   datalines;
127 988 195 .
122 .n								'就這里吧n(nothing)刪除了'
;
run;
proc print ;run;

if var2=. then delete這樣的結(jié)果只會刪除缺失的值,不能刪除缺少的對象。

Obsvar1var2
1127988
2122n
用missing()函數(shù)的結(jié)果是:
Obsvar1var2
---
1127988

2.1 IsMissing函數(shù)

IsMissing是一個VB函數(shù),它返回一個布爾值,表示一個可選參數(shù)是否未被傳遞給一個函數(shù)。

語法:IsMissing (ArgName) As Boolean

ArgName參數(shù):必需,一個Variant類型的可選參數(shù)名。

備注

  • 使用 IsMissing 函數(shù)可檢測調(diào)用過程時是否提供了可選 Variant 參數(shù)。 如果未為指定參數(shù)傳遞任何值,則 IsMissing 將返回 True;否則將返回 False。
  • 如果 IsMissing 針對某參數(shù)返回 True,則在其他代碼中使用缺少參數(shù)可能導(dǎo)致用戶定義的錯誤。
  • 如果對 ParamArray (可變參數(shù))參數(shù)使用 IsMissing,則將始終返回 False。
  • IsMissing 對簡單數(shù)據(jù)類型(如 Integer 或 Double)無效,因為與 Variants 不同,它們沒有針對“丟失”標(biāo)志位的設(shè)置。

示例

下例使用 IsMissing 函數(shù)檢查是否已將可選參數(shù)傳遞到用戶定義的過程。 請注意, Optional 參數(shù)現(xiàn)在可具有默認(rèn)值和 Variant 之外的類型。

Dim ReturnValue		'下面的語句調(diào)用用戶定義的函數(shù)過程'
	ReturnValue = ReturnTwice()    ' Return是Null'
	ReturnValue = ReturnTwice(2)    ' Returns是4'

Function ReturnTwice(Optional A)	'函數(shù)過程定義'
    If IsMissing(A) Then			'如果缺少參數(shù)A,則返回Null'
        ReturnTwice = Null
    Else							'如果存在參數(shù)A,則返回值的兩倍'
        ReturnTwice = A * 2
    End If
End Function

3、Empty

VB特有的一種數(shù)據(jù)類型叫Variant 可變類型,理論上可以接受任何其他數(shù)據(jù)類型,如果變量未定義,VB自動將其作為可變類型對待。它的默認(rèn)值就是 Empty,值 Empty 是異于0、零長度字符串 (“”) 或 Null 值的特定值。判斷Empty使用isEmpty函數(shù),例如:

If IsEmpty (Z) Then Z = 0

當(dāng) Variant 變量包含 Empty 值時,可在表達(dá)式中使用它;將其作為 0 或零長度字符串來處理,這要根據(jù)表達(dá)式來定。

只要將任何值(包括 0、零長度字符串或 Null)賦予 Variant 變量,Empty 值就會消失。而將關(guān)鍵字 Empty 賦予 Variant 變量,就可將 Variant 變量恢復(fù)為 Empty。

3.1 ISEmpty函數(shù)

IsEmpty返回一個指示是否已初始化變量的布爾值。

語法:IsEmpty(expression)

expression:必需的,參數(shù)是一個包含數(shù)值或字符串表達(dá)式的Variant 。 但是, 由于IsEmpty用于確定是否初始化了各個變量, 因此_表達(dá)式_參數(shù)通常是單個變量名稱。

備注

IsEmpty 在變量未初始化或顯式設(shè)置為 Empty 時返回 True;否則,返回 False。 如果 expression 包含多個變量,則始終返回 False。 IsEmpty 僅返回變量的有用信息。此示例使用 IsEmpty 函數(shù)確定是否已初始化變量。

Dim MyVar, MyCheck
	MyCheck = IsEmpty(MyVar)    ' 返回值為True'
	MyVar = Null    			' 給MyVar賦值為空值'
	MyCheck = IsEmpty(MyVar)    ' 初始變化量已發(fā)生變化,返回值為False'

	MyVar = Empty    			' 將關(guān)鍵字 Empty 賦予 MyVar 變量'
	MyCheck = IsEmpty(MyVar)    ' 返回值為True'

4、Nothing

Nothing相當(dāng)于Object變量中的空值,指向于空對象的引用,用于取消對象變量與實際對象的關(guān)聯(lián)。 使用Set 語句可將Nothing分配給對象變量。 例如:

Set MyObject = Nothing 

多個對象變量可引用相同的實際對象。 在將 Nothing 分配給一個對象變量后,該變量將不再引用實際對象。

未初始化的Object變量為Nothing;未傳入函數(shù)的Object為Nothing。判斷一個變量是否為Nothing使用 is Nothing表達(dá)式。

同時,Nothing還有另外一個用途,就是把所有指向某一個對象的Object變量賦值為Nothing可以銷毀此對象節(jié)省內(nèi)存空間。

4.1 IsNothing 與 Is Nothing的區(qū)別

IsNothing語法:IsNothing(Object)
Is Nothing語法:Object Is Nothing

A. IsNothing能給任何類型值的對象賦值nothing,但這可能出現(xiàn)Bug

IsNothing(Object)表示所有類型(括值類型)的對象都賦值為nothing,但是值類型不能為nothing,只能是0

Dim i As Integer
If IsNothing(i) Then	'使用IsNothing,代碼可以編譯和運(yùn)行 額。。。'
   ' Do something 
End If
Dim i As Integer		'使用Is Nothing,代碼不能運(yùn)行,編譯器會提出錯誤'
If i Is Nothing Then	'Is不接受類型為Integer的操作,必須是引用類型或可空類型'
    '  Do something 	
End If

B. 可讀性來說Is Nothing更勝一籌

  • IsNothing的否定語句是:Not IsNothing(object)
  • Is Nothing的否定語句是:Not object Is Nothing

C. IsNothing(Object)實際上就是是Microsoft.VisualBasic.dll的一部分。(這句話代表什么意思呢)

5、vbNullString

vbNullString是一個String類型的常量,表示一個empty字符串。它與空白字符串"“不同,表示什么也沒有的字符串(nothing string)。

對于許多場合,它被當(dāng)作一個empty字符串”"處理,真正使用它的目的是傳遞null參數(shù)給庫函數(shù),主要是用于調(diào)用外部的動態(tài)鏈接庫程序時使用(也就是API函數(shù))。

字符串是由兩部分組成:一個指針和一個Unicode字符數(shù)組
vbNullString就是一個只有第一部分而沒有第二部分的字符串

Dim temp As String
'這個時候temp還沒有附值,只是定義了類型,就是說還沒有真正占用內(nèi)存,地址就是0'
'這時候temp就等于vbNullString'

temp=""	
'把""賦值給temp,盡管等于空字符串,但是已經(jīng)占用了內(nèi)存,地址就發(fā)生了變化'

6、 零長度字符、空字符、vbNull、vbNullChar、vbNullString的區(qū)別

不過很奇怪的是vbNullString=""這個表達(dá)式為True.

零長度字符是指””,
空字符是指ASCII 中字符編碼為0的字符,即Null字符。

在vba內(nèi)部還定義了很多常量,其中有三個是含有Nul的的常量,它們分別是vbNull、vbNullChar、vbNullString。

通過在VBA編輯環(huán)境中按下F2快捷鍵分別搜索查詢以上三個常量可以得知:

Const vbNull = 1
Const vbNullChar = “”
Const vbNullString = “”

其中vbNull=1可以很好的理解,而vbNullChar 和vbNullString 常量定義都等于零長度字符,讓人有點(diǎn)摸不著頭腦。繼續(xù)查找MSDN中的官方文檔,可以得知:

vbNullChar=chr(0),指的是一個字符,這個字符的字符編碼為0,即等于ASCII表中的第一個字符,Null字符。
vbNullString 指的是一個字符串,它不同于零長度字符串,主要是用于調(diào)用外部的動態(tài)鏈接庫程序時使用(也就是API函數(shù))。

那vbNullChar是否等于零長度字符呢?也即vbNullChar是否按照常量的定義等于””?可以使用如下代碼測試:

Sub QQ1722187970()
Dim str1 As String
    str1 = ""				'零長度字符的Len返回0'
    Debug.Print Len(str1)	'Len(vbNullChar)返回1'
    Debug.Print Len(vbNullChar)		'返回False'
    Debug.Print str1 = vbNullChar
End Sub

也就是vbNullChar不等于零長度字符。

再根據(jù)什么是BSTR數(shù)據(jù)類型一文,我們知道在vba中字符串變量存儲的是字符串的第一個字符的內(nèi)存地址,而實際的字符串是以BSTR類型存儲的,BSRT類型是個復(fù)合數(shù)據(jù)類型,它由4個字節(jié)(字符串的字節(jié)長度,不含字符串結(jié)束符)+實際字符串+字符串結(jié)束符組成。

根據(jù)代碼測試可以得知:

字符串變量|字符串長度不包含字符串結(jié)束符,以字節(jié)為單位)|第1個字節(jié)|第2個字節(jié)|第3個字節(jié)|第4個字節(jié)
-|-|-|-|-|-|-|-
str1=””|0|Null字符(字符串結(jié)束符)|Null字符(字符串結(jié)束符)|未使用|未使用
str1=vbNullChar|2|Null字符|Null字符|Null字符(字符串結(jié)束符)|未使用
str1=Chr(0)|2|Null字符|Null字符|Null字符(字符串結(jié)束符)|未使用

而vbNullString則一般用在調(diào)用外部api函數(shù)時使用,如果直接賦值給字符串變量則會導(dǎo)致excel重啟。

根據(jù)以上的知識,現(xiàn)總結(jié)如下:

空字符=vbNullChar=chr(0)

vbnull=1

零長度字符即不等于vbNullChar也不等于vbNullString。

到此這篇關(guān)于VB中判斷空的幾種方法(Null, Missing, Empty, Nothing, vbNullString)的文章就介紹到這了,更多相關(guān)VB 判斷空內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論