Accessでの質問!

このQ&Aのポイント
  • Accessで作成中のシステムで問題が発生しています。
  • 関連テーブルのリレーションシップ設定について質問です。
  • フォームの製作所コンボボックスの動作について問題があります。
回答を見る
  • ベストアンサー

Accessでの質問!

お世話になります。 Accessで次のようなシステムを作っているのですが、やりたいことができません。 【テーブル】    ・社員情報テーブル(ID、社員コード、所属、氏名、製作所A、製作所B)    ・品物テーブル(ID、日付、品物、製作所)    ・製作所テーブル(ID、製作所)⇒製作所には製作所Aと製作所Bしかありません。    ・関連テーブル(ID、社員ID、品物ID)         関連テーブルの、社員IDは社員情報テーブルのIDと、品物IDは品物テーブルのID     でリレーションシップを設定しています。 【フォーム】    「品物テーブル」      ID[ ] 日付[ ] 品物[ ]      製作所[  ](コンボボックスで製作所テーブルから)    「サブフォーム 社員情報テーブル、関連テーブル」      社員コード[ ] 所属[ ] 氏名[ ] 製作所A[ ] 製作所B[ ]      社員ID[ ] 品物ID[ ]

  • bo281
  • お礼率19% (12/63)

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

  • ベストアンサー
noname#140971
noname#140971
回答No.6

要は、<受注>という主表があって<受注_明細>という従表があるということかと。 それならば、主フォーム、サブフォームの関係も理解できます。 <受注> ID__日付____________品物 ------------------- 1___2007/01/10_品物_A 2___2007/01/12_品物_B <受注_明細> ID__受注_ID__担当社員_ID_担当製作所_ID -------------------------------- 1___1__________1_________________1___________________ 2___1__________2_________________2___________________ 3___2__________1_________________2___________________ 受注1は、担当が1と2でそれぞれに製作所が1と2である。 受注2は、担当が2にみで製作所は2である。 <フォームの初期形態> ID:______[_____1] 日付:__[2007/01/10] 品物:__[品物_A_______________] =[明細]================== [担当社員_ID][担当製作所_ID] [_______________1][___________________1] [_______________2][___________________2] ======================== ・[ID][受注_ID]も、サブフォームに配置しているとします。 これが、最も基本的な初期形態。 <社員データを自動表示させるには> =[明細]============================================================ [社員コード][社員名_____][所属_____________][担当製作所][担当製作所_A][担当製作所_B] [_________101][中村_太郎_][営業第一課___][製作所_A___][_________________10][_________________3] 初期形態をこのように変化させるには、フォームのレコードソースを変更します。 レコードソースは、クエリで[受注_明細][社員]から列を選ぶだけです。 [社員.社員名][社員.所属]を加えること可能になります。(これらの参照列は、編集不可に!) [社員コード]は、単に、[担当社員_ID]をコンボボックスを利用して[社員コード]を表示しているだけ。 [社員コード]が選択されれば、その他は自動的に更新表示されます。 さて、ここまでは基本中の基本。もし、この説明で判らなければ入門書を再読して下さい。 <製作所の件数も表示したい> SELECT 受注_明細.ID, 受注_明細.受注_ID, 受注_明細.社員_ID, 受注_明細.製作所_ID, 社員.社員コード, 社員.名前, 社員.所属, DCount("*","受注_明細","製作所_ID=1") AS A, DCount("*","受注_明細","製作所_ID=2") AS B, * FROM 社員 INNER JOIN 受注_明細 ON 社員.ID=受注_明細.社員_ID; フォームのレコードソースに件数集計列を追加します。 さて、[担当製作所]を入力しても、この件数集計列は即座には更新されません。 VBAにて強制的に明細の入力レコードを保存するという工夫が必要です。 ※まず、<社員データを自動表示させるには>までを成功させる。 ※次に、<製作所の件数も表示したい>のクエリでの列のビルド、またがズームでの生成。 ※このように、手順を追っていくことです。 ※質問は、この一つひとつの段階で判らない点を行うのがいいです。 ※ちょっと、丸投げ臭いですよ!

bo281
質問者

お礼

ありがとうございました。 大変参考になりました!もっと自分で勉強しなければなりませんね…。 また何かありましたらよろしくお願いします。

