• ベストアンサー

Accessでメイン、サブホームが作れません

Accessで(1)顧客テーブル フィールド名 顧客コード(キー)        顧客名     (2)販売記録テーブル フィールド名 顧客コード        商品        レジNO     (3)レジテーブル フィールド名 レジNO(  キー)        年月日    でメインに顧客名をサブホームに年月日と商品を表示するメイン、サブフォームを作成したいのですがどのようにしたらいいのでしょうか?

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

  • ベストアンサー
  • saikumi
  • ベストアンサー率33% (18/53)
回答No.4

検索をするならば、検索用の非連結テキストボックスを「フォームヘッダー」に作成します。 1.フォームヘッダーに検索用の非連結テキストボックスを作成し、名前を「検索テキストボックス」と付けておく。(名前は何でも構いません) 2.その横に、検索用のコマンドボタンを作成する。 3.マクロを作成する。 マクロを開いて、マクロ名列を表示する。(表示メニューの「マクロ」でマクロ名の列が出ます) マクロ名:「コード検索」 アクション:「フィルタの実行」 アクションの引数(Where条件式):[顧客テーブル]![顧客コード]=[Forms]![F顧客フォーム]![検索テキストボックス] ↑の条件式はサンプルです。 ご自分の、”テーブル”の顧客コードと、”フォーム”の検索テキストボックスを=で結びます。 Where条件式のボックス右横の...(ビルド)ボタンを使用すると便利です。 4.このマクロに「M」と名前を付けて保存。(名前は何でも構いません。) 5.フォームの検索ボタンのプロパティで、「イベント」タブの「クリック時」プロパティに、今作成したマクロを割り当てます。 「クリック時」プロパティの横の▼をクリックすると、今作成した「M.コード検索」の名前が表示されるので、それを選ぶ。 これで、作成できると思いますよ。 ちなみに、このままだと、フィルタが実行されたままになってしまうので、もし出来るようならば、フォームの「検索」ボタンの横にもう1つコマンドボタン(例:「全て表示」)を作成し、全部のデータを表示するようにしておくと便利です。 手順は上記と同じです。 先ほど作成した「M」のファイルの「コード検索」マクロの下に、「全て表示」を作成します。このとき、上の「コード検索」マクロとの間は、1行以上空けてください。 マクロ名:全て表示 アクション: 「全レコード表示」 「値の代入」     :アイテム コード検索     式 Null 「コントロールの移動」:「コード検索」 上記マクロをフォームの「全て表示」ボタンの「クリック時」プロパティに設定すると、全てのデータを表示できて、次の検索がしやすいですよ!

hodenasu
質問者

お礼

いろいろ次から次と愚問を丁寧にお教え頂き本当にありがとうございました。目からうろこの数日でした。 今後ともどうぞよろしくお願いいたします。

その他の回答 (3)

  • saikumi
  • ベストアンサー率33% (18/53)
回答No.3

1つ確認なのですが、 「顧客テーブル」の「顧客コード」と、 「販売記録テーブル」の「顧客コード」を 両方ともに「主キー」にしていませんか? もし、そうならば、 「販売記録」テーブルの「顧客コード」を 「数値型」でフィールドサイズを「長整数型」にして みてください。 代わりの主キーには、「管理NO」(何でもいいのですが)などのオートナンバー型を設定してみて下さい。 そうすれば、No1の補足のようなメッセージも表示されなくなりますし、ご希望のメイン、サブフォームもうまくいくと思いますよ。

hodenasu
質問者

補足

ありがとうございました。販売記録手テーブルに管理NOを作成し主キーにしましたらできました。 メインに顧客コードと名前 サブに年月日、商品、数量単価が出ました。 今度そのメインの顧客コードに別の顧客コードを入れたらサブの方は連動しましたメインの名前が変わりません 何度も申し訳ありませんが、このできたフォームで メインの顧客コードに値を入れたらその顧客に対するデータを取り出すのにはどのようにしたらいいのでしょうか?よろしくお願いいたします。

  • saikumi
  • ベストアンサー率33% (18/53)
回答No.2

