<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--基本操作をさらに考える
   >00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 



ここで、ちょっと本線から外れて、「テーブル同士の結びつき−リレーションシップ」のとこで、使えそうな機能をひとつご紹介したいと思います。

メニューバー「ツール」→「リレーションシップ」を開いてみてください。

サブフォームを作るときのために、ふたつのテーブルを結び付けましたよね。
その結びつきの部分、結合線をダブルクリックしてみましょう。

あんまりいろんなことはできませんが、いちおう、ふたつのテーブルが結びつくに当たっての、いろんな設定ができる画面が出てきます。

で、注目いただきたいのが、左の下の方の「参照整合性」ってとこです。
「参照整合性」とは、ヘルプで引いてみると以下のように出ています。

参照整合性は、レコードの入力や削除を行っても、テーブル間のリレーションシップが維持されるようにするための規則です。

わかったようなわかんないような・・・。

興味ある方は、ヘルプをもっと詳しく読んでおいてください。これはAccessの機能というより、データベース全般の知識ですんで、他のデータベースとかに興味ある方は、考え方のひとつとして熟知しておかれた方がよいでしょう。

で、具体的にどういうとき役に立つかっていうお話ですが・・・。
例えば、上の図でいくとこのふたつのテーブルは、「伝票番号」というフィールドによって結びついているわけですね。
で、いちおう、「売上明細」テーブルの1レコード(1伝票番号)に対して、「売上明細商品」テーブルには同じ伝票番号のレコードが複数存在する可能性がある、ってことになります。そのためにサブフォーム形式のフォームにしたんですよね。その辺、頭の中で整理しておいてください。

こういうのを「1対多の結びつき」っていいます。

「売上明細」テーブルが親テーブル、「売上明細商品」テーブルが子テーブルってことになります。

まあ、ふつうにサブフォーム作って伝票入力するとかって感じだったら、ただふたつのテーブルを結び付けただけでいいんですけど・・・。
もし、「売上明細」テーブルから1レコード削除する必要が出てきた場合のこと、ちょっと考えてみてください。

「伝票番号が4のレコード」を削除したとします。親テーブルから伝票番号4のレコードはなくなりますけど、子テーブルの方には伝票番号4のテーブルは、まだ残りますよね。こういう場合に、親テーブルと結びついている子テーブルのレコードも削除してくれる機能というのが「レコードの連鎖削除」って機能なんです。

削除されちゃったら困る場合もあると思いますので、処理の流れや現在の業務の状態をじっくり見て、こういう機能をうまく活用していってください。
やたら設定すればいいってもんじゃなさそうですよね。

「参照整合性」にチェックをつけて、「レコード連鎖削除」機能にチェックをつけると、リレーションシップの状態がこんな感じになります。
なんか、ちょっと結合線の雰囲気が変わりましたよね。

じゃ、リレーションシップのウィンドウは、保存しながら閉じるとしましょう。


「売上明細」テーブルの中のレコードをどれか削除したとします。

まだ削除の仕組みとか作ってないから・・・。とりあえずテーブル開いて、レコードセレクタクリックして、Deleteキーを押して無理やり削除してみてください。

すると、なんかメッセージが出てきます。

「はい」の方のボタンをクリックした後・・・「売上明細商品」テーブルの方を開いてみますか。
多分、同じ伝票番号を持つレコード、削除されてると思います。

こうして、テーブル同士の結びつき方をうまく設計していくことで、矛盾の生じないデータの蓄積をしていくことができるわけなんです。
でも・・・意味もわからずやたら設定しても、返ってトラブルの元になることもありえます。あくまでも、皆さんがこれからシステム化しようとしている業務の内容をよく考えた上で活用する機能なんだ、と捉えてくださいね。

「参照整合性」っていつ使うんですか?
「1対多の結びつき」ってどうやって作るんですか?

とか聞かれると、なかなかお答え難しいんですよ・・・。みなさんどうやって説明してらっしゃるんですかねぇ・・・。
とにかく、ひとつのデータベースの中で、データが矛盾しないよううまくたまっていくために活用する機能or考え方のひとつなので、「参照整合性」だけ覚えようとなさらず、うんと視野を広げて考えてみてください。間違っても参照整合性を使うためにデータベースを作ってるみたいなことにならないように・・・。


んでは・・・。
これから先は、「データの照会」の仕組みをいろいろ作っていこうかなって思います。

今までは、データを入力する仕組みを主に考えてきましたよね。で、どうにかテーブルの中にデータがたまっていくようになりました。
例えば、「過去の伝票番号をさかのぼって表示させたい」とか、そんな仕組みを考えてみます。
もちろん、「入力も照会もいっしょでいいや」っていうならそれでもいいんですよ。その辺は、用途に応じてですね。
わたしは今回は、「入力するとき」と、「後で過去の伝票を照会するとき」を分けて考えてみようかなって思います。

では、「後で過去の伝票を照会する」ためのフォーム作りをします。
ウィザードで手っ取り早く作りますよ。

サブフォーム形式で、「いつだれがなにをいくつ買ったか」わかるようにしますんで、イメージとしては入力のときのフォームとおんなじような形になりますね。


サブフォーム部分は「データシート」にしてみました。
ふーむ、こんな感じになるんですね。なるほど。

サブフォーム部分、前に作ったやつとちょっと雰囲気違いますよね。みなさんは表形式フォームとデータシート形式と、どっちがお好みかな。

で、デザインビューにひっくり返してみて、ちょいと細工をしましょう。
このフォームは「後で伝票を見るためのもの」って考えてます。ここで、業務の流れをじっくり考えてみないといけないんですが・・・。「後で伝票をいじる可能性があるか?」ってことですね。要するにこのフォームから修正/追加/削除ができてもいいもんか、ってことです。

うーん、今回は・・・。
「削除はできるけど、追加と更新はできない」
っていう風にしようかな。

では、サブフォームの方のプロパティを出していただいて、調節してみましょう。

「追加の許可」と「更新の許可」をいいえにしておきましょうかね。