その他の回答 (5)

回答No.5

とりあえず、サブフォームについて・・ 以前回答したものです。 手前味噌ですみません。 http://oshiete1.goo.ne.jp/qa2690050.html

noname#140971
noname#140971
回答No.4

<訂正> 製作所B担当回数ControlSource   =DBCount("*", "受注", "担当社員_ID=" & Me.担当社員_ID & " AND 担当製作所_ID=2")

noname#140971
noname#140971
回答No.3

<社員> ID_社員コード_所属___________氏名 ----------------------------- 1__101__________営業第一課_中村 太郎 2__102__________営業第一課_鈴木 健一 <製作所> ID_名前 1__製作所A 2__製作所B <受注> ID_日付____________品物____担当社員_ID_担当製作所_ID 1__2007/01/10_品物_A_中村 太郎____製作所A 2__2007/01/12_品物_B_ 鈴木 健一___製作所B ※[担当社員_ID]、[担当製作所_ID] はコンボボックスで[社員.氏名]、[製作所.名前]を表示。 このようなテーブル設計であれば、 (1)関連テーブルが不要。 (2)メインフォーム、サブフォームなどというややこしい作り込みも不要。 (3)担当回数も、ただ、製作所A担当回数.Query、製作所B担当回数.Queryを実行すれば良い。 製作所A担当回数.ControlSource   =DBCount("*", "受注", "担当社員_ID=" & Me.担当社員_ID & " AND 担当製作所_ID=1") 製作所B担当回数ControlSource   =DBCount("*", "受注", "担当社員_ID=" & Me.担当社員_ID & " AND 担当製作所_ID=1") と思いましたが・・・。

bo281
質問者

補足

ご回答ありがとうございます。 補足となるのですが、   ・一つの品物について1~3人で担当することがあるためサブフォームを作成しています。   ・社員テーブルでは、所属が変更となる場合があり、前の所属で担当した品物についての記録を残したいので、関連テーブルを使用してあります。   ・できれば社員コードを入力した時点で、社員氏名等の社員テーブルの内容を自動的に表示させたい   (社員件数が多いためコンボボックスから社員氏名を探すのは面倒なので) 説明不足でした。。

noname#30686
noname#30686
回答No.2

こんばんわ。 やりたいことが書かれていないので・・・。 補足お願いします。

回答No.1

やりたい事はどの様な事でしょうか?

bo281
質問者

補足

やりたい事を書くのを忘れてました…。 すいません。 ◎やりたいこと   1.サブフォームに社員コードを入力した時点で、社員コードに該当する社員氏名などを     社員情報テーブルから自動的に入力させたい。(該当データが無い場合はそのまま入力)     ※所属が変更となる場合があるので最新のデータを自動入力させたい。   2.メインフォーム「製作所コンボボックス」のデータ(「製作所A」または「製作所B」)を 参照して、サブフォーム内の「製作所A」または「製作所B」に担当回数を自動計算して 入力したい。(初めて担当のときは自動的に「1」を、2回目以降の時は前のデータを 社員情報テーブルから検索し、+1にして入力したい。)   3.「2.」のところで、製作所コンボボックスの選択が変更された場合に、担当回数を再計     算させたい。     (「製作所A」から「製作所B」に変更した時に、担当回数「製作所A」を-1、「製作所B」  を+1としたい)   4.レコードが削除された場合、自動的に担当回数を-1と再計算したい。 (例:4件のデータ中、2件目のデータが削除された時など) 以上の4つをやりたいのですが方法がわかりません。 ご回答よろしくお願いいたします。

