<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門部屋>MS-Accessを使いこなすために・・
  (←別ウィンドウでサブメニュー)



6.リレーションシップオブジェクト

ただでさえいろいろ考えないとならなくてめんどくさい「サブフォーム」、なにせ、フォームの中にフォームがあるわけですから、フォームを二つ作らなくちゃならない。非常に面倒です。手間がかかります。なので、そういうとき、フォームウィザードを活用したいもんです。

で、ウィザードにサブフォームを作らせるために、あらかじめ「社員テーブルと労働テーブルは社員番号で結びつきます」ということを、「リレーションシップオブジェクト」というものの中に記録します。



じゃあ、やってみましょうか。
まず、メニューバー[ツール]→[リレーションシップ]をクリックしましょう。

テーブルを選ぶウィンドウが出てくるので(出てこない場合は、ツールバーの「テーブルの表示」ボタンをクリック))、「社員テーブル」「労働テーブル」を選びましょう。1回ずつ選べばいいですからね。
選び終わったら、「テーブルの表示」ウィンドウは閉じます。
出てきたウィンドウが、「リレーションシップオブジェクト」というやつです。この「練習台弐」というmdbファイルの中にあるテーブル同士の結びつき方を記す、ちょっと特殊なオブジェクトですね。

で、選んだふたつのテーブル同士、クエリ作ったときみたいに「社員番号」で結び付いてますか?
そしたら、この結合線をダブルクリックしましょう。
(線が出てない場合は、どっちからどっちでもよいので、「社員番号」から「社員番号」にドラッグしてみてください)

こんな画面が出てきますね↓。

主キーがきちんと設定されていれば、「一対多」という表示になるはずなんですけど・・・。
リレーションシップの種類が「未定義」とかなってる場合は、お互いのテーブルの主キーがあってないというか、MS-Accessにわかってもらえてないってことなんで、これからやる操作にも影響が出ちゃいそうですけれど・・・でも、さっきクエリ作ったときちゃんと作れたのならここはちゃんと「一対多」になってると思います。

いろいろとオプションをつけることもできるんですが、今日はこれでOK。
確認だけして、OKボタンをクリックしてください。

ここまでよければ、リレーションシップオブジェクトのウィンドウを閉じて、いよいよサブフォーム作りです。
ウィザードをうまくだまして作らせます。
フォームウィザードでフォームを新規作成しましょう。

特にテーブル名などは指定しなくてよいので、フォームウィザードで作るという指示だけしてOKボタンをクリックします。
次の画面で、まず「社員テーブル」を指定しましょう。



すると、「社員テーブル」にあるフィールドが全部出てきますので、真中の>>ボタンをクリックしてこいつらをみんな右側に移します。

で、再び「労働テーブル」を選びます。
すると同じようにフィールドが全部出てくるので、それも右側に全部移動させましょう。
右側にあるフィールドは、一列に並んではいますが、「労働テーブル」「社員テーブル」のふたつのテーブルからそれぞれ選択されているフィールドです。

こうして、この画面で、リレーションシップオブジェクトで結び付けてあるテーブルふたつを選ぶと、ウィザードがうまいこと働いてくれるんです。
じゃあ、次に進みましょう。

このような画面が出てきます↓。

このフォームはどうやらサブフォームの要素があるようだけれども?と言ってきてるわけですね。
いちおう、「社員テーブル」のフィールドが外側のフォームに、「労働テーブル」のフィールドが内側のフィールドに割り当てられていることをなんとなく確認してから(By社員テーブル)、次の画面に進みましょう。


今度は、サブフォーム部分をどうするか聞いてきます。

ピボットテーブルってやつは、Access2002からの新しい機能ですね。
これはまた別の機会にお話しするとして、「表形式」か「データシートビュー」どっちかにしましょう。
どっちでもいいんですけれど・・・今日は「表形式」を選びましょうか。
次に進みましょう。

次は、フォームの大まかなデザインをパターンから選ぶようになってるんですが、今日のところは「標準」を選んでください。
で、次に進みます。
最後に、フォーム名をつける画面になるかと思います。
このままでもいいんですけれど・・・デフォルトだと、もとにしているテーブルの名前を基準にしたフォーム名になります。
ちょっと分かりにくいですが、フォームがふたつ作られます。
ひとつは普通に開いて使うもの、ひとつはそのフォームに埋め込まれる予定のフォームです。

このままでもいいんですが、なんか、フォーム名が長くなるのもなんだなぁ・・・。

わたしはこんな風にフォーム名をつけてみました。
カタカナは全角文字です。半角は使わないようにしましょう。

で、「完了」ボタンをクリックしましょう。



フォーム、できましたか?

フォームの中にフォームが埋め込まれているような状態になってるんですが・・・。
どういう構造になっているのかじっくり観察してみてください。

でもって、メインのフォームのほうのレコード移動ボタンをクリックしてみてください。

サブフォームのほうの社員番号も変わっていること、確認してください。
メインのフォームに表示している社員の労働時間などがサブフォーム内に出るようになってます。
サブフォームは表形式のフォームですね。
まあ、データシート形式でも似たようなもんなんですが・・・。
表形式のフォームのほうが見栄えよく仕上げることができそうな気がするんで、わたしはだいたい「表形式」にしています。