アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。

VB6.0で開発していたプログラムをVB.NETに変更することになりました。
そこで、以下の所で困っています。
VB6.0で
  If IsNull(T_RYOSYU!cnt) = True Or T_RYOSYU!cnt = 0 Then
と書いていた箇所をVB.NETで
  If IsDBNull(T_RYOSYU.Fields("cnt").Value) = True Or T_RYOSYU.Fields("cnt").Value = 0 Then
と変更しました。

このプログラムでT_RYOSYU.Fields("cnt").ValueがNullのとき、エラーが発生しました。
原因はOrの後で、Nullと0を=で比較していたからなのですが、
VB6.0の場合はNullでもそのようなエラーは発生しませんでした。
OrをOrElseに変更することで、Nullの場合には後ろの式は判定されなくなったので、VB.NET側でも動くようになりました。

VB6.0の場合はNullと0の比較が出来たということでしょうか?
それとも、VB6.0の場合はOrの前が真の場合、後ろは判定されないのでしょうか?

よろしくお願いします。

A 回答 (2件)

>VB6.0の場合はOrの前が真の場合、後ろは判定されないのでしょうか?


そんなことはありません。
必ず後ろも比較されます。

>VB6.0の場合はNullと0の比較が出来たということでしょうか?
If 0 = Null Then
MsgBox ("にゃー")
End If
はVBAで試したところエラーにはなりませんでした、ただメッセージは出ませんでした。
If Not 0 = Null Then
MsgBox ("にゃー")
End If

If 0 <> Null Then
MsgBox ("にゃー")
End If
メッセージは出ませんでした。

結果としては
比較は行われる。
エラーは起きない。
Nullは0でも0以外でもない。(特別?)
    • good
    • 0
この回答へのお礼

わざわざ試していただいてありがとうございます。
実際試していただいた結果なので、かなり参考になります。
ありがとうございました!

お礼日時:2009/05/19 19:01

VB.NETのヘルプで「Null値の反映」を見てください。


VB6.0の場合、Null 値を含む式はすべて式自体が Null 値となり、偽 (False) と評価されます。
VB.NETの場合は、Null値に対する式はエラー(型の不一致)になります。

【ヘルプから抜粋】
以前のバージョンの Visual Basic では、NULL 値の反映がサポートされています。
NULL 値の反映は、VB.NET ではサポートされていません。
NULL 値の反映は、式で NULL が使用されている場合に、式の結果自体が Null になるという前提を支えるものです。
VB6.0 と VB.NET の両方との互換性を持つためには、Null 値の反映を使用せずに、Null をテストするコードを常に記述する必要があります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ヘルプに書いてあるんですね。
調査不足で申し訳ありません。

お礼日時:2009/05/19 19:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A