• ベストアンサー

Access メインフォームにすべてのテーブルを

アクセス 超初心者です。 お恥ずかしいのですがまた 超初歩的なことで困っています。 テーブルが二つあり、 一つは 基本データテーブルで 顧客コード(主キー)- 社名ー住所 もう一つは 商品履歴で 顧客コード- 商品 - 数量 このような感じです。 で、顧客コードでリレーションシップを設定して メインフォームに顧客コード・社名・住所、 サブフォームで その顧客の 商品・数量を表示させているのですが 商品履歴テーブルにデータが無い顧客データは メインフォームに表示されませんよね? どうしたら全件表示されるようになりますか?

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

  • ベストアンサー
  • tamu1129
  • ベストアンサー率58% (1319/2258)
回答No.3

>次はサブフォームのデータを メインフォームに設けたテキストボックスで検索できるようにするのが目標です これはパラメータクエリ作成できるようになれば、簡単に実装できます 今、作成途中のようなのでもう一言 作っているデータベースのテーブル作り過ぎです 今回のような場合には 基本データテーブル これはOKです 商品履歴テーブル これもOKですが、商品コードというフィールドと購入日のフィールドを追加します(購入日はあとから検索する時など必要になると思います) ID(オートナンバー型でOK主キーにする)ー顧客コードー購入日ー商品コードー数量ー備考 もうひとつ必要なのが、商品を扱うテーブルです(ここに商品の分類を持たせます) 1つの商品が複数の分類に分かれる場合にはこれでは困りますが、そうではないですよね? 商品コード(主キーにする)-商品名ー分類ー単価(必要ならもうひとつ原価というフィールド) 必要なのは3つのテーブル 5つもいりません データ入力する際はテーブルにダイレクトにするのではなく、リレーションを張ったクエリを使って行うように リレーションは、基本データテーブルの顧客コードから商品履歴テーブルに向けてリレーションを張る もうひとつは商品を扱うテーブルから商品履歴テーブルの商品コードに向けて張る このクエリを使って入力すれば、リレーションを張った部分に関しては、商品コードを入力すれば商品名や商品の分類を自動で表示させる事ができます okcat1227 さんが作ろうとしている物は、顧客の情報を管理する為のテーブル・商品を管理する為のテーブル・販売履歴を管理するテーブルの3つが必要なのです

okcat1227
質問者

お礼

お礼が遅くなり申し訳ございません。 またまた超初歩的なことで躓いており なかなかやりたいことまでたどり着きません。 時間は掛かりそうですがアドバイス頂いたことを少しずつやってみます! ありがとうございました!

その他の回答 (2)

  • tamu1129
  • ベストアンサー率58% (1319/2258)
回答No.2

>ちなみに、テーブルは全部で5つあり ん?質問では2つのテーブルがあり、そのうちの基本データテーブルをマスターに、商品履歴テーブルをサブフォームにって内容です いつの間にか、使用しているテーブルが5つになってしまいました 基本的には、マスター部分とサブフォームの部分はどこかのフィールドで関連付けされている訳です 今回のような事を行う場合には、1つずつ検証してゆけば良いのです テスト的に1つフォームを作成し、メインフォームに基本データテーブルの顧客コード(主キー)- 社名ー住所を配置 サブフォームに商品履歴テーブルを1つ配置する そのフォームを開いてみてください 基本データテーブルの顧客コードのフィールドに値がある数だけフォームが表示されます この状態から、サブフォームを追加していって、最初に表示された数より表示が少なくなってしまうなら、追加したサブフォームのデータがマスター部分の基本データテーブルや他のサブフィールドのデータと整合性が取れていないという事です サブフォームに入れたい5つのテーブルの、構造ってどうなっているのですか?

okcat1227
質問者

補足

端折って説明してしまってすみませんでした。 結論から言うと すべてのフィールドが表示できました。 もともと会社で使っているアクセスファイルを加工して今回作り直しているのですが フォームを新しくするときに新規作成をしたら良かったものの デザインでフィールドをすべて選んでデリートして作り直したんです。 いま新規作成をしたら すべて表示されるようになりました。 次はサブフォームのデータを メインフォームに設けたテキストボックスで検索できるようにするのが目標です。 まずは自分で頑張ってみますがもし分からなければまた宜しくお願いします。 5つのテーブルの構造は まず基本データテーブルに顧客コード、社名や住所等のデータ。 そして他の4つのテーブルには 顧客コードー商品名ー値段ー備考など顧客への販売履歴が入っています。 顧客コードで基本データから4つのテーブルにリレーションシップを設定しています。 4つに分けているのは 販売した商品の分類で、 フォームでそれぞれ分類が異なることを分けて見やすく表示させたかったのと 一つのテーブルにフィールドをあまり増やしたくなかったので 4つに分けました。 多分、分けなくても見やすくてフィールドがたくさん増えない方法もたくさんあるのでしょうが・・・^^;

  • tamu1129
  • ベストアンサー率58% (1319/2258)
回答No.1

いえ、普通に基本データテーブルに登録されている顧客の分のデータは表示されます 商品履歴がある顧客分のデータについてはサブフォームにデータが表示されるが、商品履歴がない、顧客についてはサブフォームが空欄になるだけです この状態にならないなら、基本データテーブルと商品履歴テーブルに張られているリレーションシップの設定が正しくありません リレーションシップは片側のテーブルにデータがある場合、両方のテーブルにデータがある場合など設定が行えます 今回の場合には、基本データテーブル側から商品履歴テーブルの顧客コードに向けてリレーション張るようにすれば、きちんとデータ表示されますよ

okcat1227
質問者

補足

リレーションシップに方向があることを初めて知り、いま修正したのですが やはりすべて表示されません。 ちなみに、テーブルは全部で5つあり、 一つのフォームにサブフォームで表示させています。 基本データから 他4つのテーブルへリレーションシップの設定をしています。 どうして表示されないのでしょうか・・・

関連するQ&A