リレーションシップとサブフォーム
いよいよこのお話をするときがやってきました。Access最大の難関「リレーションシップ」についてです。
AccessというとVBA(Visual Basic for Application)が一番難しいと思っている人も多いのですが、難しさの質が違います。リレーションシップは自力でがんばって理解していただくしかないので、一筋縄ではいきません。私もがんばりますんで、がんばって理解していきましょう。
サブフォームとは
これから皆さんには、「サブフォーム」というものを作っていただきます。この「サブフォーム」を作るとき、リレーションシップという存在が重要な役割を担うんです。なので、サブフォーム作りに絡めて、リレーションシップのお話をしていくことになります。
最初に、サブフォームについてカンタンにお話しておきましょう。
右の図のように、親フォームの中に別のフォームを埋め込んだものを総称してサブフォームと呼びます。
正確には、埋め込まれた子フォームのほうをサブフォームというのですが、サブフォームのあるフォーム、ってことで、右図のようなフォームのことをサブフォームって呼んじゃいますね。
で、実際には、フォームそのものではなく、フォームが表示しようとしているデータを持つテーブル同士が親子関係になるわけなんです。
図1:サブフォームのイメージ
このサブフォーム、手作りで作ることもできるんですが、テーブル同士の結びつきがちゃんとわかっていれば、Accessがある程度作ってくれます。つまり、ウィザード機能が使えるってことなんです。サブフォーム作るときは、ウィザードがお奨めですよ。
で、Accessにサブフォームを作らせるためには、予め、「このフォームとこのフォームは関連があるんだ」ということを教えておく必要があります。このデータベースの中でのテーブル同士の結びつきを示したオブジェクトのことを「リレーションシップ」と呼びます。
というわけで、これから、「学生マスター」と「成績テーブル」を使って、「各学生のテストの点数が表示されるフォーム」を作ろうと思うんですが、そのためにはまず、リレーションシップを作っておかないとならないって展開です。
では、リレーションシップを作りましょう。
今日は、作り方と雰囲気だけ理解しておいてください。
サブフォームをカンタンに作るために、リレーションシップを作る
タブメニュー「データベースツール」をクリックし、リボンの中の「リレーションシップ」をクリックします。
図2:リレーションシップを作る
リレーションシップ、というタブつきの画面が背後にあり、手前に「テーブルの表示」という小さいウィンドウが出ているはずです。
「テーブルの表示」ウィンドウから「学生マスター」をダブルクリックします。
同じ要領で、「成績テーブル」もダブルクリックします。
ふたつのテーブルを1回ずつダブルクリックして選択することができたら、「テーブルの表示」は閉じます。右下に「閉じる(C)」というボタンがあると思いますので、これクリックして閉じてください。
クエリ作ったときの操作と似てるでしょ。考え方は同じようなもんなんですよ。
図3:テーブルを選ぶの巻
すると、こんな感じで、リレーションシップという画面の中に「学生マスター」と「成績テーブル」が仲良く並んでますね。次に、このふたつのテーブルの関係を明らかにします。
どちらかの「学籍番号」フィールドから、もう片方の「学籍番号」フィールドまで、ドラッグします。
ふたつのフィールドの間に、細い線が出てくるはずなので確認してください。結合線です。
図4:「学籍番号」同士をドラッグして結びつける。どっちからでもいいよ。
ふたつのフィールドを結ぶ結合線をダブルクリックします。結合線をダブルクリックですよ。
すると、右図のような「リレーションシップ」という小さい画面が表示されます。まずは、内容を観察してみてください。
これで、「学生マスター」の「学籍番号」1件に対して、「成績テーブル」の「学籍番号」が数件(多)、という結びつき方になるんですよ。
「作成」ボタンをクリックします。
図5:リレーションシップの様子
作業は完了です。「閉じる」ボタンをクリックして、リレーションシップを閉じましょう。
図6:こんな目立つところに「閉じる」ボタンがあるではないか。
閉じるときに、右図のようなメッセージが出ると思います。「はい」ボタンをクリックして、保存しながら閉じましょう。
以上で、リレーションシップは完成です。
図7:もちろん保存するアルよ
今日のところは、
リレーションシップの作成手順だけ理解していただければOKです。
どういうときにどういうリレーションシップを作らなければならないのか・・・といったことは、後々じっくり理解していきましょう。
Top
サブフォームを作る
次に、サブフォームを作成しましょう。
「作成」タブをクリックし、「その他のメニュー」をクリックして一覧を表示させます。
中から「フォームウィザード」をクリックします。
ちょっとしたことですが、左側のナビゲーションウィンドウから「学生マスター」をクリックして選択した状態でフォームウィザードを開始すると、ちょっと手間が省けますよ。
図8:普段はあまり使わないフォームウィザードが活躍するときは今だ!
ほーら、ウィザードが始まりましたよ。
最初の画面で、このフォームの基になるテーブルを選択します。今回はサブフォームなので、ちょいと手間がかかりますよ。
1.「学生マスター」を選びます。
(既に表示されているかもしれませんが)
2.「学生マスター」のフィールドの一覧が表示されます。
3.>>ボタンをクリックします。
図9:ややこしいががんばってみよう
すると、全てのフィールドが右側に移動するはずなんですが、移動しました?
右側が、フォームに表示したいフィールドです。3つとも表示したいので、>>ボタンで一気に選びました。
図10:まだ終わりじゃありませんよ
次に、ふたつ目のテーブルを選択します。
「成績テーブル」を選択してください。
図11:まだまだ
左側(1)から、「実施日」をクリックして選択し、>ボタンをクリックします(2)。
図12:今度はフィールドを選ぶぞ
同じ要領で「教科番号」「点数」も。右側に選びます。
図13:同じ要領で「教科番号」「点数」も選ぶ。
このフォームに表示したいフィールドを全て右側に選ぶことができたら、「次へ」ボタンをクリックします。
図14:次!
「サブフォームがあるフォーム」が選択されていることを確認し、「次へ」ボタンをクリックします。
図15:サブフォームっぽくなってきたやろ
サブフォーム(子フォーム:成績を表示するための内側のフォーム)は、表形式とデータ形式の2種類から選択できるんですが、今のところまだ表形式フォームの説明をしてないので・・・今日はデータシートにしましょう。
「データシート」を選択し、「次へ」ボタンをクリックします。
図16:どっちも似たようなもんですが、データシートの方が手軽です。
スタイルは「Access2007」を選択して、「次へ」ボタンをクリックしましょう。
とりあえずこれが一番シンプルなのでデザインも変えやすいですからね。フォーム作りに慣れてきたら他のスタイルもいろいろ試してみてください。
ただ、その頃には逆に、シンプルなスタイルの方が扱いやすいって考えに落ち着いちゃってるカモしれませんけどもね・・・フフフ・・・。
図17:ま、シンプルなやつでいきましょう。
最後の画面です。
フォーム、サブフォーム欄にそれぞれ、「学生マスター」「成績テーブル サブフォーム」と表示されているところに注目してください。これは、これから作成される二つのフォームの名前です。
実は、この段階で、もうちょっとフォームっぽい名前をつけておいたほうが、後々わかりやすいんです。。。でも、今回は練習なので、このままいきましょう。
「完了」ボタンをクリックします。
図18:フォームがいっぺんにふたっつできるんでやんすよ
サブフォームが出来上がりました。
といっても、デザイン的には少々調整が必要かな、という状態ですが・・・とにかくこれで、サブフォームは完成です。
サブフォームは、手作業で1から作ることもできるんですが、なかなか難しいので、ウィザードに作らせるのが得策です。
テーブルのデザインやリレーションシップなど、サブフォームの土台となる部分がしっかり出来ていれば、Accessがそこそこのデザインのサブフォームを作ってくれますからね。
後は、サブフォームの特性や動きを確認しつつ、デザインを整えていきましょう
図19:みんなーサブフォームよーサブフォームが出来たわよーー
サブフォーム : デザインの調整
ではでは、次に、この出来立てほやほやのサブフォームにちょっとばかり手を加えて、より見やすく使いやすいフォームへと変身させていきましょう。
このままでも十分使えるんですけどね。
まあ、よいではありませんか。今までのおさらいも含めて、では、参りますよ。
デザインビューに切り替えます。
まずは、サブフォームのある風景、じっくり観察してみてください。よく見ると、コントロールレイアウトが二組あることがわかると思います。
「学籍番号」「名前」「クラス」のテキストボックスとラベルという、合計6つのコントロールから成るコントロールレイアウト: 親テーブル「学生マスター」側
「成績テーブル」というラベルと、サブフォームが中に埋め込まれている”埋め込みオブジェクト”という種類のコントロールから成るコントロールレイアウト:子テーブル「成績テーブル」側
じっくり観察してくださいね。
図20:サブフォームのデザインをじっくり観察しよう
「成績テーブル」のラベルは不要かなと思いましたので、削除します。そのために、コントロールレイアウトを解除しましょう。
右図のように、「成績テーブル」ラベルだけクリックして選択します。
図21:ラベルだけうまいこと選択するんだ
リボンの中に「解除」メニューがありましたが、今回は別のメニューから解除してみましょう。一度操作してみて、どちらか操作しやすいと思うほう一方だけ覚えておけばいいじゃないのかしら~~と突然歌い出す私。
右図のように、選択したラベル上で右クリックし、メニューの中から「レイアウト」→「解除」を選択します。
あらかじめ選択しておかなくても、いきなり右クリックでもメニューは出ますが、私はあまりマウス操作が得意ではないので、いつもこうやって一度選択してから右クリックするようにしてます。あ、そんなの私だけか。
お目当てのラベルの右クリメニューが表示できれば、細かいことはお構いなしでOKですよ。
図22:右クリメニューでも「解除」できるのだ
解除できたら、改めてラベルだけをクリックして選択して、Deleteキーを押して一気に消し去りましょう。
ラベルだけ、なくなりました?
埋め込みコントロールまでなくなっちゃった!!という人は、コントロールレイアウトの解除、ちゃんとできてるかどうかもう一度確認してくださいね。
↓
図23:消してしまえ
埋め込みコントロールを左のほうへ移動させましょう。
埋め込みコントロールをクリックして選択し、フチのどこかにマウスポインタを合わせると、ポインタが右図のような十字型に変わります。その形をキープしつつ、そっとドラッグすれば移動できますよね。
うまく動かせなかったり、予想外のところに移動してしまった場合は、やり直し、できましたよね。
思い切って移動させてみて、早いとこコントロールの移動やサイズ変更の感覚を掴んじゃってくださいね。
図24:マウスポインタの形を確認してからドラッグ開始せよ
さらに、埋め込みコントロールのサイズを調節しましょう。
右図のように、右下の角にマウスポインタを合わせ、ポインタの形が左右矢印の形になったら、そっとドラッグを開始しましょう。
適当なところで上書き保存しながら、作業をしていってください。
図25:大きさも揃えよう
フォームビューに切り替えて、コントロールの配置などを確認しましょう。
あっ、もしかして、お気づきですか??
そうなんです。「学籍番号」テキストボックスの右端、なんか、ちっさい矢印みたいなの出てますよね。これ、なんですかね・・・。え?知るか?
ははは、すいません。その通り。私はこれが何だか知っているんです。ずばり、スクロールバーなんです!!
このスクロールバー、実は、「名前」と「クラス」のテキストボックスにも、カーソルを移動させれば出てくるんです。ウィザードでフォーム作ると、テキスト型のフィールドのテキストボックスに出るみたいなんですよね。
これ、要らないので・・・省こうと思います。
図26:いい感じだけど、「学籍番号」の右端に何かくっついてるわね
プロパティの調整(1) テキストボックスのスクロールバー
フォームをデザインビューに切り替え、プロパティシートを表示させます。
図27:プロパティ、プロパティ
「学籍番号」テキストボックスをクリックして選択すると、プロパティシートに「学籍番号」テキストボックスのプロパティが表示されます。
「書式」タブがクリックされている状態で、「スクロールバー」というプロパティを探してください。
このプロパティを「なし」に変更します。
図28:スクロールバー、スクロールバー
「名前」と「クラス」テキストボックスも同様に、スクロールバーなしの設定に変更しましょう。
図29:「名前」と「クラス」テキストボックスも同様に
作業が終わったら、プロパティは閉じておいたほうが、画面が広々します。プロパティシートは必要なときだけ出せばよいでしょう。
図30:プロパティシートは閉じときましょうかね
フォームビューに切り替えて、様子を見てみましょう。さっきよりすっきりしましたよね。
コントロールの移動やサイズ変更、プロパティシートの出し方など、おさらいしておいてくださいね。こういう作業を身体で覚えてしまっておけば、もっと細かいことや全体的なことに目を向けるゆとりができて、Accessなんて屁のツッパリになりますよ。
図31:フォームビューに切り替えてちょいちょい確認しよう
そうそう、忘れないうちに、ヘッダー部分のラベル、フォームのタイトルにふさわしいものに書き換えておきましょう。
何でもいいですよ。ラベルの中身を書き換える操作のおさらいだと思って書き換えてみてください。
図32:ラベルはフォームの見出しとしてわかりやすいものにしとこう
このサブフォームの微調整、まだまだ続きますよ。でもちょっと長くなっちゃったので、次のページへ!!
このページのまとめなど
- サブフォームとは、フォームの中に埋め込まれたフォームである。
- リレーションシップとは、このデータベースの中でのテーブル同士の結びつき方や関係を表したオブジェクトである。
- リレーションシップを作ってからフォームウィザードで作ると、サブフォームって比較的簡単にできる。
- 埋め込みオブジェクトの中にフォームが埋まってるのだ
作成日:2009-01-09