<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97データベース工作室>食いだおれデータベース
  Page1Page2Page3Page4Page5Page6Page7Page8Page9Page10Page11Page12Page13



では、テーブルを4つ作ったところで、これらテーブル同士がこの食いだおれデータベースの中で、どんなふうにかかわりあっていくのか、その辺を少し考えていきたいと思います。

何のために・・・とお思いの貴兄、もちろん、こんな操作必要ない場合も多々あります。
でも、せっかくですからちょっと見ていってください。

←左の要領で、最初に作ったメインとなる食いだおれテーブルのデザイン画面で、
[場所]フィールドのデータ型を変更します。
ルックアップウィザードっていう、妙なやつに変更してください。



ルックアップって、表計算ソフトやカード型のデータベースソフトで登場することのある機能or関数だと思います。
言葉の通り、「探す」仕組みを作るんですけどね。
この[場所]っていうフィールドの中身は、直接入力するんじゃなくて、なんか一覧から値を選択するような形式にしたいので、手伝ってくれ、という機能です。

と、ルックアップウィザードっていう機能が起動して、画面がいくつか次々出てきます。
最初は、えーと、コンボボックスを作る動作をご覧になった方はピンと来ると思うんですけど、テーブルの値を参照するか、きつね;ねこ;こぶた;たぬき...と、ここで値のリストを作るか、選択します。

ここでは、せっかく[場所テーブル]って作ったんだし、あれを使いましょう。
「テーブルまたはクエリーの値を表示する」にしますよ。


と、次は、具体的にテーブル名またはクエリー名を指定する画面です。
[場所テーブル]をしっかり選び、次に行きますよ。

じゃ、そのテーブルの中のフィールドで、選び出すために必要なフィールドを選んでおきます。

こりゃ専用テーブルのつもりで作ったんですからね。
迷うことはないですね。ふたつとも選びますか。

すると、さっき、データを入力しておいたんで、何件か実際のテーブルの内容が出て来てますよね。

そんなに長い地名もないし、この状態で表示には問題なさそうです。
で、上に「表示しないキー列」っていうのがありますね。このチェックマークをはずすと、主キーにした[場所]っていうフィールドが出てくることになるんです。
出してもいいですけど、なくてもいいですよね。
ない方がわかりやすいかな。このまま進みましょう。

で、終わり。
最後は、もしこのテーブルを基にフォームとかレポートとかをウィザード機能で作ったときとか、テキストボックスの左側に必ずラベルがつくじゃないですか。ああいうの、そのまんまでいい?って感じの意味です。

このままでいいです。じゃ、オッケーです。完了しましょう。

おおお???なんか変なメッセージが出てきましたぞ。とりあえず[はい]の方クリックしてください。


んー・・・なんか、[場所]のデータ型、数値型に変っちゃったんですけど・・・。
まあいいか。同じ要領で、[分類]も分類テーブルと結びつくよう、ルックアップウィザードを使ってみてください。


さて。リレーションシップとは何か、なぜ[場所]は数値型になったのか・・・
謎が謎を呼ぶ食いだおれデータベースですが、とりあえず手がかりを探して、リレーションシップというところまで聞き込みに行ってみましょう。

メニューバーの[ツール]→[リレーションシップ]とたどりましょう。

あーなんじゃこりゃー・・・。
変な画面が出てきましたですよ。なんでしょうこのブキミな画面は・・・。

これはですね(知ってるならさっさと説明しろ?いや・・・ときどき盛り上げないと・・・)リレーションシップというオブジェクトです。
普段は表に出るようなことはないんですが、データベースの中にひっそりと潜んで、テーブル同士の結びつきに矛盾が生じないか見張りをしています。

複数テーブルを作成して、結び付けて使うとき、この中であらかじめ設定しておくと、その結びつきに反するようなレコード入力がなされないよう、しっかり監視してくれるんです。

でも、ヤミクモに結び付けてもあんまり意味がないし、返って邪魔になる場合が多いので、必要な部分だけでよいと思います。

ルックアップウィザード使って、食いだおれテーブルから他のテーブルの値を参照するようにしたんで、自動的にリレーションシップにエントリーされたみたいですね。
よく見ると、テーブルとテーブルが、それぞれ関連するフィールド同士線で結び付けられてますよね。


