SQLサーバーとVB6(VBA)でのNULLの扱い

VB6,VBA,VBS,EXCEL,DOS,BAT,WSH,WORDの小技メモ

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ 燈明日記/ Perlノート/ 漢字起源/ yahoo

はじめに

本ページは、ウインドウズ系全般のティプスメモです。

そう、はじめはVB系のティプスメモだったのですが…いつの間にか、ウインドウズ系全般のティプスメモになってしまいました。

ちなみに、ティプス(Tips)とは、マニュアルに書かれていない技法や裏わざのことですが、本ページでは、私が経験してこれはと思ったノウハウのメモになっています。

尚、以下は本サイトの最新情報(ブログ)です。

それでは、本ページが何かのお役に立てれば幸いです。ごゆっくりご覧ください。

◆SQLサーバーとVB6(VBA)でのNULLの扱い

まず、DB上のNULLとは、値でも変数でもなく、何もない状態を云います。 具体的には、SQLサーバーのテーブルで、NOT NULL制約でない項目は、 文字列系項目(char,varchar等)でも数値系項目(int,decimal等)当然、何もない状態はNULLなのです。

つまり、SQLのWhere句でNULLを引っ掛けるときは、値でも変数でもないので比較述語(= NULL)は使えず、『IS NULL』を使います。 かりに、比較述語を使った場合は、適用結果は、ture でなく false でもなく必ず unknown になるとのことです。 したがって、比較述語(= NULL)ではNULLを判断できないのです。なので、『IS NULL』を使います。

さて、テーブルからSelect句でNULLを受けるVB6(VBA)側では、それをVariant型変数で受けます。

これは、テーブルの各項目に文字列系項目や数値系項目あり、VB6(VBA)側でも文字列系変数や数値系変数あるので、 各々それ毎に受ければよさそうですが、文字列系項目や数値系項目にNULLの状態が存在する可能性がある以上、 NULLの状態を保てない文字列系変数や数値系変数で受けることは出来ず、NULLの状態を保てるVariant型変数で受け取るしかないのです。

受け取ったNULLは、VB6(VBA)でも、値ではなく状態なので、比較述語(関係演算子)が使えず、IsNull関数を使います。

最後に、DBでの否定問合せ時のNULLの弊害について、面白いページありましたのでご紹介します。

NOT INのサブクエリで使用されるテーブルの選択列にNULLが存在する場合、SQL全体の結果は常に空になります。

とのことです。

おわりに

以下のページには、すべてのTIPSがあります。もしよろしければ、どうぞ!

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくVB-TIPS掲示板へご指摘ください。

人のよいところをどんどん見つけよう