2012年2月17日金曜日

[ACCESS→SQLServer]"YES/No"型と"bit”型(修正版)

ACCESSの"YES/No"型をSQLServerに移管するときは"bit"型を採用します。

"YES/No"型では0(No)と0以外=-1(Yes)で扱われますが
"bit"型は0(False)と0以外=1(True)で扱われます。

この"bit"型、閲覧モードでみるとFalseやTrueで表示されますし、
実際プログラムを組む際はFalseやTrueで指定しないと構文エラーになるそうな。

パッと見は【0と-1データ】が【0と1データ】に変換されるので調整が必要??とか思いそうだが
bit型はなかなかうまくできています。

「0以外」という所がミソで、
今まで通り-1(Yes)を入力しても、bit型は1(True)として処理してくれます(0以外だから)。
もちろん、True,Falseで入力すれば間違いはないんだけど。
と、いうことで入力処理は問題なさそう。

しかも、ACCESSでリンクテーブルを貼ってSQLServerを見た場合、
1(True)→-1(Yes)として表示されるではないか。従来に合わせて。


つまり、ACCESSモジュール部分で、
MySet!フラグ = -1
という表記がしてあるのは問題ないんです。

と、いうことで出力判定処理も問題なさそう。



あとの問題はデータを読み込むときのSQL文…
どうやら以下の現象になるみたい。(追記)


ACCESSから作成するSQL文を  ~WHERE  フラグ = True " としている


ACCESSから作成するSQL文を  ~WHERE  フラグ = Yes " としている
(SQLServerに投げるときにTrueに変換してくれている模様。でも今時キモチワルイ)


×ACCESSから作成するSQL文を  ~WHERE  フラグ = -1 " としている
(ACCESSでは-1と出てる癖に!
 実際にSQLServerにSQL文投げるときは1(てかTrue)にする必要があるみたい)




SQL文の部分はやはり修正する必要ありです。




入力値 ACCESS SQLServer
-1 -1(YES) 1(True)
0 0(No) 0(False)
1 -1(Yes) 1(True)
True -1(Yes) 1(True)
False 0(No) 0(False)
Yes -1(Yes) #Err
No 0(No) #Err

出力値 ACCESS表示 SQLServer表示
1(True) -1(YES) 1(True)
0(False) 0(No) 0(False)



0 件のコメント:

コメントを投稿