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


DELPHER  2006-07-19 15:27:39  No: 22690  IP: 192.*.*.*

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

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

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

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

編集 削除
HOta  2006-07-19 20:02:01  No: 22691  IP: 192.*.*.*

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

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

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

等ですかね。

編集 削除
DELPHER  2006-07-19 20:19:29  No: 22692  IP: 192.*.*.*

HOta様

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

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

編集 削除
HOta  2006-07-20 16:39:43  No: 22693  IP: 192.*.*.*

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

編集 削除
DELPHER  2006-07-20 17:29:12  No: 22694  IP: 192.*.*.*

HOta様

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

編集 削除