- ベストアンサー
アクセスのフォーム、コードを入れると名前が出るのはなぜ?
アクセス初心者ですが、フォームを作成時、疑問に思って考えるほど混乱してしまいました。 例えば、 Aテーブル:日付、店コード、売上のフィールドを作る。(主キーなし) Bテーブル:店コード、店名(主キーは店コード) リレーションは店コード(B)→店コード(A)に結び、すべての整合性にチェック それぞれのテーブルに、数件のデータを入力 この状態で入力フォームをウィザードで作ったのです。 Aテーブルからすべてのフィールド、Bテーブルから生徒氏名を選び、ウィザード任せにフォームを作りました。 このとき、できたフォームで出席番号を入れると何もしないのに、自動的に生徒氏名が入ってしまいます。 人に聞くと当たり前でしょ、みたいに言われたのですが、なんとなくわかるようでわかりません。どうして自動的に入るのでしょうか?ふりがなの自動入力みたいな設定をしたというのならわかるのですが、何もしてないのに。 すみません、自分でも、リレーションとか整合性とかについて、あるいはまだフォームとテーブルの関係について、よくわかってないせいなのだろうとは思うのですが、そこの所も合わせ、どなたか、分かりやすく教えていただけますか?宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>フォームで店コードを入れると何もしないのに、自動的に店名が入ってしまいます Aテーブルの店コードとBテーブルの店コードをリレーションで結合してあるからです。 フォームには日付・店コード・店名・売上のコントロール(テキストボックス)が作られていますよね。 フォームの店コードにコードを入力するとその値でAテーブルの店コードにリレーション(この場合、結合というより連結と言ったほうが分かりやすいと思いますが)されたBテーブルの店コードが同じ値のレコード(データ)の店名が表示されているということです。 そのフォームをデザインビューで開きフォームのプロパティのデータにあるレコードソースの右にある...のボタンをクリックするとクエリビルダのダイアログが開きますので[はい]をクリックしてみてください。SQLスタートメントが表示されAテーブルとBテーブルが表示されていてAB各テーブルの店コード同士が結合線でつながっている状態が見れます。AとBテーブルの店コード同士がつながっているのでAテーブルに入力された店コードと同じ店コードのBテーブルにある店名が表示されるというのがビジュアル的に見れます。
その他の回答 (3)
- GreatDragon
- ベストアンサー率46% (186/402)
フォームはデータを表示する機能を持っています。 データが表示されるのは当然です。 そのフォームの「レコードソース」プロパティを確認しましょう。 おそらく、Select ~ というSQL文が記述されていると思います。 これはフォームの基になるテーブル/クエリを表わしています。 クエリビルダを起動し、実行ボタンをクリックしデータシートを 表示してみましょう。新規レコードの店コードを入力すると自動的に 店名が表示されるはずです。 この参照機能は、フォームではなく、リレーションシップを利用した クエリの機能です。フォームはクエリのデータを表示するだけなのです。 クエリはデータを表示する機能を持っています。リレーションシップが 設定されていれば、一側テーブルのフィールドの値を自動的に表示する ことが出来ます。 説明が難しいのですが、お分かりいただけたでしょうか?
お礼
御礼が遅くなり申しわけありませんでした。詳しい説明をありがとうございます。 『フォームはデータを表示する機能を持っています。』なるほど、それをどこか感覚的に、入力をするためのもの、という捉え方をしてしまってました。 ただ、『フォームではなく、クエリの機能…』以下、確かに今の自分にはちょっと難しいです。でもじっくり考えたいです。アクセスをもっとやりたいという気になりました。ありがとうございます。
- PCFREAK
- ベストアンサー率51% (417/805)
プログラミング経験なし、ですか・・・。 まず、今A,Bテーブルを結合した結果を表示している、という事は無関係なので説明を除外します。 (リレーションとか整合性とかで悩まれているようですが、「自動的に店名が出るのは何故?」という質問には無関係です。) Cテーブル:店コード、店名、日付、売上(主キーは店コード)というテーブルが存在するとします。 このテーブルに対してフォームを作ると、そのフォームはCテーブル専用のフォームになるので、常にCテーブルの内容を表示します。(ACCESSのフォームは、実は裏でテーブルを抱え持っていると理解して下さい。) ですので、多分フォームの最下部には左右の矢印および新規レコードを挿入する為の”*”が付いたボタンがあり、レコード番号を示す数字が表示されていると思います。 このフォームは常にCテーブル内の何れかのレコードを表示しますので、主キーである店コードを指定すると、その指定された店コードを持つレコードを表示するよう、作用するのです。ですので、そのレコードで保持している店名が自動的に表示されます。 という説明で如何でしょうか?ピンと来ますか?
お礼
父が倒れてしまい、お礼が遅くなりすみません。 裏でテーブルを持っている、という考え方、「なるほど!」です。この裏テーブルこそ、リレーションを結んだテーブルをひとつのテーブルとしてアクセスが作ってくれた裏テーブル=実際自分ではファイル名をつけて保存していないテーブルということなんですね?そのテーブルを表示するだけだから、自動的に店名も入る、ということです、よね? もし違ってたらごめんなさい、まだまだ修業が足りなくて。
- PCFREAK
- ベストアンサー率51% (417/805)
生徒氏名?出席番号? 上記説明のA,Bのテーブルにはそういうフィールドはないのですが。 もう一度質問を整理して下さい。 あと、ACCESSは初心者との事ですが、他の言語のプログラミング経験はありますか?それによって回答の仕方が変わりそうです。
補足
わ、どんでもないすっとこどっこいをば失礼しました、すみません!ああ、ご指摘ありがとうございます。 生徒氏名→店名、出席番号→店コードの誤りです。 つまりは、 「Aテーブルからすべてのフィールド、Bテーブルから店名を選び、ウィザード任せにフォームを作りました。 このとき、できたフォームで店コードを入れると何もしないのに、自動的に店名が入ってしまいます。」ということなんです。 こんな私ですが、どうぞ宜しくお願いします。なお、プログラミング経験は、なしです。
お礼
お礼が遅くなりすみません。丁寧な説明、ありがとうございました。 なるほど、リレーションを結ばずに作ろうとしたら、できませんでした。結合というより、連結、そう捉えると、わかりやすいですね。