選択後のコンボボックスに複数の列の値を表示させる

 コンボボックスでは選択中に複数の列の値を表示しておくことができますが、選択後に表示しておける値は基本的に1つだけです。これを解決し、選択後も複数の列の値を表示しておく方法についてです。
 ただ、ちょっとタイトルに偽りありという感じの解決法ですし、そもそも選択後も複数の列を表示させたいという場合はリストボックスを使った方が簡単です。また、Columnプロパティを用いて各列の値をテキストボックスに転記するという方法も考えられますので、適当な方法を選択してください。

f:id:accs2014:20161220233510p:plain:right:w400

 右の例のコンボボックスでは既存のテーブルを値集合ソースとしています(列名はそれぞれ「駅コード」「駅名」「略号」「所在自治体」)。プロパティの列数は4、連結列は1(駅コード)とし、すべての列の幅を0より大きい値としています。


f:id:accs2014:20161220233509p:plain:right:w400

 選んでいるうちは4つの列の値が表示されてわかりやすかったですが、選び終わった後では1列目の駅コードしか表示されません。
 1列目の幅を0とすることによって駅名を表示させる(しかし取得する値は駅コード)、ということはできますが、基本的に選択後に複数の値を表示することはできません。


f:id:accs2014:20161220233508p:plain:right:w400

 そこでですが、選択後においてもさまざまな情報を表示しておきたい場合は、コンボボックスの値集合ソースにSQLを書き込みます。
 例として次のように記入します。

SELECT 駅コード, 駅コード & " | " & 駅名 & " | " & 略号 & " | " & 所在自治体 FROM 駅テーブル ORDER BY 駅コード; 

 要するに1つの列しか表示しておけないのだから、さまざまな情報を1つの列(この例では2列目)に詰め込んでしまおうということです。
 このSQLで取得できる列の数は2ですので、プロパティの列数も2とします。そして、1列目の幅を0とします。連結列は1(駅コード)のままです。これにより1列目(駅コード)は見えなくなりますが、選択により取得されるのはやはり駅コードの値です。


f:id:accs2014:20161220233507p:plain:right:w400

 改めてデータシートビューで値を選択します。
 表示はちょっといびつになりましたが…


f:id:accs2014:20161220233506p:plain:right:w400

 選択後もそれぞれの値が表示として残ります。
 なお、SQLでは単に文字列をつなぐだけでなく関数も利用できますので、生年月日から年齢を求めて併記するといった応用も考えられます。