VB6中從數據庫中取出欄位值進行操作,若欄位值為Null,則必須小心處理,否則極易導致程序出錯退出。
通常我們從recordset中取出欄位值采用Fields方法,加上欄位名稱,如
rsMoney.Fields("SecondPlate")
以上Fields方法返回的是Variant類型,Variant類型允許為Null,但我們通常將欄位值當做string或int類型來使用,如賦值、比較,就會出錯!
1,Null賦值操作
如以下代碼:
1) Dim ss As String
2) Dim aa As Variant
3) ss = "/~2018-12-10 13:40:33,45.50,45.50"
4) aa = Null '不會出錯
5) ss = IIf(IsNull(aa), "", aa) '不會出錯
6) ss = aa '出錯
7) ss = aa & "" '不會出錯
ss為字符串類型,aa為Variant類型,
- Variant類型變量可以賦值為Null,所以第4行不會出錯
- 第5行在將Null賦值給字符串變量前,先用isNull函數判斷是否為Null,用IIF函數將Null轉換為空字符串再賦值給ss,所以不會出錯
- 第6行直接將Null賦值給字符串變量,所以出錯
- 第7行在將Null賦值給字符串變量前,先與空字符串連接,右側運算結果為空字符串,所以不會出錯
2,Null比較操作
Dim ss As String
Dim aa As Variant
ss = ""
aa = Null '不會出錯
If ss = aa Then
Form1.Text1.Text = "1!"
Else
If ss > aa Then
Form1.Text1.Text = "2!"
Else
If ss < aa Then
Form1.Text1.Text = "3!"
Else
Form1.Text1.Text = "4!"
End If
End If
End If
以上代碼運行結果為4!
因為與Null進行比較,無論是大於還是小於還是等於,其結果全部為False。
3,數據庫欄位值可能為Null時,代碼操作注意事項
綜上,建議如下:
- 在VB中取出記錄欄位值在進行賦值前,應進行判斷或轉換。建議賦值前與空字符串進行連接操作,比較簡明。即:
Dim ss As String
Ss = rsMoney.Fields("SecondPlate") & ""
- 記錄欄位值可能為Null時,不能等同於空字符串進行比較操作。可能為Null的欄位值,在進行比較操作前應先進行明確的判斷或轉換,以免程序產生bug。