
いつもお世話になっております。
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の前が真の場合、後ろは判定されないのでしょうか?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
>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以外でもない。(特別?)
わざわざ試していただいてありがとうございます。
実際試していただいた結果なので、かなり参考になります。
ありがとうございました!
No.2
- 回答日時:
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 をテストするコードを常に記述する必要があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VB6でユーザー定義型がNothingかどうか調べるには?
Visual Basic(VBA)
-
VB6 配列を初期化したい
Visual Basic(VBA)
-
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
-
4
VB6.0のIsNull関数に相当するもの
Visual Basic(VBA)
-
5
【VB6.0】 あるフォームから他のフォームへ値を受け渡したい
Visual Basic(VBA)
-
6
VB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?
Visual Basic(VBA)
-
7
Spreadの選択行の取得について
Visual Basic(VBA)
-
8
CloseとDisposeの違い
Visual Basic(VBA)
-
9
SPREAD(GrapeCity)のセルにフォーカスを設定するにはどうしたらいいのでしょうか?
Visual Basic(VBA)
-
10
VBの「As String * 128」とは?
Visual Basic(VBA)
-
11
テキストボックスのvalueとtextの違い
Visual Basic(VBA)
-
12
VB6 開発環境のエディタに行番号を表示
Visual Basic(VBA)
-
13
frxファイルの役目
Visual Basic(VBA)
-
14
VBの画面サイズについて
Visual Basic(VBA)
-
15
VB.NET でのLaod/unLoad について
Visual Basic(VBA)
-
16
VS 2008(VB.NET)
Visual Basic(VBA)
-
17
VB6のListの使い方
Visual Basic(VBA)
-
18
VB6.0 のformat関数について
Visual Basic(VBA)
-
19
スプレットシートのGetTextについて。
Visual Basic(VBA)
-
20
コモンダイアログコントロールがコンポーネントにありません
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでfunctionを利用しようとし...
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
インポート時のエラー「データ...
-
ApplicationとWorksheetFunctio...
-
ACCESSで値を代入できないとは?
-
エクセル マクロ VBAでスケジュ...
-
String""から型'Double'への変...
-
VBA エクセル で FIND でのエラ...
-
【VBA】ワークブックを開く時に...
-
Filter関数を用いた結果、何も...
-
マクロで"#N/A"のエラー行を削...
-
Null 値の使い方が不正です と...
-
実行時エラー93 パターン文字...
-
オブジェクト型の変数にフォー...
-
Findプロパティを取得できません
-
mailstorehomeのエクスポートで...
-
UWSCでエラー発生時の対処法に...
-
ACCESS DAO で不要なテーブルの...
-
変数にするとエラーになる理由は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
String""から型'Double'への変...
-
【Access】Excelインポート時に...
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
インポート時のエラー「データ...
-
ACCESSで値を代入できないとは?
-
VBA エクセル で FIND でのエラ...
-
Filter関数を用いた結果、何も...
-
レコード登録時に「演算子があ...
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
【VBAエラー】Nextに対するFor...
-
実行時エラー 438 の解決策をお...
-
「実行時エラー '3167' レコー...
おすすめ情報