access空值Null的常見錯誤

2019-09-30 16:29:00
tmtony8
原創
478

在access中,遇到Null時的常見問題:

1:條件為空

如果在查詢的字段下輸入條件,則它返回匹配的記錄。如果記錄中有Null值記錄呢?

如在個人信息查詢中, 輸入“張三”可以篩選他的記錄。

 “張三”

輸入Not "張三",可以篩選出不是“張三”的非空記錄

 NOT “張三”

顯然這結果是這兩個查詢都不包含姓名為Null的記錄


解決辦法:

指定Null對于上面的第二個查詢,要滿足不是“張三”的所有記錄,條件必須是:

Is Null Or Not "張三"



2:表達式中有Null

涉及Null的計算通常會導致空值。

如在文本框的ControlSource屬性中輸入如下表達式,顯示支付的金額:

 = [單價]*[數量]

如果數量為NUll,因此文本框什么也不顯示。


解決辦法

使用Nz()函數為Null指定一個值:

 = Nz([單價],0)-Nz([數量],0)


3:外鍵為空

Access中主鍵是不能有空值的,但是卻允許外鍵出現空值。在大多數情況下,我們應該阻止這種可能使記錄孤立的情況出現。

如在商品訂購中,在訂單表中有訂單編號,在訂單明細中,訂單編號是外鍵,access是允許外鍵為空的。

由于訂單明細中的這些記錄與主表中的任何記錄都不匹配,因此這些孤立的記錄將不再顯示。


解決辦法

在表設計視圖中,將外鍵字段的必需屬性設置為Yes,除非明確希望在外鍵中使用Null。



4:空值和非變量

在VBA中,唯一可以包含Null的數據類型是Variant。當字段的值分配給非變量時,都必須考慮該字段可能為空的可能性。

如下面的代碼:

Dim strName as String
Dim lngID As Long
strName = Me.MiddleName
lngID = Me.ClientID

當MiddleName字段包含Null時,會將Null分配給字符串,此時會產生error

同樣,將ClientID值分配給數字變量可能會導致錯誤。


解決辦法

(a)如果需要使用空值,請使用Variant數據類型。

(b)使用Nz()函數指定要用于Null的值。例如:

 strName = Nz(Me.MiddleName,“”) lngID = Nz(Me.ClientID,0)


5:比較為空

如表達式:

If [fname] = Null Then
這又是Null的一個錯誤:結果既不是True也不是False,而是Null。


解決辦法

使用IsNull()函數:

If IsNull([fname]) Then


6:忘記Null既不是True也不是False。

這兩個結構是否做同樣的工作?

(a)	If [fname] = "王" Then
	    MsgBox "It's a 王"
	Else
	    MsgBox "It's not a Smith"
	End If

(b)	If [fname] <> "王" Then
	    MsgBox "It's not a 王"
	Else
	    MsgBox "It's a 王"
	End If

當“姓名”為Null時,這兩個代碼相互矛盾在這兩種情況下,If失敗,因此執行Else,從而導致出現矛盾的消息。


解決辦法

(a)處理比較的所有三個結果- 正確,錯誤和無效

If [fname] = "王" Then
	    MsgBox "It's a 王"
	ElseIf [fname] <> "王" Then
	    MsgBox "It's not a 王"
	Else
	    MsgBox "We don't know if it's a 王"
	End If


(b)在某些情況下,Nz()函數可讓您一起處理兩種情況。例如,以相同的方式處理Null和零長度的字符串:

If Len(Nz([fname],"")) = 0 Then

分享
北京十一选五基本走势