2009年3月22日日曜日

Access でルックアップの設定 - テーブル定義とフォームにおけるコンボボックスにおいて

1. テーブル定義とリレーションシップの設定

「人」と「性別」テーブルがある。

「人」テーブルの「性別id」が、「性別」テーブルの「id」を参照する。

090322-003

「性別」テーブルの内容は、以下の通り。

090322-002

id はシステムが自動的に割り当てる数値。CD は性別コード。 id は不変とし、性別コードはユーザが変更可能な値とする。

ルックアップを利用しないで、「人」テーブルにデータを入力する場合、「人」テーブルの「性別id」に、「性別」テーブルの「id」に存在する値を、直接入力しなければならない。

090322-004

 

2. テーブルにおけるルックアップの設定

ルックアップの機能を利用しないと、性別を入力しにくい。

「人」テーブルにおいて、「性別id」フィールドの「ルックアップ」を設定する。

  1. 「表示コントロール」を「コンボボックス」に変更。
  2. 値集合ソース」をリレーションを設定した「性別」テーブルにする。
  3. 連結列」を 1 に設定。理由は、「性別」テーブルの id が、1 列目に存在するため。
  4. 「列数」を 3 に設定。。この値が、「人」テーブルにおいて「性別id」を入力するときのコンボボックスの列数に対応する。
  5. 「列幅」は、上記の「列数」で表示した列を表示する長さ。
  6. 「リスト幅」は、上記の「列幅」の合計。

よく忘れるのは「連結列」の意味。本来、RDB の列に順序はない。

090322-006-2

ルックアップの設定をした場合、「性別コード」を入力するとき、「性別の名称」を確認しながら入力できる。ただし、「人」テーブルのデータを一覧するとき、性別id には性別コードではなくて id が表示されるのでわかりずらい。

そこで、「列幅」の先頭を 0 cm に設定し、全体の「リスト幅」を 4 cm に変更する。

090322-008-2

これにより id が表示されなくなり、性別コードが先頭に見える。テーブルの内容を一覧したとき、性別コードで表示されるため、データの内容を把握しやすい。

 

3. クエリをルックアップ

上記の例では、ルックアップする先が「テーブル」だった。(「値集合タイプ」がテーブル)。

ルックアップ先は、「連結列」、つまり順序で指定している。このため、ルックアップ先のテーブルの列の順序を変更すると、影響を与える。

そのため、「性別」に対するクエリ (q_性別) を作成しておき、「値集合タイプ」でクエリを参照する方が良い。

090322-011

「性別id」のルックアップの設定は、

  1. 「値集合ソース」をテーブルからクエリに変更
  2. 「連結列」を 3 に設定。 (クエリにおいて、id を 3 列目にしたため。)
  3. 「列幅」を 1cm, 3cm に変更。(3 列目の id の設定は不要。)

090322-012

これにより、元のテーブルを変更しても、ルックアップの設定に影響が及ばなくなる。

 

4. フォームのコンボボックスにおけるルックアップの設定

追記 (2010.1.16) : フォームのコンボボックスにおけるルックアップの設定も、テーブルのときと同様に考えればよい。

コンボボックスにしたいコントロールを

  • 「右クリック > コントロールの種類の変更 > コンボボックス

を選択。

 

ルックアップするソースの設定
  1. コントロールの「プロパティ > データ」で 値集合タイプを「テーブル/クエリ
  2. 値集合ソースで、ルックアップしたいテーブル、または、クエリを選択。
  3. ルックアップしたいテーブル、または、クエリの主キーが1 行目に設定されている場合、連結列を `1’ とする。

img01-16-2010[2].png

 

コンボボックスの表示の設定

表示されるコンボボックスの列を、以下のようにしたいとする。

ID, CD, 名称

ただし、主キーである ID はユーザに見えないようにしたい。

先ほどのコンボボックスのプロパティにおいて、書式タブを選択。

  1. 列数を 3
  2. 列幅で 3 列それぞれの長さを設定。ただし、1 列名の ID が表示されないように 0 とする。ここでは一々単位である cm を入力する必要はない。
  3. リスト幅は上記で設定した値の合計。

img01-16-2010[1].png

 

参考

 

関連記事