Accessのフォームについて教えてください。

このQ&Aのポイント
  • アクセス入門者がフォームについて理解できない状況にあります。彼はテーブルから必要な項目を集めたクエリを作成し、それを元にフォームを作成しました。
  • しかし、フォームには入力ができないため、別の方法を試しました。彼はデータを追加するためにサブフォームを使用しましたが、それでも追加できませんでした。
  • 彼は複数のテーブルからデータを取得し、更新することができる方法についても疑問を持っています。彼はクエリまで進んだのに、フォームでつまずいて苦しんでいます。
回答を見る
  • ベストアンサー

Accessのフォームについて教えてください。

こんばんは。アクセス入門者です。 入門書やできるシリーズなどいくつかのアクセスの本を見たのですが、 フォームについて、理解できません。 ●担当者マスタ ■客先マスタ ★コードマスタ ▲売り上げ計画マスタ ◎売上げ結果マスタ テーブルを作り、それぞれのテーブルから必要な項目を集めて、クエリを作成しました。思ったとおりの結果になったので、これを元にフォームを作成しました。 思ったとおりの結果が表示されるのですが、このフォームに入力が出来ません。できなかったので、次の方法を試しました。 ★コードマスタと▲売り上げ計画マスタのデータをサブフォームに配置しデータを追加させようと思って、あらたにフォームを作りました。やはり、思ったとおりの表示はされるのですが、追加ができないのです。それぞれのテーブルには、★コードマスタを主にそれぞれ、一対多にリレーションを組んでいます。 1つのフォームで色々なテーブルに結果を反映できるように、参照整合性の更新、削除にもチェックを入れました。 この考えは間違っているのでしょうか。 ○○マスタとあるように、それぞれ1つのテーブルに1つのフォームにしなければならないのでしょうか。 複数のテーブルから取り出したデータの更新は無理なのでしょうか。 ある程度、クエリまで完成したのにフォームでつまずいて苦しんでいます。ご解答宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

>テーブルは細分化したほうが良い 「場合による」としか言えません。「正規化」と言いますが、 あくまで、目安です。実際のニーズによっては「正規化」を 崩す必要があることも想定されますし、実例も多くあります。 >1つのフォームで色々なテーブルに結果を反映できるように 難しいし、やるべきではありません。ハッキリと言えます。 >主キーなしでただつなげただけ n:nの組み合わせで、重複が生じます。 ただ、主キーでなくても重複の無いインデックスを設定した項目の 結合であれば、1:1あるいは1:nになることもあります。 前にも回答しましたが、1:nの組み合わせでは1側のテーブルしか 更新できません。 さっと見ただけですが、次のようにすべきです。 (1)コードマスターは廃止する。 (2)1マスタ:1フォームにする。 (3)売り上げ計画、売上げ結果をマスタと呼ぶのは止める。これも   1テーブル:1フォームにする。 (4)1テーブル:1フォームは更新対象で、例えば売り上げ計画が   参照するであろう顧客コードは顧客マスタを参照すべきです。

mugigohan
質問者

お礼

色々とご教授いただきありがとうございました。 ごちゃごちゃしていたリレーションシップも「コードマスター」を他のテーブルに吸収させることによってすっきりしました。 テーブルの細分化もほどほどにしないとリレーションは見づらいし、フォームも数が増えてしまうので更新しづらくなるということが判りました。 必要項目がたくさんあってもテーブルはあまり増やさないように設計していきます。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

元になるクエリが更新可能でないか、フォームが入力可能でないかの いずれかです。おそらく前者でしょう。 クエリをデータシートビューで開いて、右向き▲に*の移動ボタンが 使用可能でなければ参照のみです。 DBでは 1:1 か、1:nの1側の方しか変更できません。 結果的に1:1になることを知っていても、プライマリキー、あるいは 重複を許さないインデックスによる結合と言った物理的制約が求め られます。××マスタとあるので、ここが主体になるように設計する べきで、「コードマスター」があるため、他のマスタは全て1:nの n側、つまり、更新できない側になってしまうのです。 何のために置いたのですか?コレさえなければ1テーブル:1フォーム となって、必ず更新可能になるんですけどね。

mugigohan
質問者

補足

★コードマスタの主キーで▲売り上げ計画マスタと◎売上げ結果マスタ をつなげています。 ★コードマスタのに担当者や客先情報を入力するように考えていました。 正規化を行って、テーブルは細分化したほうが良いと思っていたのですが、フォームにからの入力を考えた場合、あまり細分化しないほうが良いのでしょうか。 それと以前、運用されているアクセスを見たときにテーブルに主キーの設定がしていないことがありました。 主キーを設定して、1対多のリレーションを組んだ場合と、主キーなしでただつなげただけと結果はどのように違うのでしょうか。 色々と疑問だらけで申し訳ありません。 宜しくお願い致します。

