2008年2月25日月曜日

OpenOffice Base で外部キーが設定してあるフィールドの値をリストから選択する

1. データベースの定義

OpenOffice Base で、以下のようなデータベースを作成したい。

保育園で、来年のクラス編成を考えている。クラスには、

  1. 「ほし」
  2. 「うめ」
  3. 「まつ」

の 3 つがある。園児をクラスに割り振りたい。

080225-016

 

テーブルの定義

「クラス」テーブルを定義した。

  • id : クラスを識別するための識別子。(主キー)
  • 名前 : クラスの名前

080225-003

「園児」テーブルを定義した。

  • id : 園児を識別するための識別子 (主キー)
  • 名前 : 園児の名前
  • クラス_id : 園児が所属するクラスを示す識別子 (外部キー)

080225-001

両テーブルとも、id はシステムが自動的につける。(後で作成するフォームでは、このフィールドをユーザが操作できないようにする。)

 

リレーションシップの設定

メインウィンドウのメニュー、 ツール > リレーションシップ で、園児の クラス_id とクラスの id との間に 参照整合性を設定する。

080225-004

 

2. セレクトボックスで表示するリストのためのクエリーを作成

「クラス」テーブルからクエリーを作成する。「名前」「id」の順に列を設定する。

「名前」が先頭に来ていることに注意。

080225-005

上記のクエリーを「クエリークラス」という名前で保存。

 

3. 入力フォームを作成

ウィザードを使用して、それぞれのテーブルに対してフォームを作成する。

「クラス」のフォームが作成できたら、「ほし」「うめ」「まつ」のクラスを入力する。

080225-007

「園児」から、ウィザードを使用して作成したのが以下のフォーム。

080225-008

「クラス_id」 の列をリストボックスに変更する。(デザインモードにおいて、「クラス_id」 の列で、右クリック > 置き換え > リストボックス を選択。)

080225-009

「クラス_id」の列の属性を表示させる。(「クラス_id」を右クリック > 列... を選択。)

080225-010

「データ」タブを表示する。

  • リスト内容の種類を「クエリー」にする。
  • リストの内容を、先ほど作成した「クエリークラス」にする。
  • 関連のあるフィールドが 「1」 であるのを確認する。

080225-011

列の名前を「クラス」にする。(「全般」タブのタイトルで変更。)

080225-012

クラスの入力において、リストを選択できるようになった。

080225-013

 

4. 表示するリストを変更する

50音順

リストで表示される内容を 50音順で表示されるようにしたい。(ただし、クラス名は、ひらがなしか入力されてないとする。)

  1. クエリークラスにおいて、「名前」の列の「並べ替え」を「昇順」にする。

080225-015

 

リストの順序をユーザが設定

クラス名のリストの順番を、ユーザが自由に設定、変更できるようにしたい。

  1. 「クラス」テーブルに、「順番」という列を「整数」型として追加する。
  2. 「クエリークラス」の最後の列に、上記の「順番」の列を追加し、「並べ替え」を昇順にする。
  3. 後は、「クラス」のフォームに「順番」の列を追加し、自分で値を設定する。

 

5. まとめ

A テーブルが B テーブルを参照しているとする。

  1. A テーブルのフォームにおいて、リストで表示する元になるクエリを作成する。
    • リストに表示したい属性を 1 列目、B テーブルのレコードを一意に決定する列を 2 列目に持ったクエリーを作成する。
  2. A テーブルのフォームにおいて、B テーブルを参照する値を入力するコントロールを、リストボックスにする。
  3. リストボックスの属性 > データ において...
    • リストの内容の種類を「クエリ」にする。
    • リストの内容を、上記で作成したクエリを指定する。
    • 関連のあるフィールドを、1 にする。( B テーブルを一意に決定する列を指している。)

 

参考