- ベストアンサー
accessデータ活用法
- accessデータ活用法についての編集方法に悩んでいます。受注テーブルと品名テーブルがあり、品名を分類コードで仕訳したいのですが、方法がわかりません。
- 受注テーブルと品名テーブルをリレーションさせずに、受注フォームのリストボックスに品名を表示させています。しかし、品名を分類コードに変換する方法がわかりません。
- 分類テーブルの追加や品名テーブルの行追加を試しましたが、既存のデータにクエリ結果が得られません。考え方に問題があるのでしょうか?アドバイスをお願いします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
>で品名テーブル(1側)の分類コードと受注テーブル(多側)の分類コードをリレーションしても同じ事でしょうか? 2つのテーブルを関連付けさせるフィールドを2つのテーブルに持たせれば良いだけなので、名前はどのように付けてもかまいません(データ型が同じなら2つのフィールドの名前は違っていても構わない) ただ、coco--chanel さんが意図している事はそれとは別な事を言っているような気がします テーブルを作成するなら後からわかる名前を付けておいた方がいいです そういった意味でも今のテーブルの名前の付け方はお勧め出来ません 受注を受けた場合にデータを入力する時には、その商品がなんなのかと数量を入力しますよね その時に商品名を入力するのではなく、その商品を表す商品コードの入力を行なうのです で、実際にデータを入力する時には商品コードを入力するとリレーションさせた別テーブルである、品名テーブルから 入力した商品コードに合致したデータの品名や分類コードを自動で表示させるというような使い方をするのです(受注テーブルには品名や分類コードなど別なテーブルが持っている情報は持たせない) 今回のケースでは品名テーブルのデータは、分類コードを持っていないのでここには分類コードフィールドは作成する必要はあります ですから作るなら 受注テーブル ID オートNo. 商品コード(ここを品名テーブルの商品コードとリレーションさせます) 品名 テキスト(これはいりませんが、既にデータ入力済みの項目となっているのでそのまま残しておいてもOKです また更新クエリーで商品コード部分に品名に対応した商品コードを入力する作業が必要になるので、更新クエリー処理するまでは逆に残しておかなければなりません) 数量 数値 品名テーブルの方は ID オートNo. 商品コード(受注テーブルとリレーションさせます) 品名 テキスト 分類コード テキスト(New) (必要なら商品の原価や売価などの項目も設けておいた方がいいです) のような構造にすればいいです 受注テーブルで 商品コードを入力すると関連付けさせている品名テーブルから、相手側の分類コード テキストのデータが参照できるので、受注テーブルでデータ入力の際には受注テーブル側で分類コードについての入力は不要なのです
その他の回答 (7)
- tamu1129
- ベストアンサー率58% (1319/2258)
>品名テーブル(一側)は主キーでないと結合の種類が「未定義」になってしまうようでした この未定義になるのはテーブルのフィールドに既にデータが入力済みになっていて2つのテーブルに重複する値がある場合に発生します 今回のケースなら 品名テーブルと受注テーブルの商品コードのフィールドにどちらにも 001といようなコードがある状態から、リレーションを設定しようとすると、未定義になるのです 未定義になったとしても、リレーションは正常に動作するので問題視する必要はありません リレーションを設定する時に 品名テーブルの商品コードをクリックアンドドラッグで受注テーブルの商品コードの部分で離す行為を行なえば良いだけです リレーション設定する場合にはフィールドが主キーに設定されていなくても、きちんとリレーションは設定出来るという事は覚えておいてください
お礼
>この未定義になるのはテーブルのフィールドに既にデータが入力済みに >なっていて2つのテーブルに重複する値がある場合に発生します そういう事だったのですか、謎のままにせずに解かして頂いて助かりました。 昨日は、いろいろ試したり調べたりパニックでした。 未定義のままでもリレーション設定が正常に動作するなら安心です。いろんなケースがあるのですね。 もう一度やって設定してみます。 >リレーション設定する場合にはフィールドが主キーに設定されていなくて >も、きちんとリレーションは設定出来るという事は覚えておいてください はい、分かりました。ありがとうございました。
- naoto0216
- ベストアンサー率46% (183/391)
いまいちイメージがつかないのですが、既に品名テーブルに 分類コードが埋まっているのであれば、そもそも新たに分類テーブル を作る必要はないのではないでしょうか。 単純に品名テーブルの分類コードで抽出すればよいだけでは? と思うのですが。 あと、品名と分類コードは1対1なのでしょうか。 それとも、 品名 分類コード AAA A AAB A BBA B BBB B CCA C CCB C CCC C という感じで1対多なのでしょうか。 もし、1対1ならわざわざ分類コードで抽出するのではなく、品名で 抽出するだけだと思います。 あと、最終的にどのような結果を出したいのかをもう少し具体的に 書かれた方がよいかと思います。 見当違いの回答でしたらすみません。
補足
回答ありがとうございます。 説明が下手ですみません。 現在、分類コードは無く。これから新規追加し、品名の分類コードで仕訳作業をようと試みている次第です。 ちなにに品名と分類は1対1です。 いろいろ試してみます。
- tamu1129
- ベストアンサー率58% (1319/2258)
あっそれから一点抜けてました 今、受注テーブルには既に8,000件くらいデータがあるんですよね ここに今回、品名管理ID 数値(New)というフィールドを追加してもらいました が、単にフィールド追加しただけなので既存のデータはここが空白になってしまっています よって、事前作業として受注テーブルに入力済みの商品フィールドのデータを利用して、更新クエリを使って、新しく追加した品名管理ID 数値(New)にデータ入力を済ませた状態にしてください 更新クエリの作成方法わかりますか? 受注テーブルの品名が いちごになっているデータを抽出する そのデータの空欄になっている品名管理ID 数値(New)にいちごの管理IDである001(例えば)を一括してデータ入力すませる って感じです
- tamu1129
- ベストアンサー率58% (1319/2258)
>品名テーブルには9種類の品種があります。 で、この品名は分類コードが1対1になるのでしょうか? いちごなら分類コードはAになり、BやCになる事は無いという事なら 受注テーブルは ID オートNo.(検索が早くなるので、ここを主キーにしておいてください) 品名 テキスト(これは本当はいらない) 数量 数値 品名管理ID 数値(New) 品名テーブルは ID オートNo.(検索が早くなるので、ここを主キーにしておいてください) 品名 テキスト 分類コード テキスト(New) 品名管理ID 数値(New) となるようにしてください リレーションを張るのは 品名テーブル:品名管理ID 数値(New)と受注テーブル:品名管理ID 数値(New)に1対多になるようにします(品名テーブルの方が1って事です) 現状のテーブルでは、品名テーブルのデータにその品名の物がどの分類コードに属しているのかが入力されていませんからそれは別途手入力するなりして分類コード テキスト(New)にデータ入力して準備してください(品名テーブルは9しかデータが無い様なので、手入力してもたいして手間ではないはずです) この状態が出来たならばクエリを作成します 受注テーブルから 数量 数値 品名管理ID 数値(New) 品名テーブルから 品名 テキスト 分類コード テキスト(New) 4つのフィールドのデータを抜き出すクエリを作成してみてください 出てくるデータは 数量・商品管理ID・品名・分類コードの4つのフィールドがある受注データが抽出されます (リレーションを張る事で、受注テーブルの商品管理IDと同じ番号の品名テーブルのデータから、受注テーブルでは持っていない、品名・分類コードを関連付けして利用が出来るのです) あとはこのクエリを加工して分類コードでグループ分けしてやればcoco--chanelさんが希望している事は行なえます 出来ないのは、テーブルの構造とリレーションが正しく張れていないからです もし、いちごが分類訳として時にはAになり時にはBになるって事が起こるようならば、品名テーブルに 001のコードはいちごA 002もコードはいちごB というように品名を別管理するような運用を行なわなければないません また受注テーブルで入力の際には商品管理IDさえ入力すれば、品名はリレーション張った品名テーブルから参照すれば良いだけなので、入力する必要はまったくありません
補足
>この品名は分類コードが1対1になるのでしょうか? はい、1対1です。 > リレーションを張るのは >品名テーブル:品名管理ID 数値(New)と受注テーブル:品名管理ID 数値>(New)に1対多になるようにします(品名テーブルの方が1って事です) 品名テーブルの主キーと受注テーブルの品名管理ID(New)と繋げていました。 そして、仮名を意識するあまり、名前が違っていました。 受注テーブル ID オートNo. 品名 テキスト 数量 数値 ID 数値(New)...品名テーブルのという意味です。 品名テーブル ID オートNo. 品名 テキスト 分類コード テキスト(New) でした。リレーションとはデータ型を揃えるのはもちろんですが、一側テーブルは常に主キーから引っ張るものだと思い込んでいました。 もしも、これが 受注テーブル ID オートNo. 品名 テキスト 数量 数値 分類コードテキスト(New) 品名テーブル ID オートNo. 品名 テキスト 分類コード テキスト(New) で品名テーブル(1側)の分類コードと受注テーブル(多側)の分類コードをリレーションしても 同じ事でしょうか? >受注テーブルから >数量 数値 > 品名管理ID 数値(New) > 品名テーブルから >品名 テキスト >分類コード テキスト(New) > 4つのフィールドのデータを抜き出すクエリを作成してみてください いつもここでつまづいていました。tamu1129さんのおっしゃる通り、受注テーブルの追加したフィールドは確かにデータが空ですね。 受注テーブル単体に対して更新クエリで品名管理ID(New)にデータを入れておけばよかったのですね。それからなら希望のクエリ結果が得られそうです。 後、品名 テキストはうまく代替えしてみようと思います。 >(リレーションを張る事で、受注テーブルの商品管理IDと同じ番号の品名>テーブルのデータから、受注テーブルでは持っていない、品名・分類コー>ドを関連付けして利用が出来るのです) > 出来ないのは、テーブルの構造とリレーションが正しく張れていないから>です とても無知で反省しています。 >もし、いちごが分類訳として時にはAになり時にはBになるって事が起こ>るようならば、品名テーブルに 001のコードはいちごA 002もコードは >いちごB というように品名を別管理するような運用を行なわなければない>ません 一対一なので大丈夫です、いちごはかならず001といった形です。 >受注テーブルで入力の際には商品管理IDさえ入力すれば、品名はリレー >ション張った品名テーブルから参照すれば良いだけなので、入力する必要 >はまったくありません 明日出社したら、トライしてみます、うまくいったら改めてお礼致します。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
最もノーマルな設計は次のようです。 【受注台帳】 ID: 長整数 商品台帳_ID: 長整数 数量: 数値 【商品台帳】 ID: 長整数 区分: 整数 品名: テキスト 【各種設定】 ID: 長整数 設定名: テキスト 順番: 整数 項目名: テキスト 設定名____順番_項目名 ============= 商品台帳_区分__1_大区分 商品台帳_区分__2_中区分 商品台帳_区分__3_小区分 1、列[ID]のオートNo.は利用すべきではありません。 2、列[品名コード]でリレーションを設定することはありません。 リレーションは、あくまでの主キー列[ID]で設定します。 3、[商品台帳].[区分]の値集合ソースは次のように設定します。 SELECT ID, 項目名 FROM 各種設定 _ WHERE (((各種設定.設定名)="商品台帳_区分")) _ ORDER BY 各種設定.順番; 以上の設定ですと次のようなクエリが出来上がります。
- ubku
- ベストアンサー率37% (227/608)
【受注テーブル】に項目を一個増やしましょう。「品名コード」 【受注テーブル】に「品名テキスト」は不要です。 【品名テーブル】に項目を二個増やしましょう。「品名コード」「分類コード」 【受注テーブル】と【品名テーブル】をリレーションしましょう「品目コード」 あとは適当にクエリを作って実行してみて下さい。
補足
ご回答有難うございます。 受注テーブルには、現在8000レコード以上のデータがすでに存在し、品名 テキスト型に品名が入っています。 そちらはそちらで納品書等に使用しています。 今回、どうせ入力してあるのだからそれを分類コード仕訳で抽出しようと 試んでいる次第です。 もしも、受注テーブルに品名コードを足すとすると、受注テーブルの品名コードを更新クエリなどで振り直しするかたちですか❓
- tamu1129
- ベストアンサー率58% (1319/2258)
受注テーブルの方には、品名テーブルのデータが参照出来るように 品名 ではなく、品名テーブルとリレーションする為の、品名コードのような物を作成します また、品名テーブルには 受注テーブルとリレーションさせる 受注テーブルと同じ項目になる品名コードのフィールドと、その品名を分類させる為の 分類コードのフィールドを追加します 分類コードが多数有るならば、その分類コード用のテーブルを作成して品名テーブルの分類フィールドとリレーションさせても良いでしょうし、リスト入力から行なっても良いと思います 後はクエリ使って必要なデータをテーブルから抜き出せば良いだけなので、難しい事ではないですよ 既存データのクエリ結果というのが意味合い的にわかりませんが、具体的にどんなデータが抜き出されば良いのでしょうか?
補足
早速試してみました。 受注テーブル ID オートNo. 品名 テキスト 数量 数値 品名管理ID 数値(New) 品名テーブル ID オートNo. 品名 テキスト 分類コード テキスト(New) 品名テーブル:ID 一対多 受注テーブル:品名管理IDでリレーションしました。 クエリを作成しましたが、やはり新規入力レコードのみの表示でした。 >既存データのクエリ結果というのが意味合い的にわかりませんが、 >具体的にどんなデータが抜き出されば良いのでしょうか? 例) 品名テーブル 受注テーブル いちご 3個 キャベツ 2個 とした時、いちご=分類コードA、キャベツ=分類コードBで仕訳して A 3個、B 2個という分類コードでデータ抽出したい感じです。 受注テーブルにはすでに8000レコード以上のデータが存在します。 品名テーブルには9種類の品種があります。 どういうふうに編集したらデータが抽出出来るのか分からない状況です。 すみません。よろしくお願いします。
お礼
細かく分かりやすく説明をして頂き本当にありがとうございました。 成功しました‼‼‼‼‼ 希望通り、商品コードでデータを抽出したり、集計が出来ました。 ...ですが、品名テーブルと受注テーブルを一対多でリレーションするには、 やはり、品名テーブル(一側)は主キーでないと結合の種類が「未定義」になってしまうようでした。 なので、品名テーブルを新規で作成して、更新クエリで受注テーブルの商品コードを埋めました。 今後旧品名テーブルと受注テーブルの[品名]テキスト型は削除する事にしました。 データーベース構築、リレーションとすごく勉強になりました。 勘違いしていた所が多々あり、反省です。 ありがとうございました。