BDEをMDBに移行時BOOL型がNULLのセット方法


DELPHER  2006-07-20 00:27:39  No: 22690

C#でBDE(Delphi)のデータをMDBに移行しようと思うのですが、
BOOL型の値がNULLのとき、TRUEでセットされてしまいます。
(MDBではYesNo型)

ODBC接続でSQL(SELECT 〜 FROM ...)を投げて、返ってきた
BOOL型の値がNULLのときTRUEになります。これをFALSEでセットしたいのですが、良い方法はありますでしょうか?

SELECT文でISNULL関数を使用し、NULLならFALSEをセットしようと思ったのですが無理でした。

すみませんが、よろしくお願いします。


HOta  2006-07-20 05:02:01  No: 22691

いろいろ方法はあります。

プログラムで判断する。
if DataSet1.FieldByName('論理型').isNull then
    DataSet2.FieldByName('YesNo型').AsBoolean := false
else
    DataSet2.FieldByName('YesNo型').AsBoolean :=
      DataSet1.FieldByName('論理型').AsBoolean;

TQueryの計算項目で、同様な変換を行う。

等ですかね。


DELPHER  2006-07-20 05:19:29  No: 22692

HOta様

ご返事ありがとうございます。
データ取得時NULLが入っていれば
いろいろと方法はあると思うのですが、
BDEデータをSQLで取得時、DataTableには
どうもNULLではなくTRUEが入ってるようなんです。
C#でFALSE(値=0)ではない場合はTRUE(値=-1)とみなされているのでは?
と考えています。
方法が悪いのかわかりませんが、どうしたらよいか分かりかねております。

また何かご存知のことがあれば教えてください。
よろしくお願いします。


HOta  2006-07-21 01:39:43  No: 22693

環境は何でしょうか?
当方で、D7+BDEで適当なテーブルを作り、Queryで選択したところ、
FieldByName('論理型').isNullでNULLのチェックはできています。


DELPHER  2006-07-21 02:29:12  No: 22694

HOta様

データを確認したところMDBにほうにはFalseがセットされていました。
BDEのデータをSELECT文でISNULL関数が使えなかったので
NULLが入っていないと思っていましたが、
どうやらそのまま入っていたようです。
問題なかったということで大変お騒がせしました。
HOta様調べていただきありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加