Accessのデータベースの構築の仕方について
Access初心者です。
1注文書にmax3品目まで記入できる注文書データベースの構築について教えて下さい。
メインテーブルと、サブデータを作っており、
メインテーブルには、注文書Noと注文者名、日付の1注文書内の重複するフィールドを
サブテーブルには、連番(max3)、品名(max3)、金額(max3)の重複しないデータとしています。
以下の様な感じです。
メイン→注文書No 1 2 2 3 3 3
サブ →連番 1 1 2 1 2 3
本当は、注文書Noを主キーにして、同じ注文書Noを入力出来ない様にしたいのですが、インデックス、主キー、リレーションシップで値が重複しているのでテーブルを変更できないというエラーメッセージが出ます。
仕方が無いので、現在は諦めて、以下の様に注文書Noでリレーションシップを組んでいます。なので注文書Noの2度打ちの可能性はあります。
メインIDもサブIDも意味が無いと思っていますが。
メイン サブ(主キー設定無し)
メインID(オートNo)主キー サブID(オートNo)
注文書No-----------注文書No
注文者名 連番
日付 品名
金額
私のやりたいことは、一つの注文書Noに対し、max3つまで連番で紐づけて、同じ注文書Noを入力出来ないようにしたいことなのですが。
この様な場合、どの様にデータベースとして、リレーションシップはどの様にして、主キーもどの様にするのが正しいやり方なのでしょうか?
リレーションシップも良く理解出来ていない状態ですが、宜しくお願いいたします。
No.2ベストアンサー
- 回答日時:
サブのフィールドを下記のように変更します。
尚、得意先、商品等のテーブルも作成することになりますので
区別できるフィールド名にします。
メイン サブ
注文明細ID(オートNo)主キー
注文ID(オートNo)主キー…注文ID(長整数)
注文書No 連番
注文者名 品名
日付 金額
メインテーブルのメインIDとリレーションシップの設定をします。
フォーム作成はフォームウィザードを使います。
ウィザードで最初の画面でメイン、サブの主キーを除いた項目を選択したフィールドに配置します
あとはウィザードに答えていきます。
出来あがったフォームの文字のポイント、配置等にデザインモードで手を加えます。
>メインIDもサブIDも意味が無いと思っていますが。
!!!もったいないことを
注文No.も主キーに出来ますが、これを主キーにすると注文No.の変更ができなくなります
主キーはオートナンバーにしておくとシステムが採番してくれます。
フォーム、レポートの項目には必要ありません
>注文書Noの2度打ちの可能性はあります。
テーブル設計時 注文No.のインデックスを重複なしの設定にします
この回答への補足
ありがとうございます。
メインの注文書Noを重複なしにして、同じ注文書Noは受け付けなくなりました。
再度、相談なのですが
サブフォームに注文書Noも表示したいので、
メイン サブ
メインID 主キー サブID 主キー
注文書No(重複無し)--注文書No(重複あり)
注文者名 連番
日付 品名
金額
でも構わないでしょうか?
でもこれだと注文書Noを変更したとき、サブの変更前のデータがテーブル上に残ってしまうことになり後でテーブルから削除しなければならなくなりますか?
shinkamiさんの通りにやればそんな必要もなくなりますでしょうか?
メイン サブ
サブID 主キー
メインID 主キー --メインID
注文書No(重複無し)--注文書No(重複あり)
注文者名 連番
品名
金額
とメインIDと注文書Noの二つをリレーションすれば
サブにも注文書Noを表示できて、メインの注文書Noを変更してもサブの変更前のデータが残ることを防止できますか?
複数の人が使う可能性があるので、サブテーブルから変更前のデータを削除する作業は怖くてしたく無いと思います。
それとサブの連番(max3)を今は手入力していますが、間違う可能性もあるので、サブのレコードと自動で連動入力することはできますか?
サブレコード1の時、連番1
サブレコード2の時、連番2の感じです。
それと重複なしにして注文書Noの2度打ちは
インデックス、主キー、リレーションが重複しているのでテーブルを変更できませんでした。再定義して下さいのメッセージが出るので防げるようになりましたが、
これを
すでにある注文書Noを入力しています
のようなメッセージに変えることはできますでしょうか?
追加で申し訳ありませんが、お願いいたします。
No.5
- 回答日時:
もし、行き詰っているのならしてなくても良いです。
余裕あれば・・・。
注文書単位のキー
「注文書No」+”0”固定値
注文書明細単位のキー
「注文書No」+「連番」”1”~”3”
こうすれば、全体でも重なることないし意味ある主キーになります。
PS.
テーブル項目が提示しているものだけなら
メイン、サブとテーブル2つにしなくてもなんとかなるのでは、と思います。
チェック仕掛けもより簡単になります。
(メイン、サブ)としていることの方が説明・回答ややこしくしている感じです。
No.4
- 回答日時:
>サブフォームに注文書Noも表示したいので、
>メイン サブ
>メインID 主キー サブID 主キー
>注文書No(重複無し)--注文書No(重複あり)
>注文者名 連番
>日付 品名
> 金額
>でも構わないでしょうか?
>でもこれだと注文書Noを変更したとき、サブの変更前のデータがテーブル上に
>残ってしまうことになり後でテーブルから削除しな>ければならなくなりますか?
メインの注文書No.とサブの注文書No.は別のものならサブに追加してもかまいませんが
フィールド名を注文明細No.とでもして後の混乱を回避してください。
※同じものであれば、サブはメインとセットで使用することになりますので
サブには必要ないでしょう
>shinkamiさんの通りにやればそんな必要もなくなりますでしょうか?
>メイン サブ
サブID 主キー
>メインID 主キー --メインID
>注文書No(重複無し)--注文書No(重複あり)
>注文者名 連番
> 品名
> 金額
>とメインIDと注文書Noの二つをリレーションすれば
>サブにも注文書Noを表示できて、メインの注文書Noを変更してもサブの変更前のデータが残ることを防止できますか?
>複数の人が使う可能性があるので、サブテーブルから変更前のデータを削除する作業は怖くてしたく無いと思います。
リレーションによりメインとサブに上下関係が生れます
下位のレコードが残っていると上位のレコードは削除できません
またテーブル間のリレーションは一つしか受け付けません
>それとサブの連番(max3)を今は手入力していますが、間違う可能性もあるので、
>サブのレコードと自動で連動入力することはできますか?
>サブレコード1の時、連番1
>サブレコード2の時、連番2の感じです。
オートNo.という手はありますが自働採番はテーブル単位なので
メインの注文単位の連番となるとVBAを組み込みます。
自分はやったことはありませんがだいぶ工夫が必要でしょう。
>それと重複なしにして注文書Noの2度打ちは
>インデックス、主キー、リレーションが重複しているのでテーブルを変更できませんでした。
>再定義して下さいのメッセージが出るので防げるようになりましたが、
>これを
>すでにある注文書Noを入力しています
>のようなメッセージに変えることはできますでしょうか?
これもVBAの領域でしょうが 渡来してみましたが判りません
補足
[ファイル]→[印刷]でフォームはそのまま印刷できます
(うまくデザインすれば注文書になるかも)
各ボックスのプロパティーの書式書式タグの表示対象で
画面/印刷、画面のみ、印刷のみの設定が出来ます
No.3
- 回答日時:
>「注文書Noを変更」?
注文書Noは発生する度に番号が増えていくものでは?。
過去に発行している注文書Noを修正ということは、他の金額とかの項目は
そのままで注文書Noのみ付け替えしたもの(他一致)が発生する運用ということでしょうか。
「新レコード追加→他項目は複写して更新→元のレコード削除」でもできますが
まだ難しいですよね?。
------<補足>------------
もし、
回答待ちで時間を持て余しているのであれば、
下記を参考に見るなど参考にしてください。
ほんの一部です。今すぐ使えそうなところ適当に見つけました。
掲示板では言葉だけなので、わからないところあったかと思います。
データ更新前にキーの重複をチェックする方法
http://www.tsware.jp/tips/tips_161.htm
マスタの主キーを変更したら対応するデータテーブルのレコードも更新する方法
http://www.tsware.jp/tips/tips_007.htm
モーグ/Access一般機能
http://www.moug.net/tech/acopr/
AccessTips 初心者講座
http://www.accessclub.jp/actips/index.html
Access Tips
http://www.geocities.jp/cbc_vbnet/tips/Tips.html
027 2006/01/13 サブフォームに枝番を自動的に入力する方法
アプリケーション開発に役に立つ小技集です。
http://fk-plaza.jp/ACS/TIPS/waza53.htm
新規登録時に重複レコードがある場合に警告を出すフォーム
→画面見にくいですが、メニューバーのすべてを選択したら見えやすいです。
マイクロソフトアクセス特設ページ
http://pc-dr.jp/acc/acc-key.htm
「ACCESS」「TIPS」「テクニック」とかでいろいろ検索しています。
最初は結果を聞くと同時に、事例、解説をみるのも理解早くなります。
大きな書店で「テクニック集」とか探すと良いです。
いろいろあります。
No.1
- 回答日時:
正しく動くやり方はいろいろあるので、
無駄があればそれが正しくないやり方といえます。
同じ項目があちこちに散らばらないこと、正規化することが理想でしょう・・・・。
メインテーブルとサブテーブルの決め方、考え方はどうしましたか?。
1次元的なやり方、参考)
注文書No*
注文者名コード*
└-----注文者名
日付
連番*
品コード
└-----品名
金額
作るなら、
これが格となるテーブルで、*が主キー。注文者名や品名は別テーブル。
画面には
メインフォームに注文書No、注文者名、日付
サブフォームに連番項目以下を表示、
注文書Noと連番が親子連結フィールド。
(1つのテーブルでもクエリ使えばメインとサブに表示できたはず)
入力できないようにする=>存在するか確認する、でクエリを使います。
「入力注文書No」がテーブルに存在するか。
「入力注文書No&入力連番」がテーブルに存在するか。
「連番は、1、2、3」となっているか。
さらに
「注文書Noの最大値」を求めるクエリを作っておくこと。
空き連番を見つけるなら
縦軸に注文書No、横軸に連番としたクロス集計クエリ
事例で
あとから
「注文書No1-連番2」での追加や修正はあるのか無いのか????。
たぶんしてはいけないと思いますが・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windous Vista導入しますか?
-
韓国人って嫌われてる? こんに...
-
サブディスプレイのない機種、...
-
彼氏がいきなりフルネーム表示...
-
15年程前にタモリが歌っていた歌
-
ひとつ人より○○がある・・・の...
-
学生時代の同級生が久しぶりに...
-
三波春夫
-
動きが女っぽい男っているんすか?
-
みなさんには道で偶然すれ違っ...
-
是と是个の違い
-
顔がはっきりしていると濃い顔...
-
フルネームで呼び捨てされます
-
ポパイについて
-
花形満のような髪型の男を実際...
-
中国語で・・・・
-
めぞん一刻で四谷さんが歌って...
-
塩顔の由来について
-
ジャニーズ系ってどんな顔?
-
朝のはよから、弁当箱さげて・...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
なんで 日本のテレビは 韓国ば...
-
Access2003で、メイン情報を持...
-
24を日本人がやるなら
-
サイバー空間防衛隊にかっこい...
-
韓国歌手の日本の出稼ぎを責め...
-
あなたが歌手に! デビュー作の...
-
GT管(真空管の種類)のGTは何...
-
ピカデリー梅田の魅力
-
入力履歴(?)の消し方
-
サブパソコンの活用について
-
マラソンのグランドスラムの難易度
-
テイルズオブシリーズ(系統)...
-
オンラインゲームで好きなジョブ
-
office2007の縦書き文書がOpenO...
-
ビタクラフトのサブブランド?...
-
ブラウザ
-
CFXとmsi afterburnerについてです
-
韓国人って嫌われてる? こんに...
-
英語圏に キムと 韓国で キム ...
-
皆さんが一番尊敬する人を理由...
おすすめ情報