- ベストアンサー
VC++ (ADO) で Access の Yes/No 型の Select 文
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_ADO.html を参考にして VC++ 2005 .NET (ADO 接続)にて Access を操作しています。 Select 文にて Access の Yes/No 型を判定したいのですが、WHERE 句を どのように書けばよいのかわかりません。 WHERE field_name = Yes (または 'Yes', 1 など) で書いてみているのですがうまくいきません。 どのように記述すればよいのかご存知の方がいらっしゃいましたらご教示 願えないでしょうか。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Yes/No 型という名前が紛らわしいですが、 SQL文で扱う場合の値は True / False です。 Accessでの書式は、True/Flase、Yes/No、On/Offが 選択でき、表示上 Yes/No にする事も可能です。 しかし、「書式」は見た目だけの問題で、 内容は常に True / False で判定できます。 -1 / 0 でのチェックも、問題ないかもしれませんが、 わざわざ使う必要はないと思います。 ----Yesの判定---- WHERE field_name = True もしくは、単に下記でもOK。 WHERE field_name ----Noの判定---- WHERE field_name = False もしくは、Notを使い下記。 WHERE NOT field_name
その他の回答 (1)
ただの工場勤めの工員でプログラマではありませんので参考程度にして下さい。 tab1: ID__Hantei 1___Yes 2___No [イミディエイト] ? DBSelect("SELECT * FROM tab1 WHERE Hantei=-1") 1;True;2;True; ? DBSelect2("SELECT * FROM tab1 WHERE Hantei=-1") 1;True; 上の DBSelct関数は ADO、下のは DAOです。 確かに、ADOでは Yes/No型の列の値を正しく認識しませんでした。 全て[Yes]と認識してしまいました。 [イミディエイト] ? DBSelect("SELECT * FROM tab1 WHERE Hantei=-1") 1;True; ? DBSelect("SELECT * FROM tab1") 1;True;2;False; だが、今は、このように正しく認識しだしました。 [イミディエイト] ? CnnExecute("UPDATE tab1 SET Hantei=0 WHERE ID=2") True もしやと思って、ADOで tab1 を更新してみました。 そうするとこの不具合が解消しました。 これは、実にありえない話です。 その後は、テーブルの列を削除・追加しても認識されています。 全く、狐につままれたような感じです。 こ、これは一体、な、なんでしょうかね????。
お礼
早速の回答ありがとうございます。 Yes は -1 と記述するんですね。(No は 0 ですよね?) まだざっと確認しただけなのですが、うまく判定できているようです。 回答にあった、 >だが、今は、このように正しく認識しだしました。 となったタイミングがわからないのですが、Access テーブルと Access ファイルの同期のタイミングなどが関係ありそうな気がしますね。 他の方も追加情報をくださるかもしれないので、もう数日してから質問を 締めさせていただきます。 助かりました!ありがとうございます。
お礼
>Yes/No 型という名前が紛らわしいですが、 >SQL文で扱う場合の値は True / False です。 なるほど!そういうことだったんですね。 丁寧な説明もしてくださり、ありがとうございます。 とてもわかりやすいです。 問題が解決できましたので、これにて締め切らせていただきます。 お二人ともありがとうございました。