じゃ、ひとつ練習を兼ねて、[食いだおれ明細テーブル](あたしはそういう名前を付けたんですが・・)を、このリレーションシップの中に加えてみようと思います。

上記のツールボタンをクリックしてください。「テーブルの表示」というボタンです。

このテーブルは、[食いだおれテーブル]と[ナンバー]というフィールドで結びついて、[食いだおれテーブル]内に記録されたその店で食べたメニューを記録しようというテーブルですよね。

ダブルクリックすると追加されます。
このウィンドウ閉じないとわかりにくいんですけど・・・。閉じるか動かすかして、[食いだおれ明細テーブル]が選ばれてるかどうか確認しましょう。
(もっと短い名前にすりゃよかったな)

選んだだけだと、さすがにAccessもどうしていいかわからんようです。
ぽつーんと孤立してますね。

ちょっとわかりにくいんですが、[食いだおれテーブル]の[ナンバー]のフィールドから、[食いだおれ明細テーブル]の[ナンバー]の部分に向かって、そーっとドラッグをします。

え?なんでかって??いいんです。とにかくだまされたと思ってやってみてください。

うまくドラッグできると、下のような画面、出てきません?

なんかよくわからないことがいろいろ書いてあるんですけど・・・。
よく見ると、[食いだおれテーブル]の[ナンバー]と[食いだおれ明細テーブル]の[ナンバー]を
結び付けますよ、と、そんな感じのことが書いてあるみたいですね。

種類は一対多
[食いだおれテーブル]に1件お店が入力されたら、[食いだおれ明細テーブル]には
1品目か2品目以上、へたすっと100とか200とか入力されるんでしょ??

って、言ってるみたいです。

これが逆だったら、思ったような入力できなくなりそうな気がしません?
リレーションシップとは、技術や機能ではなくて、データの見方考え方なので、このふたつのテーブルの中にどんな風にデータが入ってくるか頭の中でシュミレーションして解釈してみてください。


ふつうのリレーションシップの設定なら、ここまででオッケー。
左上の[作成]ボタンをクリックして完成です。

しかし、今日はそれだけでは帰しませんよ(笑)。
ここでひとつ、リレーションシップを利用した機能に挑戦してみません?

え・・・そんなこといわずに。やりましょうよ。。。

上の図を見てください。参照整合性というのがありますね。

これをチェックすると、フィールドの連鎖更新レコードの連鎖削除という機能が利用できるようになるんです。

こりゃなんじゃ???ふむ。ではひとつ使ってみましょうかね。

例えばですね。このふたつのテーブルの関係は、どういうんでしょう。
テーブルは別れてますけど、中に入力されてるレコードには常につながりがあるはずなんですよね。
その辺は、[分類テーブル]とか[場所テーブル]とかと、ちょっと違うかなと思います。

[食いだおれテーブル]の方で、ナンバー001のお店の情報を1件削除したとします。
その場合、[食いだおれ明細テーブル]の中にも、001のお店で食ったメニューとか何件かあるはずなんですけど、これ、残しておいても意味ないですよねぇ。

そういう結びつきって、ありえますよね。
じっくりテーブルの中のデータを思い描いてシュミレーションしてみてください。

このレコードの連鎖削除というのが、まさにその動作を自動的にやってくれるものなんです。チェックしておきましょうか。


ちょっと試してみますね。まだ入力フォームとか何にも作ってないんで、データシートビューで我慢して、2件ほどお店を適当に追加します。
お???ちゃんと[場所]と[分類]のところ、ルックアップできるようになってますよね。

それで、同じように[食いだおれ明細テーブル]の方にも、その店で食ったものを入力しておくとします。

入力し終わったら、いちおう閉じておいてくださいね。
開きっぱなしでも別に影響ないんですけど、結果がわからないんで・・。

で、[食いだおれテーブル](この名前失敗したー)の中身を1レコード削除します。
左端のレコードセレクタクリックしてから[delete]キーを押せば消せますよね。

なんか確認のメッセージが出ますけど、オッケーオッケー。
[はい]の方をクリックしましょう。

すると???[食いだおれ明細テーブル]の方も、削除、されてると思うんですけど・・・。
テーブルのウィンドウ開いたままだった方は、いったん閉じて、もう一回開いてみてくださいね。
開いてる状態でも削除はされてるんですが、表示は更新されないので・・・。

これがリレーションシップを利用した連鎖削除機能。さて、使う価値、ありそう???