MS-AccessでYes/No型項目をコンボボックスにすると不思議なことが
あるMS-Accessのシステムのバージョンアップで、「あり」と「なし」を値とする項目が必要になったので、テーブルに当該の項目をYes/No型として追加しました。
そして、その値を設定するフォームを作成して動作確認したところ、・・・
コンピュータは 何かやってるんですが、フォーム上の表示では空白にしかならないんです。
下図は、この事象の調査のためにいろいろやってみたものです。「対象の有無」とあるコンボボックスがその項目だと思ってください。
ここでコンボボックスをクリックしてドロップダウンさせると、「あり」と「なし」が表示されます。
ここで、「あり」を選択しても、コンボボックスの表示は空白のままなんです。
これが「不思議なこと」とタイトルで言っていることです。
よくよく目を凝らして、フォームの左端のレコードセレクタを見ると、鉛筆マークになっている。つまり、何かが変わったということです。
そこで、テーブルの内容がどう変わったのか確認してみました。
なんと!、値が「-1」になってるんです。
「True」と「False」でも、「Yes」と「No」でもなく、「-1」と「0」なんですね。
この項目のルックアップを確認すると、「True」と「False」にしていました。
そこで、「-1」と「0」に直しました。
そして、テーブルの内容を初期値に戻してフォームを表示してみると、下図の通り。目的通りの表示です。
コンボボックスをドロップダウンしたときの表示はちゃんと現在の値に対応したところ:「なし」が選択され、「あり」を選択の結果も目的通りの結果でした。
どうも、コンボボックスの値集合ソースでは、すべて文字列として処理されるみたいです。だから「True」と書くと「"True"」という文字列として処理されてしまう。そして、テーブル上の「-1」とは一致しないので空白表示になるようです。ところが、「あり」を選択して「"True"」を設定させようとすると、「"True"」を「-1」に変換してくれるわけです。「Yes」でも「-1」に変換してくれますが、「はい」だとエラーになります。この中途半端さが、いかにもMS-Accessらしいですね。
という訳で、「Yes/No型の項目をコンボボックスで処理するときは、『-1』と『0』にすべし」と覚えておこう。