#711 ユニオンクエリでコンボボックスの先頭に空の項目を付ける方法 クエリ

HTMLの「SELECT」タグで作られたセレクトボックスとは異なり、Accessのコンボボックスでは、リストからの選択だけでなく直接キーインしてデータ入力できるのが特徴です。またその欄を空欄にしたいときには、入力されたデータをDeleteキーなどで削除すれば済みます。

一方、その先頭に空のリスト項目を設け、空欄にしたいときもリストから選択できるようにしたいといった場合、HTMLの「SELECT」タグであればその項目を単純に追加すれば済みますが、コンボボックスの場合、その多くはテーブルと連結することが多いので、そのテーブル自体に空のレコードを設けなければならず何かと不都合が生じます。

そのようなとき、テーブルには空のレコードを持たせることなく、ユニオンクエリを使ってそのようなリスト項目を付ける方法です。


ここでは下図のような「mtbl保管場所マスタ」テーブルのデータをコンボボックスのドロップダウンリストに表示させるものとします。


  1. まず空のクエリを新規作成するか、あるいはフォームにコンボボックスを配置して、プロパティシートの「値集合ソース」の欄の右端にある[...]をクリックしてクエリビルダ―を起動します。






  2. リボンより[SQL]ボタンをクリックしてSQLビューに切り替えます。

  3. 次のようなユニオンクエリのSQL文を直接入力します。

    SELECT TOP 1 "" AS 保管場所コード, "" AS 保管場所名 FROM mtbl保管場所マスタ
    UNION
    SELECT 保管場所コード, 保管場所名 FROM mtbl保管場所マスタ



    ※ここで確認のためにデータシートビューを開くと下図のような結果となります。


  4. 単独のクエリとして作った場合は、それを任意の名前で保存したあと、フォームの所定のコンボボックスの「値集合ソース」プロパティにそのクエリ名を指定します。フォームからクエリビルダ―で作った場合には、クエリビルダ―を閉じることで下図のようなメッセージが表示されますので、[はい]をクリックします。


  5. あとは任意ですが、コンボボックスの「列数」や「列幅」プロパティを設定して、ドロップダウンさせたときにリストとして表示するフィールド数やその列幅を指定します(ここでは例としてそれぞれ「2」、「1.5cm」を指定)。

  6. これでフォームを実行すると下図のようなドロップダウンリストが表示されます。


【補足】
ユニオンクエリにおいて先頭に空データを設定するのは下記のようなSQLでもできるように思えます。

    SELECT "" AS 保管場所コード, "" AS 保管場所名
    UNION
    SELECT 保管場所コード, 保管場所名 FROM mtbl保管場所マスタ

しかしこのSQL文だと最初のSELECTにFROM句がない、つまりテーブル(あるいはクエリ)が指定されていないため、『クエリの入力には、1つ以上のテーブルまたはクエリが必要です。』というエラーになってしまいます。
そのため、上記では最初のSELECT文にも「FROM mtbl保管場所マスタ」を付けるとともに、そのテーブルの全レコードが取り出されないよう「TOP 1」を付けています

※実際には「TOP 1」がなくても『UNION』であれば重複するレコードは除外されて想定通りの動きになりますが、『UNION ALL』とした場合はレコードの数だけ空のリストが表示されてしまいます。ここでもどちらでもよいように念のため「TOP 1」を付けています。

※また状況によって必要であれば、上記SQL文の最後にORDER BYで並び順を設定することもあるかもしれません。

| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved