(テーブル名):(フィールド名)
商品テーブル:商品名。
単価数量テーブル:商品単価、数量、仕入番号、商品名。
仕入テーブル:仕入番号、仕入日、注文日、手数料、輸送費など。
売上テーブル:売上、販売日付、仕入番号、商品名。
リレーションシップ:一対多
商品テーブル商品名-単価数量テーブル商品名
商品テーブル商品名-売上テーブル商品名
仕入テーブル仕入番号-売上テーブル仕入番号
仕入テーブル仕入番号-単価数量テーブル仕入番号
このように作成しました。
ここで問題なのが、商品名の入力です。
仕入テーブルをメイン、単価数量テーブルをサブフォームにしてフォームを作成しました。
さて、商品名を単価数量テーブル商品名フィールドのサブフォームから入力・・・と思ったら、商品テーブル商品名フィールドに名前がないためエラーが出ます。(参照整合性をしているため)
サブフォームの入力フィールドを商品テーブル商品名に変更すれば入力できます。
しかし、重複した商品名を入力できません(重複しないに設定しているため)
何故このようなことをするか?ですが、同じ商品でも購入日が違えば単価が違う場合があります。
ですので単価数量テーブルでは同じ商品名を使用する必要があります。
しかし、商品テーブルでは同じ商品名は必要ありません。
もちろん先に商品テーブルに商品名を入力すれば問題ありませんが、入力効率から言って問題あります。
さてここで質問なのですが、一対多の多から商品名を入力して一側に反映できないでしょうか?
一側にすでに同じ商品名がある場合は反映してはいけません。
ちないにVBAやSQLはコピペぐらいはできますが、書けませんのでご了承を。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
ANo.3です
前の回答は ANo.1への補足を見る前に書き込みました あしからず
>そのため商品番号(商品ID)でつなげていません
何を目的としてデータ管理ソフトを使うか次第ですよね
請求書の発行まででよいなら 商品IDをつけなくてもいいのかもしれない
(て 言うか[商品テーブル]が必要ない?)
あと扱う商品の種類などと 誰がデータを入力するか ですね
ご存知のこととは思いますが
"さんま"、"サンマ"、"秋刀魚"、"鰶"は別の物としてコンピュータは扱います
かならず"さんま"で統一できるのならありかな?
>これが出来ないので困っています
え!?
どこで行き詰ってますか?
メインフォーム、サブフォームは理解されているようですが
「仕入テーブル」と「単価数量テーブル」からそれぞれ「仕入フォーム」、「単価数量フォーム」作っておいて、「仕入フォーム」のデザインビューで ツールボックスからサブフォーム/サブリーポート、ウィザードで「単価数量フォーム」と[仕入番号]で結びつければ とりあえずのものはできませんか?
この回答への補足
(て 言うか[商品テーブル]が必要ない?)
これに関しては私も考えましたが、あとで例えばメーカー名などを追加する場合
あったほうが簡単に追加できるので必要ないわけではないです。
>"さんま"、"サンマ"、"秋刀魚"、"鰶"は別の物としてコンピュータは扱います
>かならず"さんま"で統一できるのならありかな?
私しか使う予定がないので問題ないかと思います。
記憶が薄いので正確ではないかもしれませんが、商品テーブルにすでに入力
されている商品名は表示できたと思いますしコンボボックス?、間違えそうなものは入力禁止にします。
>どこで行き詰ってますか?
それは商品名を入力できない(商品テーブルに反映できない)という意味で。
フォームは出来ていますよ。
更新ボタンをつけるのが一番よさそうです。
No.5
- 回答日時:
補足:一対多の多から商品名を入力して一側に反映できないでしょうか?
その手順は、次のようです。
1、仕入伝票の行明細部で商品名を入力。
2、一側に反映する必要があるか否かをチェック。
3、反映する必要があれば1側を更新して商品の主キーを取得。
4、反映する必要がなければ既存の商品主キーを記録。
なお、私は参照整合性は<多から1へ>にしてきました。
この場合、一側に存在しなくてもエラーは発生しません。
ですから、質問者みたいに<エラーがでます!>というクレームは皆無。
<多から1へ>は、ユーザからエラーを隠蔽する上で有効です。
当然に、自前の参照整合性をチェックして告知する仕組みは必要。
この回答への補足
リレーションシップは参照整合性チャックを外して、
えーっと、更新クエリを作成して、更新ボタン(クエリの実行ボタン)を作るってことですかね?
う・・・ん? 違うかな?
>当然に、自前の参照整合性をチェックして告知する仕組みは必要。
うん?これもクエリでってことですかね?
>なお、私は参照整合性は<多から1へ>にしてきました。
商品テーブル←単価数量テーブル
こうすれば単価数量テーブルの商品名(商品ID)に入力は出来ますね。
(あとで商品テーブルに単価数量テーブルの商品名に入力した商品名を更新する必要がありますが。)
No.4
- 回答日時:
>入力するのが一番速いです。
もちろん、アプリケーションはそのように作ります。
メインフォーム
仕入番号:xxxxx
注文:2010年11月15日
仕入:2010年11月20日
サブフォーム
<商品名><単価><個数>
さんま:200円:10
さば:150円:15
まぐろ:100円:20
こういう入力を実現するには、先に示したテーブル設計が必須。
>そのためわざわざ一個一個同じ日付を入力するのは非効率です。
だから、標題部と行明細部に分けるんですよ。
この回答への補足
えーっと私が製作しているDBと違うので正直それは必要ないかと・・・・
というかそもそも同じような事はしています。
単価数量テーブルが仕入詳細テーブルにあたりますね。
ちなみに輸送料や手数料を単価数量テーブルに入れていないのは、
商品ごとに送料、手数料がかかるわけではないのでそうしています。
注文した商品の全体に対して送料、手数料はかかるので。
No.3
- 回答日時:
>一対多の多から商品名を入力して一側に反映できないでしょうか?
結論から言うと、出来ません(と、思う ^^; )
それを出来なくするための「参照整合性」です
Accessのある参考書によると
「参照整合性を設定すると、設定したテーブル間に以下のような規則が出来ます。
(1)主テーブルの主キーに存在しない値をリレーションテーブルの外部キーフィールドに入力することはできません(Null値を入力することは可能ですが、レコードの関連性はないとみなされます)。
以下略
では 参照整合性を設定しなければどうなるか、ですが上の解説のNull値の場合と同様に 商品テーブルに存在しない[商品名フィールド]を持つレコードが単価数量テーブルに入力されるだけです
ではどうするか
「商品テーブル」から「商品名入力フォーム」を作り、「『仕入テーブルをメイン、単価数量テーブルをサブフォーム』にして作ったフォーム」に「商品名入力フォーム」を開くコマンドボタンを配置
が一般的かなぁ
質問文の中に"主キー"について何も書かれていませんが どう設定されてますか?
主キーとは (前出の参考書より)
「リレーショナルデータベースでは、テーブルに格納されているデータをより速く検索、抽出することが重要です。そのためには、テーブルに格納されている各レコードを識別できるフィールドが必要になります。この情報(各レコードを識別できるフィールド)のことをテーブルの主キーといいます。」
商品テーブル:商品ID、商品名
単価数量テーブル:商品単価、数量、仕入番号、商品ID
とした方がよろしいかと
この回答への補足
なるほど・・・出来そうにありませんか。
いわれるやり方もありますね。
主キーは適当にテーブルに設定しています。
質問に書きそびれましたが、商品テーブルにも商品番号フィールドがあり、そのフィールドに主キーを設定しています。
No.2
- 回答日時:
補足:仕入テーブルの設計について
<仕入伝票明細>
id・・・・・・・・・・401
仕入伝票_id・・・・・・301
行番号・・・・・・・・1
行区分・・・・・・・・1=通常仕入、2=仕入返品、3=手数料、4=輸送費
商品在庫_id・・・・・・201
仕入単価・・・・・・・\2,000
数量・・・・・・・・・10
仕入、返品、手数料、輸送費等は<行区分>で区別します。
そうして、手数料や輸送費の場合の<商品在庫_id>は空値。
これで、<仕入単価>欄が、複数に発生する不具合が回避できます。
仮に、複数の<仕入単価>欄を用意すると計算は面倒になります。
*ただし、こういう最適化で<より面倒になる>のであれば、質問者流もあり。
No.1
- 回答日時:
<商品マスター>
id・・・・・・101
名称・・・・・パソコン
<商品在庫>
id・・・・・・・・・201
商品マスター_id・・・101
単価・・・・・・・・\2,000
期首在庫数・・・・・0
純仕入数・・・・・・10
純出庫数・・・・・・5
<仕入伝票>
id・・・・・・・・・・301
伝票番号・・・・・・・10001
日付・・・・・・・・・2011/10/30
<仕入伝票明細>
id・・・・・・・・・・401
仕入伝票_id・・・・・・301
行番号・・・・・・・・1
商品在庫_id・・・・・・201
仕入単価・・・・・・・\2,000
数量・・・・・・・・・10
質問者の設計は実に素晴らしい!
質問者が考えられたように、<商品マスター>と<商品在庫>とを分離するのが基本。
ただし、リレーションのやり方には、もう一工夫される必要がありそうですね。
<商品マスター.id>-<商品在庫.商品マスター_id>
つまり、<商品名>ではなくて<商品マスター>の主キーをリレーションに使います。
仕入伝票は、可能であれば<標題部>と<行明細部>とを分けます。
そうして、商品の入力は<商品在庫>の主キーとします。
なお、仕入単価は<仕入伝票明細>にも保持します。
そうしないで、<商品在庫>からの参照方式とすると実に面倒なことが発生します。
質問の問題点は、多分、テーブル設計の最適化を通じて解決されます。
そういうことで、これでもって回答とします。
この回答への補足
私の持論ですが、データーベースで一番重要なのは、入力をいかに効率よくできるか
にかかっていると思います。(入力する数が膨大になるほど)参照効率などはその次です。
さて、そこで私は商品テーブル商品名フィールドを主キーにしわざと繋げました。
問題なのは入力時です。どの番号がどの名前かなんて覚えてられませんし、
ボックスリストなどの選択しきも実に非効率です。入力するのが一番速いです。
そのため商品番号(商品ID)でつなげていません。
私は商品管理などのデーターベースを作った事がありませんし(統計用のものは過去作りましたが)、経理を学んでいないのでその部分でも悩ましいのですが、後々の事を考えて仕入れた数と売れた数は別にフィールドを持ったほうがよさそうですね。
販売した商品の仕入単価は仕入番号で参照すればわかりますが、売上テーブルにあったほうが良いのかどうかよく分りませんが、そこのあたりはまた考えます。
問題となるのは、仕入日(実際に商品が手元に来た日)と注文日(発注した日)をいかに利用するかです。
商品はまとめて色々な商品を発注します。
まとめて発注し、また別の日に商品はまとめて来ます(場合によっては分割されてきますが)、そのためわざわざ一個一個同じ日付を入力するのは非効率です。
例えば
メインフォーム
仕入番号:xxxxx
注文:2010年11月15日
仕入:2010年11月20日
サブフォーム
<商品名><単価><個数>
さんま:200円:10
さば:150円:15
まぐろ:100円:20
このように同じ日に注文、仕入したものをまとめて入力したいわけです。
これが出来ないので困っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Visual Basic(VBA) EXCEL関数LOOKUPとFILTERについての質問です 1 2022/12/21 05:53
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Excel(エクセル) Excel 関数 vlookupなどの使い方について質問です。 シート1に品番、商品名、単価、発注条 6 2022/06/15 19:16
- その他(データベース) accessについて 2 2022/05/31 16:58
- 国産バイク 大型バイク カワサキz900rsに付ける ヨシムラのマフラーの質問です、 【 商 品 I D 】14 2 2023/06/27 13:43
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス・クエリ内のフィール...
-
Accessでコードを入れると名前...
-
Access schema.ini使用方法に...
-
Accessのクエリでの集計
-
Excel 2019 のピボットテーブル...
-
IT用語について質問です。 以前...
-
エクセルVBAで5行目からオート...
-
Excelの表、重複データ2行を1...
-
アンドロイド おサイフケータイ...
-
Accessでテーブルからテーブル...
-
1ヶ月に土日は何日あるか
-
VBA 得意先ごと且つ日付ごとに...
-
顧客・売上管理のツールをさが...
-
アクセスのテーブルを分ける理...
-
SQL文 2つのテーブルから、グ...
-
Accessにて検索結果の一覧表示...
-
「直需」の意味を教えてください
-
Accessのフィールド数が255しか...
-
ORACLEで一番最初の結果だけを...
-
access 集計クエリの並び順。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでコードを入れると名前...
-
Msgboxにテーブルのレコードを...
-
関連がある複数のテキストファ...
-
アクセスでの複数のテーブルで...
-
アクセス テーブル 列を行にし...
-
AccessでExcelのvlookup
-
アクセス・クエリ内のフィール...
-
アクセス クエリ・集計・計算...
-
Access schema.ini使用方法に...
-
リレーションシップを組むメリ...
-
ACCESSで、EXCELのVlookup的な...
-
データベースの作り方教えてく...
-
Accessのクエリでの集計
-
Accessの質問
-
Access DB 商品名の...
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルの値をテキス...
おすすめ情報