アクセスでのテーブル構成と入力フォームについて

このQ&Aのポイント
  • アクセスで悪戦苦闘しています。どなたかお力を貸してくださいませ。
  • 下記の内容を入力するフォームを作成しています。工事番号、部門、工事名、契約日、発注者、住所、電話、FAX、メール、担当者、弊社担当者、請求書番号、請求日、請求金額などの項目があります。
  • テーブル構成は工事マスタ、部門マスタ、社員マスタ、請求マスタの4つのテーブルで構成されています。関連性や主キーが設定されており、ウィザードを使用して単票フォームやクエリを作成しています。しかし、入力エラーや既存レコードの表示に問題があります。また、請求日と回収日については別途質問させていただく予定です。
回答を見る
  • ベストアンサー

アクセスでのテーブル構成と入力フォームについて

アクセスで悪戦苦闘しています。 どなたかお力を貸してくださいませ 下記の内容を入力するフォームを作成しています (後に決められた形式で出力します) 工事番号 部門 工事名 契約日 発注者 住所 電話 FAX メール 担当者 弊社担当者 請求書番号 請求日 請求金額 請求書番号2 請求日2 請求金額2 請求書番号3 請求日3 請求金額3 請求書番号4 請求日4 請求金額4 請求書番号5 請求日5 請求金額5 請求合計(1~5の合計額) 回収日 回収額 回収額合計 回収日2 回収額2 回収額合計2 回収日3 回収額3 回収額合計3 回収日4 回収額4 回収額合計4 回収日5 回収額5 回収額合計5 注文書 有・無 完了(済・未) ...他省略 上記の内容で下記のようにテーブルを作成しました ◎工事マスタ 工事番号(主キー)/部門コード/工事名/契約日/注文書 有・無/**発注者/**住所/**電話/**FAX/**メール/**担当者/社員コード…以下略 ◎部門マスタ 部門コード(主キー)/部門名 ◎社員マスタ 社員コード(主キー)/弊社担当者 ◎請求マスタ 請求ID(主キー)/請負額/税/合計/請求書番号/請求日/請求金額 請求書番号2/請求日2/請求金額2/請求書番号3/請求日3/請求金額3/請求書番号4/請求日4/請求金額4/請求書番号5/請求日5/請求金額5/請求合計(1~5の合計額)/回収日/回収額/回収額合計/回収日2/回収額2/回収額合計2/回収日3/回収額3/回収額合計3/回収日4/回収額4/回収額合計4/回収日5/回収額5/回収額合計5 完了(済・未) リレーションシップ 工事コード...工事マスタ(1)請求マスタ(∞) 社員コード...社員マスタ(1)工事マスタ(∞) 部門コード...部門マスタ(1)工事マスタ(∞) に設定しました ウィザードを使って請求マスタの全項目を入れた単票フォーム(サブA)を作成 ウィザードを使って工事マスタの全項目が入った(クエリA)を作成し それをもとに、ウィザードを使って(フォームA)を作成し、サブフォームに(サブA(単票))を設定しました。 一応どうにか形にはなりましたが 本当は工事マスタ内の**がついているフィールドは 顧客マスタとして分けていたのですが フォームでうまく入力ができなかったので とりえず、工事マスタにくっつけています。 何度も同じ電話や住所を打つのは面倒ですし、 テーブルを一つにしたこと自体抵抗があります。 しかし、同じ発注者でも、工事によって担当者が変わるので こういう場合はどう対応するべきなのかわかりません。 また、顧客マスタを別につくり、 コンボボックスにして 反映させるという方法も試してみましたが 新規に入力する場合は、上記のフォームにそのまま 入力したいと思っています。 上記の内容で どのような設定をすればよいのでしょうか? ウィザードでで顧客マスタと工事マスタを選択したクエリを作成して試してみたのですが それだと、フォームを開いたときに、工事マスタの既存のレコードが表示されなかったり、入力エラーが出たりとどうもうまくいきません。 もうひとつの問題は請求日と回収日なのですが それは別途質問させていただきたいと思います。 説明下手ですが どなたかお力を貸してくださいますようお願いいたします

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

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

>新規に入力する場合は、上記のフォームにそのまま入力したいと思っています。 考え直されたがいいです。 ・請求書台帳には、顧客台帳を表示するだけが簡単です。 ・どうせ、顧客台帳登録フォームがないと不便です。 ・列[顧客台帳_ID]で0を入力されたら顧客台帳登録フォームをオープンし登録。 ・顧客台帳登録フォームを閉じると列[顧客台帳_ID]に新規登録が反映されている。 ・請求書台帳の顧客台帳の詳細データの表示も更新されている。 この方が簡単だと思いますよ。

その他の回答 (1)

noname#140971
noname#140971
回答No.1

まあ、後々のことを考えれば<ありきたりな設計>に戻すべきでしょう。 なお、判りやすくするために主キーは全て[ID]にしています。 なお、判りやすくするために連結している列名は、[テーブル名+ID]にしています。 *************************  顧客台帳 ************************* [ID]_[顧客名_____]_[読み________________]_[郵便番号]_[住所____________]_[電話___________]_[FAX____________] ___1__木下 健二____きのした けんじ_____1112222___東京都1-11___03-111-1111__03-111-1119 ___2__山田 太郎____やまだ たろう________1113333___東京都1-12___03-111-2222__03-111-2229 1、[顧客台帳]に列[読み]がないと、少し、検索が面倒になります。 2、[顧客台帳]に列[郵便番号]がばいと、住所の入力が面倒かと思います。 *************************  顧客側担当者名簿 ************************* [ID]_[顧客台帳_ID]_[表示順]_[担当者名___] __1___木下 健二_______________1___毛利 素直 __2___木下 健二_______________2____柴田 幸一 __3___山田 太郎_______________1____小島 一 __4___山田 太郎_______________2____山中 清 [顧客台帳_ID]=SELECT 顧客台帳.[ID], 顧客台帳.顧客名, * FROM 顧客台帳; 複数の顧客側の担当者は、このような[顧客側担当者名簿]で管理します。 3、列[表示順]を設けて主担当がトップに表示されるようにすると便利です。   これで、[表示順]=1は<既定の担当者>扱いできます。 *************************  社員名簿 ************************* [ID]_[弊社担当者] ___1___001:鈴木 一郎 ___2___002:中村 主水 4、[社員名簿]の[弊社担当者]のデータに[社員コード]を付けて並びを制御すると共に選択を容易にする手もあります。 *************************  部門一覧 ************************* [ID]_[部門名] __1___部門A __2___部門B *************************  請求書元帳 ************************* [工事番号]_[部門一覧_ID]_[工事名____________________]_[契約日_______]_[顧客台帳_ID]_[顧客側担当者名簿_ID]_[社員名簿_ID] 200812001__部門A__________東京湾護岸工事____________2008/12/01___木下 健二______毛利 素直_________________001:鈴木 一郎 200812002__部門A__________東京湾護岸工事追加分___2008/12/01___木下 健二______柴田 幸一_________________001:鈴木 一郎 5、[工事履歴]には[顧客台帳_ID]と[顧客側担当者名簿_ID]とを設けます。   これで、[顧客台帳_ID]が決まればコンボボックス[顧客側担当者名簿_ID]のアイテムも絞り込まれます。 [部門一覧_ID]=SELECT 部門一覧.ID, 部門一覧.部門名, * FROM 部門一覧; [顧客台帳_ID]=SELECT 顧客台帳.ID, 顧客台帳.顧客名, * FROM 顧客台帳; [顧客側担当者名簿_ID]=SELECT 顧客側担当者名簿.ID, 顧客側担当者名簿.担当者名, * FROM 顧客側担当者名簿; [社員名簿_ID]=SELECT 社員名簿.ID, 社員名簿.弊社担当者, * FROM 社員名簿; *************************  請求書明細 ************************* [請求書元帳_ID]_[行番号]_[請求書番号]_[適用税率]_[税抜請求金額]_[消費税額]_[合計請求金額] ___200812001_____________1___200812001________5.00%_____________\1,000__________\50___________\1,050 ___200812001_____________2___200812002________5.00%_____________\1,000__________\50___________\1,050 ___200812002_____________1___200812003________5.00%_____________\2,000_________\100___________\2,100 6、一番やっかいなのは、[請求書台帳]の[行番号]の管理です。   なぜなら、同じ請求書で3行の請求明細があって2行目が削除されることもあるからです。   その後、そのミスに気付いて2行目を追加もありえます。   ですから、かかる[行番号]は必要です。   しかし、この管理は少しややこしいです。 ともかく、テーブル設計が全てです。 ここで妥協しないで当初設計に立ち戻られることをお勧めします。 幾つかのコンボボックスのソースも合わせて示しています。 このようにテーブルの構造はデータを参照する上で非常に大事ですよ。

kuragemama
質問者

お礼

すいません、 だいぶ前に一度検証してみます!と お礼をしたつもりなのですが 反映されてませんでした  年末年始を挟んでしまってたので 検証作業が遅れてしまい お返事遅くなってしまって大変申しわけありません 上記のようなテーブル構成に変えてみました! いくつか課題はあるものの 理想的に動かせることができてとても感謝しています。 初心者の私に、とても丁寧にわかりやすいアドバイスをしていただき 本当に言葉にならないほど感謝しています。 ありがとうございました。 まだまだわからないことだらけなので また何かありましたら どうぞよろしくお願いいたします 本当にありがとうございました!!!!!!!!!

関連するQ&A

  • アクセス フォーム上でのレコード抽出・ソート

    こんにちはアクセス2000で管理表をつくっています。 「工事マスタ」 工事ID、顧客ID、工事部門、契約日、請負額、追加額(以下略) 「顧客マスタ」 顧客ID、顧客名(以下略) などがあり、工事マスタを基にクエリAを作成し、 それをコントロールソースにもつフォームAを作成しました。 フォーム上のボタンやテキストボックスで レコードの抽出(フィルタ)を行いたいのですが いろいろ調べてみましたが、初心者なもので どう手をつけていいのかわからず困っています。 やりたいことは 1)工事部門(1・2)で、(1)のみのレコードを表示する その検索方法をコンボボックスでつくりたい 2)発注者名で検索をかけ、該当するレコードのみを表示する その検索方法をテキストボックスでつくりたい 3)契約日のソートをかける実行ボタンを配置したい 4)「請負額」「追加額」にそれぞれ消費税を計算して、その合計額「請負額+追加額+請負税+追加税」の《総合額》を自動計算しています。 その《総合額》の¥●●●~¥●●●という範囲に値するレコードを抽出したい です。 説明が足りない部分もあるかと思いますが どなたかご存知の方お知らせくださいませ。 また、参考サイトなども教えていただけると助かります。 どうぞよろしくおねがいします。

  • access フォーム間で情報が引き継がれない

    初心者です、よろしくお願いします。 仕様環境 WinXP Access2002 請求管理のシステムを作っています。 テーブルには 顧客マスタ(主キーは顧客番号でテキスト型 例:0001等) 請求マスタ(主キーは請求番号でテキスト型 例:A0001等) 明細マスタ(主キーは明細番号でオートナンバー ダミーみたいな感じで使っています。) そしてリレーションシップで顧客マスタ(1)→(多)請求マスタ(1)→(多)明細マスタになっています。 顧客マスタを元にしたフォーム(顧客入力フォーム)に顧客情報を入れて、 「請求書作成ボタン」を作り、そのボタンを押すと別のフォーム(請求書作成フォーム)に 飛ぶようにしているのですが、その際に顧客入力フォームに入力した情報を 引っ張っていくようにしたいのですが、うまくいきません。 ちなみに顧客マスタと請求マスタのリレーションは”顧客番号”でつなげています。 請求書作成フォームは請求書作成クエリから成り、 その中で顧客番号(テーブル:顧客マスタ)の抽出条件に[Forms]![顧客入力フォーム]![顧客番号]と 入れて”顧客番号つながり”で飛ぶようにしているのですが、 請求書作成フォームは開くのですけど、項目はすべて空白です。 またいろいろレコードを追加している内に、請求番号が既にあるものに対しては顧客情報も引き継がれることが判明しました。 構文が間違っているのでしょうか? 混乱しています、お助けください。

  • ACCESSで残高計算

    今回もぜひアドバイスをお願いします。 未請求の売掛金の残高を計算させたいのですが、うまくいきません。 [T受注] 受注CD(主キー) 工事番号 受注日 受注金額 受注内容 [T請求] 請求CD(主キー) 工事番号 請求日 請求金額 請求内容 上記のテーブルを基に下記のクエリを作成 [Q受注金額合計] 工事番号 受注金額合計: (受注金額の合計) [Q請求金額合計] 工事番号 請求金額合計:(請求金額の合計) 上記のクエリでさらにクエリ [Q請求残高] 工事番号 受注金額合計:Format(Nz([Q受注金額合計].[受注金額合計],0),"\\#,##0") 請求金額合計:Format(Nz([Q請求金額合計].[請求金額合計],0),"\\#,##0") 請求残高: Format([受注金額合計]-[請求金額合計],"\\#,##0") これを基に一覧のフォームをつくり、請求漏れなどをチェックしたいのですが...。 受注・請求双方に入力があれば問題はないのですが、請求側に入力がなければ 請求残高に反映されない(逆パターンも)ので困っています。 クエリで請求側の全工事番号に¥0を入れることも考えましたが、もう少し スマートな方法があればと思います。 どうかよろしくお願いします。

  • Access2003 合計値の求め方について

    Acdess超初心者です。ご存知の方がいらっしゃいましたらお教え下さい。 Access2003で請求書を作成しております。 メインテーブル 宛名、敬称、発行日、請求番号、件名、課税区分、小計、消費税、合計 サブテーブル  請求番号、項番、工事名、数量、単価 サブテーブルを基に作成したクエリ 請求番号、項番、工事名、数量、単価、金額 メインテーブルの請求番号とサブテーブルの請求番号は1対多のリレーションを組んでいます。 メインテーブルとクエリを基にフォームを作成して、メインフォーム(レコードソースはメインテーブル) 上にサブフォーム(レコードソースはクエリ)を配置しています。 サブテーブルの金額の合計をメインフォーム上の「小計」で求めたいのですが、方法が分かりません。 どのように作成するとメインフォーム上の「小計」でサブフォームの金額合計を求めることができるか お教え下さい。 初歩的な質問で申し訳ありませんが何卒よろしくお願い致します。

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

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

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

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

  • Accessでのフォーム入力エラー

    顧客管理を 顧客マスタ 受注明細 入金明細のテーブルを作成し、リレーションシップの設定をしてあります。テーブルには、この形で入力できるのですが、フォームをウィザードを使って作成(サブフォームのリンクされたフォーム)しました。 新規入力することができません。「テーブル’顧客マスタ’にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更をおこなうことはできません。」のメッセージが出ます。 どうしていいのか、わかりません。教えてください。

  • アクセスでテーブル入力用のフォームを他のテーブルのレコードを参照しながら入力するには

    こんにちわ アクセスでテーブルのレコードを作成するのに 他のテーブルのレコードを引っ張ってきて フォーム上で表示したいのですが うまくいきません たとえば、社員名テーブル(従業員番号と名前) 配属テーブル(従業員番号と営業所コード) 支社テーブル(支社名と営業所コードの上2桁) 営業所テーブル(営業所名と営業所コード)を作成しておきます 退職者が出るたびに 退職者テーブル用のフォームに 従業員番号を入力すると フォーム上にその人の名前・支社名・営業所名が表示され それを確認してから その他のデータをその同じフォームに 入力したいのです 今、試しに作ったのは テーブルに一度上書きしないとデータを引っ張ってこないの不便なのです よろしくお願いします

  • Access2002のリレーションについて。

    販売管理のデータベースを作成しています。 『販売店マスターテーブル』 販売店コード(主キー) 販売店名 郵便番号 住所 電話番号 営業担当者コード 『営業担当者テーブル』 営業担当者コード(主キー) 営業担当者名 『販売伝票テーブル』 伝票番号(主キー) 売上日 販売店コード この中で、『販売店マスターテーブル』から、販売店コード,販売店名,郵便番号,住所,電話番号,営業担当者コードを、 『営業担当者テーブル』から、営業担当者名を使って、新しいクエリを作成しました。 そのクエリを基にフォームを作成しましたが、フォームに新規レコードを入力できません。 念のため、販売店コードを『販売伝票テーブル』からとってきたら、新規レコードが入力できるようになりました。 これは、何か主キーの関係で入力できないんでしょうか。 もし、『販売伝票テーブル』から販売店コードをとらなくちゃいけないとしたら、それはナゼでしょうか・・。 初歩的なことで申し訳ありませんが、とても困っています。 どなたかお分かりになる方、教えて下さい。 よろしくお願いします。

  • 親フォームとサブフォーム間の演算

    どうぞよろしくお願いします。 現在、テーブルに[決定金額_1],[受け日_1],[決定金額_2],[受け日_2],[決定金額_3],[受け日_3] というフィールドがあります。 上記テーブルを基にクエリを作成し、【決定金額合計:[決定金額_1]+[決定金額_2]+[決定金額_3]】 というフィールドを設けて決定金額の合計を算出し、フォームを作成します。 [決定金額・受け日]×3と[決定金額合計]のフィールドを持ったフォームに、[F請求状況]という サブフォーム(帳票フォーム)を埋め込みました。 この[F請求状況]は、[請求日],[請求金額],[請求内容]がありフォーム上で[請求金額合計]を 算出しています。(=SUM([請求金額]) これは、決定した金額に対して複数回(多いときは5回ほど)請求を分ける時があるので 帳票フォームにしました。 親フォームの[決定金額合計]からサブフォームの[請求金額合計]を差し引いて [請求過不足]というフィールドを計算させたいのですが、どのようにしたらよいのでしょうか? なにとぞよろしくお願いします。

専門家に質問してみよう