Access2010でテキストボックスを使う場合、Null値は要注意

最近はAccess2010で開発する事が多くなってきましたが他のバージョンで作ったコードをそのまま使うと一部問題が発生する箇所がありましたのでメモも兼ねてここに掲載します。

以前は検索フォームのコーディングの際、テキストボックスの値を参照して空白では無い場合、SQLにWHEREを指定してソースコードを書き換える場合、以下のような使い方をしてきました。

if Not IsNull(Me!TextBox1) Then
    strSQL = strSQL & " WHERE ID = " & Me!TextBox1 & " "
End If

しかし、このIsNullを使うと環境によっては正常に動作しない場合がありNull値を判別せず、そのままSQLを出力してしまいエラーが発生します。しかも同じ用法のフォームでも正常に動作するのもあったりと非常に不安定。
※なぜ環境によって動作が異なるかまだ調査中。

調べてみるとAccess2010ではテキストボックスにNull値は原則設定できず、使う場合にはコントロールの規定値にNullをセットする必要があるとの事。

VBAでの対応方法

という事で今回は規定値の設定による対応は行わず、コードで対応する事にしました。※以下の内容に変更して回避。

If Nz(Me!TextBox1, "") <> "" Then
    strSQL = strSQL & " WHERE ID = " & Me!TextBox1 & " "
End If

上記のコードはNz関数を利用してNull値の場合は空白””(長さ0の文字)を代入する事で対応しています。

ちなみに参考までNullと””の違いは以下の通りです。

  • Null ・・・ 一度もデータが入っていない状態
  • “”(長さ0の文字) ・・・ 入力後にデータを削除した状態

以上、Access2010でNull値を使う場合の注意点でした。