• ベストアンサー

アクセスでフォームに追加項目を増やす場合、サブフォームにしたほうがよいのか、しないほうがよいのか教えてください。

Access2003を使用しています。 「取引先マスタ」という取引先の住所などが入ったフォームに契約書に関するデータも入力できるようにして欲しいと依頼が入りました。 それは契約の種別ごとに「契約締結日」、「取引先契約者」、「弊社担当者名」を設けます。 このような場合、契約書に関するデータは別のテーブルに入力してサブフォームにしたほうがよいのでしょうか? それとも「取引先マスタ」と同じフォームのなかに入れたほうがよいのでしょうか? あとで支障が出にくい方法をとりたいのですが、Accessに熟練されている方はどちらの方法を取られているのでしょうか? アドバイスをお願いいたします。

  • 375k
  • お礼率60% (176/289)

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

  • ベストアンサー
  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答No.2

基本的な考え方としてはテーブル構成の正規化を考える必要があります。 「取引先マスタ」に契約書に関するデータを追加する場合、同じ取引先で契約が追加されたり、複数の契約が発生することはないのでしょうか? 取引先1件に関して必ず1契約のみであれば、取引先マスタに必要な項目を追加することも考えられると思いますが、一般的には契約内容を登録する別テーブルに、「取引先コード」、「契約種類」、「契約締結日」、「取引先契約者」、「弊社担当者名」などのフィールドを作成し、取引先コードでリレーションシップを作成することが一般的かと思います。 その上でサブフォームなどを作成し、画面で複数契約を同時に確認できるようにするか、フィルタなどを使い契約の種類を条件にして対象を絞り込むように作る方が後々支障が出にくいと思います。

375k
質問者

お礼

とてもわかりやすい説明で助かります。 契約は追加されて多岐に及ぶ可能性がありそうですので、サブフォームにしてみます。 ありがとうございました。

その他の回答 (1)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

サブフォームのインタフェースが適するのは 親子関係(見出し・詳細関係)あるいは1対1の派生関係にあるテーブルの場合です 質問のユーザーの希望が取引先ごとに契約を一覧したいというものであれば 取引先マスタから作ったフォームに契約テーブルをサブフォームとしてはめ込めばいいでしょう その場合契約テーブルは別に設けることになりますが 契約の種類ごとにテーブルを分けるようなことはしないほうがいいですよ

375k
質問者

お礼

ありがとうございました。