関連するQ&A

  • Accessのメインフォームとサブフォーム

    メインフォームのコマンドボタンからサブフォームのテーブルを操作することは可能でしょうか? 【メインフォーム】    日付[_2006/2/3]   『回数A(コマンドボタン)』    品物[_りんご]    『回数B(コマンドボタン)』    製作所[_青森]  【サブフォーム】     社員コード 所属   氏名   回数A 回数B     [_1234]  [_福島] [_山田] [_1]  [_0]     [_2345]  [_山形] [_佐藤] [_1]  [_0] とあるときに、『回数B(コマンドボタン)』をクリックすると、サブフォームの社員コード 「1234」と「2345」の回数Bに「1」(回数B+1)を入力し、回数Aを「0」(回数A-1) としたいのです。 どのようにすればいいのでしょうか? よろしくお願いします。

  • Accessのフォームで

    教えてください。下のようなテーブルがあり、これを元にフォームを作成したいのですがいい方法が見つかりません。 【テーブル】  品物テーブル(品物ID、品物、製作所)  社員テーブル(品物ID、社員コード、氏名) このテーブルを元にして下のようなフォームを作りたいのです。 【フォーム】  品物ID [テキストボックス]  品物 [テキストボックス]  製作所 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス] ※社員コード、氏名が3つあるのは、同じ品物を3人が作成することがあるため。(この部分で悩んでいます) このようなフォームを作ることは可能でしょうか? また参考になるようなサイトなどあれば教えてください。 よろしくお願いします。

  • AccessのDLookupについて

    AccessのDLookupについての質問です。 いろいろ調べたのですがわからなかったので教えてください。 テーブル「社員」…ID、社員コード、氏名、所属、回数 フォーム…テーブルと同項目 フォームで社員コードを入力すると、自動的に氏名、所属が表示されるようにしました。 しかし、所属が変更になった社員氏名がうまく表示できません。 ~例~ ID_社員コード_氏名 _所属_回数 1_1234   _山田 _東京_1 2_1234   _山田 _東京_2 3_1234   _山田 _大阪_3 とあったときに、表示したいのはID_3のデータなのですが、ID_1のデータが表示になってしまうのです。(回数が最大の氏名、所属を表示したい) x = Nz(DMax("回数", "社員", "社員コード=" & [社員コード]), 0) Me!氏名 = DLookup("氏名", "社員", "社員コード=" & [社員コード]) _ & " and 回数=" & x) としています。エラーは出ません。 どこが変なのでしょう? よろしくおねがいします。

  • Accessで…

    アクセス初心者です。 今、データベースを作っているのですが、テーブルに以下のようなデータがあります。 日付 社員コード1 氏名1 社員コード2 氏名2 12/1  1234      A    2345      B 12/3  2345      B のようにデータが入っているのですが、このデータを、 「社員コード」別に何回入っているかをカウントしたいのです。 どのようにするのがいいでしょうか? よろしくお願いします。

  • Access2002の検索について

    社員マスターテーブル 社員ID   テキスト型 氏名   テキスト型 しめい   テキスト型 部署名   テキスト型 研修マスターテーブル 研修ID   数値型 研修名   テキスト型 受講リストテーブル 受付ID   数値型 受付日   日付時刻型 受講日   日付時刻型 社員ID   テキスト型 研修ID   数値型 研修受付クエリ 社員ID   テキスト型(受講リストテーブル) 氏名   テキスト型(社員マスターテーブル) しめい   テキスト型(社員マスターテーブル) 部署名   テキスト型(社員マスターテーブル) 受付ID   数値型  (受講リストテーブル) 受付日   日付時刻型(受講リストテーブル) 受講日   日付時刻型(受講リストテーブル) 研修ID   数値型(受講リストテーブル) 研修名   テキスト型(研修マスターテーブル) 社員が何の研修を受講したのか履歴がほしかったので「社員マスターテーブル」と「研修受付クエリ」を使ってメインサブフォームを作りました。 やりたい事は、このメインサブフォームに検索のボタンを作りたいのです。 社員IDまたは社員名または受講日のいずれかを入力するし検索ボタンをクリックするとメインサブフォームに結果を出したいのです。 マクロのフィルタ?をやってみたのですがよく意味が分からずできませんでした。 どうぞお手数ですがご教授頂けないでしょうか?

  • Access2002 2つのテーブルのマージ方法

    いつもお世話になっております。 クエリについてお聞きします。 現在、2つのAccessDBが稼動しており、それを1つにまとめる作業をしています。 2つのDBには似通ったテーブルが存在し、それをマージする方法で悩んでいます。 テーブルA ・社員番号 ・社員氏名 ・フリガナ ・会社コード ・部署コード テーブルB ・従業員コード ・従業員名カナ ・従業員名 ・所属コード フィールドの定義としましては、 社員番号=従業員コード 社員氏名=従業員名 フリガナ=従業員名カナ 部署コード=所属コード となります。 全てテキストのレコードです。 これを、テーブルAを正にして、テーブルBのデータをAにマージしたいのです。 要件としましては、 1.テーブルAに存在する社員コードにマッチするレコードはそのまま残す(Bのデータは無視) 2.テーブルAに存在せず、Bに存在するものをAに追加する ということです。 クエリを使って色々試しましたが、どうしてもテーブルAに存在するものもアップデートしてしまい、困っています。 どなたかご教授願えれば幸いです。 よろしくお願いいたします。

  • Access リレーションとデータの参照について

    パソコンはアクセスとエクセルマクロの入門書を読み終えたレベルです。 只今、注文実績管理をする為にアクセスを構築していますが思うようにできません。 職場でPCの相談する相手がいないため、大変困っています。どなたかお知恵をください。 相談の内容ですが、【C】の注文テーブルにある「注文番号」と「数量」と「日付」で 期間中の発注実績の集計をしたいと考えています。 【B】と【C】がまったく関連付けることができません。 【A】顧客テーブル    (1)ID(オートナンバー)    (2)発注コード    (3)氏名     (注)顧客テーブルにある「発注コード」がローマ字と数字の組み合わせで        、これでリレーションシップを設定したいのです。 【B】商品テーブル    (1)ID(オートナンバー)    (2)注文番号    (3)品名    (4)金額 【C】注文テーブル    (1)ID(オートナンバー)    (2)発注コード    (3)日付    (4)氏名    (5)注文番号1    (6)注文番号1(数量)    (7)注文番号2    (8)注文番号2(数量)    (9)注文番号3    (10)注文番号3(数量)     ・     ・     ・     注文番号50     注文番号50(数量)

  • Accessリレーションシップ

    Accessにて、 テーブルA(個人情報) ●個人コード ●名前 ●住所  ・  ・ テーブルB(個人ごとの数量管理) ●個人コード ●数量 上記のようなテーブルがあるとします。 これは、1:1のリレーションシップにしたいのですが、 クエリAを作成して ●個人コード(テーブルB) ●名前(テーブルA) ●数量(テーブルB) 個人コードを入力すると、名前を参照するというふうに したいのですが、1:1のリレーションシップだと個人コードの入力時に 参照はできないのでしょうか? 一旦閉じて、開くと参照していますが・・・。 良いご意見がありましたら、よろしくお願いします。

  • SQL文をどう記述すれば良いか教えて下さい。

    テーブルAが以下の様に在るとします。 連番(ユニークキー)/日付/社員コード/所属コード そして、社員コード、所属コードの名称が、テーブルBに登録されています。 区分/コード/名称 ここで、区分+コードでユニークキーとなっていて、区分=1は社員コード、区分=2は所属コードとなっています。 単純に、テーブルAから、ある日付を指定して、連番・社員コード・所属コードを取得する場合、SQL文は以下の様になると思います。 SELECT 連番,社員コード,所属コード FROM テーブルA WHERE 日付='20030401' この時、同時に、テーブルBから社員コードに対応する名称、及び所属コードに対応する名称を取得したい場合は、どの様に記述すれば良いのでしょうか?

  • Accessのテーブル構成について

    現在、Accessの勉強のため、社員名簿のデータベースを作ろうとしています。 そこで、↓のようなマスタ構成を考えています。 社員マスタ ・社員番号 ・氏名 ・所属している部コード1 ・所属している課コード1 ・所属している部コード2 ・所属している課コード2 ・所属している部コード3 ・所属している課コード3 ・所属している部コード4 ・所属している課コード4 部マスタ ・部コード 部名 課マスタ ・課コード 課名 ※各部署の兼任があるので、一人が複数部署に所属しています。 これでリレーションシップを作成する場合、 社員マスタの部コード1~4全てと、部マスタの部コードを リレーションシップでつないで、社員マスタの課コード1~4全てと、課マスタの課コードをリレーションシップでつながないといけないんでしょうか? 社員マスタの部コード1と部マスタの部コードだけつないでも、 社員マスタの部コード2~4までの部名が表示されません。

専門家に質問してみよう