テーブルの切り分けを拝見して思ったのですが・・・ (3)レジテーブル フィールド名 レジNO(  キー)        年月日   と分けるのはどうしてですか? 基本的にテーブルに分ける場合は、データが繰り返し出てこないようにするために、1コードにつき1つの不動的なデータを割り当てます。 例えば、上記の場合だと、売上管理などをする場合に、年月日は都度発生しますよね。 (もし、レジNOと、そのレジ自体を購入した日付を記録しておきたいというような場合なら、購入した日付はこの先ずっと変わらないと思うので納得できますが・・・) 私が思うテーブル分けは (1)商品テーブル フィールド名:商品コード(主キー)、商品名 (2)顧客テーブル フィールド名:顧客コード(主キー)、顧客名 (3)販売記録テーブル フィールド名:管理No(例ですが、オートナンバーなど)、顧客コード、商品コード、レジNo、年月日 これをもとに、リレーションシップを結びます。 その後、(1)商品テーブル(3)販売テーブルを元にクエリーを作成します。(このとき、クエリの中に、親テーブル(顧客テーブル)と結びつくための「顧客コード」も含めておいて下さい。) あとは、フォームウィザードで「顧客テーブル」と「作成したクエリ」を選択すれば、メイン/サブフォームができますよ。 ※レジNoについては、都度入力をするのが面倒なら、テーブルのデータ型で「ルックアップウィザード」を使用すれば、コンボボックスで一覧の値指定ができますよ! ※年月日などについては、テーブルのデータ型を「日付/時刻型」にして、フィールドプロパティの既定値に「Date()」を設定しておけば、入力当日の値が自動入力されますよ! あくまでも、販売管理をするためのテーブル作成と考えて回答させていただきました。 全くの見当違いだったら、すみません。

hodenasu
質問者

補足

丁寧なご指導ありがとうございます。 実はレジテーブルのフィールドを レジの精算NOと年月日で 販売テーブルのフィールドを 顧客NO、商品、数量、単価、レジ精算NO にして メインフォームにレジ精算NOと年月日 サブホームに販売テーブルとしたフォームで データを入力していました。 その販売テーブルを利用して メインフォームに顧客NO、顧客名 サブフォームに 年月日、商品、数量、単価の メイン、サブフォームを作りたいと思いましたが メインに顧客テーブルを持ってきて レジテーブル、販売テーブルを元にクエリーを作成したのですがうまくいかなかったのです。 最初からテーブルの作り方がまずかったのですかね? なんか、こんがらがってきて申し訳ありませんがよろしくお願いいたします。

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.1

> 販売記録テーブル > レジテーブル この2つのテーブルを元に、クエリを作成して置いてください。 で、 > 顧客テーブル このテーブルを元に、単票形式のフォームを作成し、ウィザードを使える状態で、 サブフォームを、上記のフォームに配置してください。 あとは、先に作成したクエリを指定し、リンクフィールドを選んでやれば いいと思います。

hodenasu
質問者

補足

早速のお教えありがとうございました。早速試したらメイン、サブフォームができましたが保存しようとすると次のようなエラーメッセージ出ます。 (インデックス、主キーまたはリレーションシップで値が重複しているのでテーブルを変更できませんでした。重複する値のあるフィールドの値を変更するかインデックスを削除してください。または重複する値を使用できる様に再定義してみてください。) どうすればよいかお願いいたします。

