VB5 與資料庫程式設計

每週一問: 挑戰您的 VB 功力 (資料庫篇, 98/03/08)


Q: 假設有某一「字串」型別的欄位其名稱是「Fieldx」,則以下的敘述通常是正確的:

    Dim S As String, rs As Recordset
    ' 假設 rs 是含有目前資料錄的 Recordset 物件
    S = rs("Fieldx")

但是當這個欄位沒有輸入資料時, 卻會產生錯誤, 該如何解決呢?

A: 由於 Fieldx 欄位中沒有資料, 所以 rs("Fieldx") 等於 Null, 在 VB 裡面, 如果我們把 Null 指定給「字串」型別的變數(如以上例子中的 S), 是不被接受的, 因此程式應修改如下:
    Dim S As String, rs As Recordset
    Dim X ' 宣告一個不定型型別的變數
    ' 假設 rs 是含有目前資料錄的 Recordset 物件
    X= rs("Fieldx")
    If IsNull(X) Then
        S = ""  ' Null 與 ""(空字串) 的意義並不相同
    Else
       S = X
    End If

03/15 補充說明:更精簡的解答

    以上程式利用 If 來判斷 Null, 必須多寫 5 行程式, 可讀性比較低, 以下則是更精簡的解決方案:

      S = "" & rs("Fieldx")

    因為當 rs("Fieldx") 不等於 Null 時, "" & rs("Fieldx") 等於 rs("Fieldx"), 而當 rs("Fieldx") 等於 Null 時, 則 "" & rs("Fieldx") 等於 ""。

以上解決方案由潘振聲先生提供, 特此致謝!