関連するQ&A

  • Accessのフォームについて

    データ1、データ2というテーブルがあり データ2の中身を データ1に追加するという 「追加クエリ」を作りました。 それで、この「追加クエリ」を フォームのボタンをクリックしたときに実行させるようにしたいのですが どのようにすればいいのでしょうか。 (ボタンクリックで作成した「追加クエリ」自体を実行させることができるのか、 それとも追加クエリと同じ動作をさせるコードを記述して更新するようにしないとダメなのか) Accessを始めたばかりであまり詳しくないので 申し訳ないのですが ボタンクリックで作成した「追加クエリ」を実行出きるというのであれば(前者) コードとその説明を簡単でいいので 教えていただけないでしょうか。 よろしくお願いいたします。

  • アクセス 検索フォームから抽出結果を別フォームへ

    いま会社のシステムを構築していて ほとんど初心者なのですが、どうしたらよいかわからず困っています。 access2003なのですが フォームからパラメータクエリを起動して、会社名を検索した結果をその会社とのコンタクトした 内容を記すフォームに情報を転載したいのですが、どうやったらよいのかよくわかりません。 顧客マスターのテーブルにパラメータクエリで会社名を検索させています。 主キーは顧客コードです。 その該当したデータは追加クエリにして顧客とのコンタクトをしたテーブルに追加するようにしています。 しかし、テーブルにではなくフォームに追加したいのですが、どうしたら良いのかわかりません。 何卒よろしくお願い致します。

  • Access2003のフォームが出来ない。

    Access2003 をテキストで勉強中です。 テーブル → クエリ → と、進んで行きまして、フォームをウィザードで作ると、「フォームを作成できませんでした。」と、メッセージが表示されます。 クエリを基に作成しています。最初のテーブルから、テキスト通りにやりなおしてみても、同じ結果になります。 フォームを作れない原因とは何でしょうか? どうか、よろしくお願いいたします。

  • Accessフォームの新規レコードについて

    いつもお世話になっています。 Access2000でフォーム作成をしているときにちょっと詰まってしまいました。 クエリからフォームの作成を行うと、フォームの新規レコードの追加ができないんです! テーブルからフォームを作成する場合は新規レコードの追加は可能でした。 クエリがあるとどうしても新規レコードの追加ができなくなってしまいます。 クエリからフォームを作成して、新規レコードの追加を行えるようにすればどうしたらいいんでしょうか? よろしくお願いします。

  • Access フォームからの入力結果をテーブルにすることはできない?

    Access フォームからの入力結果をテーブルにすることはできない? 使用しているのはWindows XP、Access 2003です。 とある調査結果をデータベース化する仕事を与えられています。 データ1件あたりの構成要素を一目で見れるようにするために「こういうレイアウトのフォームを作って」と上司からリクエストが出ています。 まず、今手元に集まっているデータについては、 Excelで一覧表作成 → Accessにインポートしてテーブル作成 → オートフォームでフォーム作成し、デザインビューでレイアウト変更 というふうにして、上司から言われたフォームは作りました。 今後、データは増えていくので、作ったフォームから新たにデータの追加をしていくことになるのですが・・・。 フォームからデータを追加しても、元となったテーブルにはリンクしませんよね? とすると、データを追加した結果をテーブルにしたい場合はどうしたらいいのでしょうか? 今度は、そこからクエリを組む必要も出てくるため、テーブルにしたいのですが・・・。 Accessについては、以前勤めていた会社の研修で習っただけで詳しい使い方をずいぶん忘れてしまっています。今回、自分なりにいろいろ調べてはみたのですが、よくわかりませんでした。 もしかしたら、Accessの使い方を基本的に間違っているでしょうか・・・ よろしくお願いします。

  • MSアクセスでフォームからテーブル結合させたい

    製品マスタデータテーブルとオーダーテーブルがあります。 クエリで2つのテーブルを結合し表示させるのは簡単なのですが、 個々の注文データをフォームから作成するやり方がわかりません。 品番が共通項になっていて、フォームに品番を入力すると、製品マスターテーブルを参照して対応する品名や寸法を表示させたいのです。どこをどうすればよいのでしょうか?クエリにおける INNER JOINをイメージしています。 その後、その他もろもろの注文データに必要な項目を入力し、保存させればおしまいです。 クエリをベースにフォームを作成しましたが、それではフォームからの変更や追加ができません。 よろしくお願いします。

  • ACCESS フォーム

    ACCESSのフォームで、すでに作成したフォームに、違う新しいテーブルをコピーするにはどうしたらいいでしょうか?【3月の売上】のフォームを作ったのですが、形式を同じで【4月の売上】のフォームを作りたいのですが、テーブルだけ4月のデータは入れたのですが、困っています。分かる方宜しくお願い致します。

  • アクセス2000のフォームについて

    アクセスでまたつまずいてしまいました。ちょっと教えてください。 複数のテーブルから選択クエリを作り、それを基にオートフォームでフォームを作ったのですが、フォームでデータの入力が出来ません。クエリでもデータの入力が出来ません。 「このレコードセットは更新できません」と下のほうに出ます。 フォームのプロパティのデータの更新の許可と、データ入力用のところは“はい”になっています。 私では原因がわかりません。わかりにくい質問でしょうが、どなたかご指導お願いします。

  • Accessのフォーム

    Access2003を使用しています。 テーブルまたはクエリを元に作成したフォームにはテーブル・クエリに入力されているデータが表示されますよね? それらのデータをフォームから変更出来ないようにする方法はありますか? データ自体を非表示(入力用フォーム)にするのではなく、既存のデータは表示されるけど変更は出来ないという状態にしたいです。 ちなみに新規入力は行えるようにしておきたいです。 よろしくお願いします。

  • アクセスでフォームでレコード編集、追加不可能

    エクセル2010でデータをテーブル作成をしました。アクセス2010でインポートして、インポートしたテーブルでフォームを作成。作成したフォーム使用して、データ変更できない。初心者用のテキストでは、フォーム・クエリから、レコード追加、既存レコードの編集が可能とありました。初心者なので、教科書通りでないと、何処が、どの様になり、フォームで追加、編集が不可能か分かりませんので教えて下さい。 ※OKWAVEより補足:「ひかりTVのサービスやISPぷらら」についての質問です。