サブフォーム構築理論


サブフォームとは?

フォーム(入力専用画面)の中に別のフォームがあること。 以上。 ん?手抜きしすぎ?ではもう少し詳しく説明を・・・

サブフォームとは?(続き)

例えば次のような場合を思い浮かべていただきたい。
教官コード教官名学生コード学生名
1111塚田 伊助100福沢 祐一
110佐渡 誠
120天野 道雄
上記のように「一件のデータに複数の付属情報がつく場合」は どのようなフォームを作成するだろうか? おそらく多くの方は次のようなものを思い浮かべるだろう。
教官コード1111
教官名塚田 伊助
学生コード100
学生名福沢 祐一
教官コード1111
教官名塚田 伊助
学生コード110
学生名佐渡 誠
・・・
しかしこの場合だと、学生名を入力するのに いちいち教官コードや教官名まで入力しなくてはならない。 教官名についてはクエリを作成することによって 教官コードが入力されれば自動的に入力、ということもできるが、 それでも教官コードは一件ごとに入力しなくてはならない。 そこで次のようなフォームにすれば、 教官の情報は一度入力するだけでよいことになる。
教官コード1111
教官名塚田 伊助
学生コード学生名
100福沢 祐一
110佐渡 誠
これが「フォームの中に別のフォームがある」という状態である。 もう少し細かく見てみるとこのフォームは次のような構成になっている。
教官コード1111
教官名塚田 伊助

学生コード学生名
100福沢 祐一
110佐渡 誠
上記のように中心となるのは「教官についての情報」を入力するフォームである。 その中に付属情報である「学生についての情報」を入力するフォームがある。 このように入力する情報に 「中心となる情報」と「付属情報」と分けて順位をつけることにより、 同じ情報を入力するという二度手間を避け、データを整理することができる。 このとき、「中心となる情報」を入力するフォームを「メインフォーム」、 「付属情報」を入力するフォームのことを「サブフォーム」と言う。

サブフォーム作成のために必要な条件

サブフォームを作成するときには、 まず元になるテーブル同士にリレーションシップが組まれていることが必要になる。 リレーションシップが組まれていると、おのずとそこには 主キーと外部キー、つまり「主」と「従」の関係があることになる。 しかしこの表を見てもらいたい。 リレーションシップを設定できるところがあるだろうか?
テーブル:「教官名簿」
教官コード教官名
1111塚田 伊助
テーブル:「学生名簿」
学生コード学生名
100福沢 祐一
110佐渡 誠
リレーションシップを設定するには「共通する項目」が必要である。 しかし上記の二つのテーブルにはそれがない。 この場合、サブフォームを作成することはできないか、と言うとそうでもない。 「共通する項目」が無いのであれば、自分で作ればいいのである。 具体的には上の二つのテーブルの主キーを外部キーとして持つテーブル、 つまり二つのテーブルをつなぐためのテーブルを作るのである。
テーブル:「教官名簿」
教官コード教官名
1111塚田 伊助
テーブルをつなぐためのテーブル
(以後「テーブル:結合用」と呼ぶ)
ID教官コード学生コード
11111100
21111110
テーブル:「学生名簿」
学生コード学生名
100福沢 祐一
110佐渡 誠
このとき「テーブルをつなぐためのテーブル」に必要なフィールドは それぞれのテーブルの主キー「教官コード」と「学生コード」である。 しかし、それだけでは主キーを設定できないため 「ID」という主キーのためのフィールドを追加してある。 データ型は「オートナンバー型」にしておくといいだろう。 このテーブルを作成することによって リレーションシップを設定することが可能となるため、 サブフォーム作成のための条件を満たす、ということになる。

サブフォームの作成

さて、作成に必要な条件を満たしたら次は実際に作る、となるのだが、 サブフォームを作るにはいくつか方法がある。 ここでは一番簡単な方法を説明しておく。操作の手順は以下のとおり。
  1. 元になるクエリを作成する
  2. フォームウィザードでフォームを作成する
  3. デザインビューでレイアウトなどを調整する
  4. データを入力する

元になるクエリを作成する

まず最初にサブフォームの元になるクエリを作成する。 リレーションシップが設定してあるから フォームウィザードで直接フィールドを選択して作成することもできるのだが、 後で設定などを変更するのが難しくなるため、 クエリを作成してからフォームウィザードを起動して作ると便利である。 このとき選択するフィールドは次のとおり。
フィールド名教官コード
(主キー)
教官名学生コード
(外部キー)
学生名
選択元テーブル名教官名簿教官名簿結合用学生名簿
「教官コード」と「学生コード」は主キーと外部キー両方存在するが、 どちらを選ぶかというのはフォームのレイアウトから判断する。 つまり「教官名簿」と「学生名簿」の二つのテーブルのうち、 どちらが「中心となる情報」でどちらが「付属情報」になるか、 それを判断する基準が主キーと外部キーなのである。 メインフォームになるものは主キーを、 サブフォームになるものは外部キーを選択すると 主キーが選ばれているフィールドおよび それと同じテーブルに含まれるフィールドはメインフォームに、 外部キーが選ばれているフィールドおよび それと同じテーブルに含まれるフィールドはサブフォームになる。

フォームウィザードでフォームを作成する

元になるクエリが完成したらフォームウィザードを起動してフォームを作る。 このときクエリがサブフォームになる条件を満たしていると そのレイアウトが選択できるようになる。 もしレイアウトが選択できるのにフィールドの配置等がおかしい、というときは 元になるクエリのほうに問題があるので、 もういちど主キーと外部キーの選択やリレーションシップなどを確認しよう。

デザインビューでレイアウトなどを調整する

サブフォームを含むフォームを作成すると、フォームが二つできる。 レイアウトを変更するときはフォームをデザインビューで開けば良いのだが、 サブフォームのレイアウトを変更するときは メインフォームの中では操作がしにくいので サブフォームを選んで開くと単独でレイアウトを変更することもできる。

データを入力する

実際にデータを入力する。 メインフォームのほうの入力が終わりEnterキーを押すと 自動的にサブフォームのほうへの入力に切り替わる。 タブオーダー機能などを使えばメイン→サブ→メイン のような入力も可能になる。