関連するQ&A

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

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

  • Access2000でメインサブフォーム

    テーブル1 商品ID 数値型(主キー) 商品名 テキスト型 ------------------ テーブル2 売上ID  数値型(主キー) 商品ID  数値型 月日   日付型 売上個数 数値型 --------------------- 以上のようなテーブルがあり、テーブル1を「メイン」テーブル2を「サブ」のメインサブフォームを作成しました。 しかし、「サブ」のデータが多いため、さらに、サブフォームの日付フィールドを使い、抽出をしたいのですが、方法がわかりません。(例えば、9/1以上9/10以下のような抽出) いろいろやってみは見たのですが、思うようにできません。メインサブフォームでさらにサブフォームのデータを抽出するということは無理なのでしょうか?

  • アクセスのクエリの作り方

    初心者なので教えてくださいませんか? アクセスでテーブルを複数作成して、それをクエリで結合するときに、どのテーブルからどのフィールドを選べばいいのかわかりません。 例えば・・・ 売上テーブル:NO 売上日 商品コード 数量 商品テーブル:商品コード 商品名 単価 この二つのテーブルを結合するクエリを作ります。 NO 売上日 商品コード 商品名 単価 数量 上記のフィールドを使用したいのですが、このとき、商品コードをどちらのテーブルのを使ったらよいのでしょう。 その判断は何からしたらよいのでしょうか。 うまく説明できているかわかりませんが、よろしくお願いします。

  • アクセスのサブフォームからメインフォームへキーで切り替えをする

    何度もお世話になっております。m(_ _)m アクセスのフォームで、サブフォームを作成しています。 EnterキーまたはTabキーで、フォームの中を進んでいくと、メインフォームのフィールドからサブフォームのフィールドへ進みます。 この進む順番は、タブオーダーで設定できるので問題ないのですが、 サブフォームの情報を入力し終えて、メインフォームへカーソルを飛ばしたい場合、どうすればいいのでしょうか? そのままEnterやTabを押しても、サブフォームの中の新規レコードが追加されるだけです。 自分でキーなどを設定できるのであれば、なおさら良いのですが・・・ とりあえず、基本的な操作方法として、サブフォームからメインフォームへ移るキーを教えてほしいです。 よろしくお願いします。

  • Access メインフォーム サブフォームにて

    お世話になります。 Accessにて メインフォームにコマンドボタンを置いて、クリックするとサブフォームのレコードが 次に行くようにしたいのですが、 コマンドボタン クリック Forms![メインフォーム]![サブフォーム名].Form!フィールド名.SetFocus DoCmd.GoToRecord , , acNext メインフォームとサブフォームのレコードが次に行ってしまいます。 サブフォームだけ次のレコードに行くには、どのようにすれば良いのでしょうか。 分かる方教えて下さい。 宜しくお願いします。

  • access 2007 のフォームの日付について

    access 2007 のフォームの日付について こんにちは さっそくですが質問させていただきます 立山秀利さん著の「ツボとコツがゼッタイにわかる本」で access2007の勉強をはじめたのですが、 二つのテーブル、 「注文履歴」  【フィールド:注文ID(主キー)、商品コード、個数】と、 「商品マスター」【フィールド:商品コード(主キー)、商品名、単価】を作成し、 商品コードを結合フィールドとして、リレーションを作ったのですが、 注文履歴のテーブルに、フィールド「日付(受注した年月日、書式は日付s )」を追加して、 作成→フォーム→その他のフォーム→フォームウィザードで、 この二つのテーブルから、by注文履歴のフォームを作成したのですが、 注文履歴のテーブルでは正しく日付が表示されていたのですが、 フォームの日付では#が十個ぐらいならんで、表示されてしまいました フォームでも日付が正しく表示されるようにするには、どのようにすればよいのか どなたか、回答していただけないでしょうか よろしくお願いします

  • アクセスでの考え方

    アクセスで販売管理のようなシステムをつくっています。 見出部と明細部があるようなフォームを作成していますが、以下のような動作をさせたいときには クエリ、VBAなどなどなにをもってその動作を実現するかを教えてほしいです。 1.見出部顧客名と顧客住所を入力するようにしているのですが、顧客テーブルに顧客名と顧客情報のフィールドがあり、顧客名を選べば顧客住所が入るようにしたい。 2.明細部に販売商品を入力できるようになっていますが、見出し部に販売ID(オートナンバー型)を キーにしているのですが一度入力した販売IDがきまれば見出し部の顧客名などを変更できないようにしたい。 3.みなさんはアクセスでシステムを作るときこのような動作や制御をしたいときどのように実現するような考え方を持っていますか?、可能な限りクエリで実現できるように考えてVBAは極力組まないようにしている、あるいは逆に可能な限りVBAで組むようにしてクエリではしないようにしているなど、効率的なアクセスでの動作の考え方のヒントになるような考え方を教えてください。 以上3点です、よろしくお願いします。

  • accessのコンボボックスのことで質問です。

    accessを勉強しているのですが、ちょっとしたことで分からなくなってしまいました・・。 質問の内容なのですが、まずフォーム上にコンボボックスAとコンボボックスBを配置するとします。 レコードソースには仮に[情報テーブル]というテーブルが選択されているとします。 コンボボックスAには[情報テーブル]のフィールド名が、 例えば[顧客NO]、[商品]、[値段]というフィールド名が入っているとし、フィールドにはそれぞれ10件ずつデータが入力されています。 そしてコンボボックスAで[顧客NO]を選択するとコンボボックスBに[顧客NO]の10件のデータが挿入され、選択できるようにしたいのです。 他のフィールド名を選んだときにも同じようにコンボボックスBにフィールドのデータが入るようにしたいと思っています。 コンボボックスAにテーブル名を入れることはできたのですが、 コンボボックスAで選択されたフィールドのデータを、コンボボックスBで選択できるようにするというやり方がわからないのです・・。 accessは2002を使っています。 よろしくお願いします。

  • Access2000メインサブフォームでのレコード移動

    Access2000でデータベースを作っている中で、メイン/サブフォームを使用しています。 メインフォームで次レコードへ移動しようとすると、レコードNOは移動しているのですが、データ内容が変わりません。 私の予想なのですがサブフォームにあるレコードの数だけ、(メインフォームの)同一レコードの内容が表示されているようです。 ・次レコードへの移動はフォーム一番下の、デフォルトでついてるレコード移動のボタンを押しました。 ・(メインフォ-ムの)テーブルにはKeyを設定してあり、同じデータは存在していません。 以上ですが、不明な点がありましたらお知らせください。 もしお分かりになる方がおられたらお教えください。よろしくお願いいたします。

  • ACCESS エクセルから インポート

    アクセスは メインテーブルとサブ(サブフォームで入力)からできています。 エクセルのデータは メインの項目名とサブの項目名が入ってます。 エクセルのデータで メインテーブルのキーとなるものは 追加と更新が混在しています。 この状態で エクセルから アクセスのテーブルに インポートする方法がわかりません。 よろしくお願いします。

専門家に質問してみよう