関連するQ&A

  • Accessのメインフォームとサブフォームの使い方について

    Accessにてメインフォーム(単票形式)+サブフォーム(帳票形式)を使って進捗管理をするデータベースを作っており、新規にメインフォームで入力し、サブフォームで入力したデータを表示させてます。 サブフォームで更新したいレコードをクリックしたときにメインフォームでそのレコードを表示させるにはどのようにすればよろしいのでしょうか?

  • ACCESS フォーム

    ACCESSの初心者です。 フォームのメインフォーム、サブフォームを使ってデータを入力しています。 サブフォームにデータを入力後、マウスを使わないで次のレコードに移動したいのですが、どのような方法がありますか。   よろしくお願いします。

  • ACCESS2000のメインフォームサブフォーム間の移動

    Access2000でメインフォームの中に詳細を確認/入力するためのサブフォームを作成しています。 メインフォームの中のコントロールを最後まで入力(enterで移動)していくと、メインフォームの最後のコントロールの次はサブフォームの最初のコントロールに移動します。(これは普通ですよね?) サブフォームはデータの詳細によっては1レコードで終わるものもありますし、複数レコードにわたるものもあります。 サブフォームの入力が終了したときに、キー操作でメインフォームの次のレコードの頭のコントロールに移動する事はできますか? マクロをAccessの方から設定するくらいならできるのですが、自分でSQLをうんぬんする知識はありません。 よい方法があったら教えてください。

  • ACCESS2003 サブフォームのデータ

    こんにちは。宜しくお願い致します。 ACCESS2003でDBを作成しています。 メインフォームの中にサブフォームを作っています。 それぞれのID(オートナンバー)をリレーションシップとして設定し、連動しています。 メインフォームにデータを追加する際、サブフォームにデータを入力せずに、 次のメインフォームにデータを入れた場合、 サブフォームのオートナンバーが働かず、のちのちデータを入れた際にIDが違うため情報がずれてしまいます。 例えば、 メインフォームのID1~9のサブフォームには何も書き込まずメインフォームにだけデータを入力します。 その後、メインフォームのID10にあるサブフォームにデータを書き込むと、立ち上げなおしたときに、そのサブフォームへの入力したデータがID1のデータとして出てきてしまいます。 恐らく簡単なことだとは思うのですが、なにぶん初心者なものでさっぱり分かりません。 お分かりになる方、是非ともご教授お願いいたします。

  • ACCESSで、メインフォームとサブフォームがあるとき・・・

    Accessで、メインフォームとサブフォームがあり、メ インフォームのテキストボックスで期間を指定し、再 クエリを行うマクロボタンでサブフォーム上に期間指 定したデータのみが表示されるようにしています。 また、Access起動時に開くフォームがあり、そのフォ ームに、先ほど上述したメインフォームが開くマクロ ボタンを作成したところ、パラメータの入力画面が出 てきてしまいました。 恐らく、サブフォームの抽出用のクエリに設定してあ るものだと思いますが、これが表示されないようにす ることは出来ないのでしょうか?

  • サブフォームにした方がいいのか親フォームがいいのか

    単票・帳票フォームで使う場合、 サブフォームにした方がいいのか親フォームのままのほうがいいのか。 アクセスでフォームでデータを表示する際に、 フォームのデータシートビューの場合は、 フォームヘッダーにコントロールを置けないから、 データシートをサブフォームとして、親フォームに乗せてコントロールを設置しますが、 単票・帳票フォームの場合は、フォームヘッダーにコントロールが置けますよね。 その場合でもデータシートビューのように サブフォームにした方が良いのでしょうか? そもそもどういう時にサブフォームにした方が良いのかわかりません テーブルやクエリのデータをフォームとしてデータシートビューで表したい上、 コントロールも設置したい時にサブフォームにするべきで、 それ以外(単票・帳票フォーム)はフォームのまま使うべきでしょうか? 添付の画像は、 帳票フォームをサブフォームに載せずにコマンドボタンなどを置いたバージョンです。

  • Access2000フォーム/サブフォームにつおて

    Access2000でフォーム/サブフォーム(売上伝票)を作っています。 フォーム(売上伝票メイン)には伝票番号、売上先などを入力・・・ サブフォーム(売上伝票サブ)は商品、数量、金額などを入力します。 そこで質問ですが、サブフォームの商品は商品コード(コンボボックス)を入力すると該当する商品名、単価などを商品台帳から引いてくる、としたいと思い、商品コードの「更新処理後」に以下のコードを記述しました。   Me![商品名] = DLookup("[商品名]", "[商品台帳]","[商品コード]= Forms![売上伝票メイン]![売上伝票サブ]![商品コード]")     サブフォーム上の商品名に商品台帳の商品名を入力するとしたつもりなのですが、何も表示されません。  単価も単位も同様です。  この方法ではだめなのでしょうか?  

  • アクセス2003サブフォームで選択したデータをメインフォームで表示したいのです。

    得意先のデータベースを作っています。 メインで詳細データを入力し、 会社名の一部で検索できるようにしてあります。 その検索の結果をサブフォームに データの一部を表示し、 複数ある場合はサブフォームで選択したデータを メインフォームに反映させたいと思っています。 アクセス初心者の私でもできる方法はないでしょうか?

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

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

  • アクセスのサブフォーム複製について

    アクセス2007で請求書の管理をするデータベースを作っています。 アクセス2002でテキストにのっているようなデータベースを作ったことはありますが、2007は使うのが初めてで会社の請求書管理なのでテキストにのっていない事はネットで調べながら作っています。 請求書をフォームから入力する際、複製ボタンを作ってメインとサブフォームを新しい請求書にコピーしたいのですが、メインしか複製されません。他の方の同じような質問も見ましたが、イベントプロシージャの中身を記載して回答しているのがほとんどなので、手順が分かりません。追加クエリでやるといいと見ましたが、詳しいやり方を教えていただけないでしょうか。 どこのイベントプロシージャを書けば回答できるかなども分からないので足りなければ教えてください。 請求書テーブル  請求ID(オートナンバー)  日付  取引先ID(取引先マスターから)  工事名  現場名  値引  備考  印刷済 請求明細テーブル  請求明細ID(オートナンバー)  商品名  数量  単位  単価  備考   請求書記録クエリ  取引先マスターの取引先ID、取引先名などと請求書テーブルを合わせて作りました。 請求書記録クエリと請求書明細テーブルからフォームを作りました。 メインフォーム  請求書テーブルとほぼ同じ サブフォーム  請求書明細テーブルの内容  合計、消費税、値引き後の合計など よろしくお願いします。