- ベストアンサー
Accessリレーションの分かり方について
- Access初心者の方が受注テーブルとCSVテーブルをリレーションさせる方法についての質問です。
- 受注テーブルとCSVテーブルを一対多のリレーションで結びつけたいが、データがうまく表示されないという問題が発生しています。
- 具体的なコードや設定がないため、質問者が受注テーブルのレコードにCSVテーブルのレコードを関連付ける方法を教えてほしいという要望です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>受注テーブルの1レコードの情報を重複なくCSVでエクスポートしなければならなくて このあたりはデータベースの設計をもう一度見直しした方が良いですよ 私が思うに、受注という物は受注先というデータがまず必要だと思えます 今回やろうとしている事は受注先は複数無くて1つの取引先しか無いのでしょうか? 複数の受注先が有るなら、 受注テーブルは下記のようなフィールドを持たせます NO(この名前は何でも良いです):オートナンバー そしてここを主キーとする ID:ここを取引先の取引先コードとして使う(数値でOK) 納期:日付 品番:テキスト 数量:数値 状況:テキスト 取引先テーブル ID(取引先コードとして使用):数値 オートナンバーでも良いが任意に取引先に番号付けたいなら数値としてください 主キーに設定して重複を許さないようにする 取引先名 (必要なら取引先のその他の情報入れるフィールドも作成する) 取引先テーブルと受注テーブルのID間をリレーションシップ設定をする(取引先テーブルが1で受注テーブルが多となる設定) データ入力作業が発生するのは、取引先から注文が入った時になりますよね この時に受注テーブルを元にしたフォームから入力を行ないます 入力する部分は取引先コードになるID・納期・品番・数量です(きちんとリレーション貼れば、IDを入力すれば取引先テーブルの情報を引き出し、配置したテキストボックス部分に取引先名など必要なデータが表示させる事が出来ます 必要なCSVデータはテーブルで持つのではなく、受注テーブルと取引先テーブルのデータからクエリを使って抽出すれば良いだけなのです 必要なCSVデータを作成したならば、月次処理として受注テーブルの状況フィールドを一括で済となるようにします(これも更新クエリというクエリを使って一括処理します) 翌月CSVファイル作る時には、受注テーブルの状況フィールドが済になっていないデータを拾ってくれば良い訳です もちろん受注テーブルには納期のフィールドがあるので、受注期間での抽出も出来ますよね coco--chanel さんが言っているCSVデータってどんな物なんですか? メインフォームに親になるデータがあり、サブフォームに複数のデータが出てきてしまえば、1対多の関係である訳ですから、1対1でと言っている意味がわかりません coco--chanel さんが言っている作業は1対他の関係のデータになるので、1対1とはいえません もう一度自分がどのようなデータが必要なのか見直し、テーブルの構造から見直す必要がありそうです
その他の回答 (2)
- chayamati
- ベストアンサー率41% (260/624)
受注テーブル及びCSVテーブルには既にレコードが登録されているのですね IDはオートナンバーで他のテーブルとは無関係に設定されます。 CSVテーブルの受注IDに受注テーブルのIDを設定する必要があります。 ・手順 【CSVテーブルをデザインビューで開く】⇒【受注ID】⇒【ルックアップ】 ⇒【表示コントロールの右V】⇒【コンボボックス】 ⇒【値集合ボックスに受注テーブル】⇒【列数3(=ID,納期,品番)】 ⇒【列幅0(IDは非表示)】⇒【デザインビューを閉じる】 これで、CSVテーブルを開くと受注データのIDを入力できます。 補足 リレーションシップは2つのテーブル間に部門:社員のように 1:Nの関係があるときが有用だと考えてください。 ご呈示のテーブルのフィールドは省略されていると思いますが 1:1の関係しか見受けられません 次のようにテーブルを一つにしてなんら不都合が無いような 受注テーブル ID:オートナンバー 納期:日付 品番:テキスト 数量:数値 状況:テキスト...未と済をコンボボックスで選択式
補足
chayamatiさんご指南有難うございます。 やはり、1対1の関係ですか。ちょっと試してみます。
- tamu1129
- ベストアンサー率58% (1294/2222)
作成の仕方はそれで良いですよ CSVテーブルは新規で作成してデータが何も入っていない訳です ですから、リレーション組んでいる受注テーブルを元にしたフォームを開いてもリレーションさせたCSVテーブルを元にしたサブフォームはデータがからっぽなので、新規のレコードしか見えないのです まずCSVテーブルにデータを入力してみてください IDはオートナンバーなので何もしなくていいです、状況部分に未か済を入力 受注IDに受注テーブルに入力済みになっているデータのIDの数値を入力 受注テーブルのデータのオートナンバーが1~5まであったとしたら、CSVテーブルのデータに受注IDが 1になっているデータを3つくらい 2になっているデータを1つ 作成してみてください この状態で、受注テーブルを元にしたフォームを開きます メインフォームのIDが1になっているフォームはサブフォームに3つの入力済みデータ+新規レコードが IDが2になっている場合にはサブフォームには入力済み+新規レコードが IDが3~5の場合には入力済みデータは無いので、新規レコードのみが表示されます つまりリレーションは正しく貼られているが、現在では表示すべきデータがない物については新規レコードのみが表示されているという事です
補足
tamu1129さんご指南有難うございました。 出来ました。そういう事だったのですね! でも、作成して気づいたのですが、受注テーブルの1レコードの情報を重複なくCSVでエクスポートしなければならなくて。 受注テーブルの(ID)とCSVテーブルのIDを一対一で繋げなければ駄目という事になりますか? その際、受注テーブルのIDは自動で参照出来たら助かります。 何度もすみません、どんな組み合わせにすれば教えて下さい。
補足
何度も丁寧なご回答有難うございます。 >今回やろうとしている事は受注先は複数無くて1つの取引先しか無いのでしょうか? はい、1つの取引先に対して使用しているデータベースです。 >メインフォームに親になるデータがあり、サブフォームに複数のデータが出てきてしまえば、1対多の関係である訳ですから、1対1でと言っている意味がわかりません サブフォームのあるメインフォームを作成しようとしてしまったのは、納品書作成のイメージが先行してしまい、CSV状況が未の物をメイン/明細をサブと急いでしまいました。 よくよく考えると、未一つ一つに1品づつの受注レコードがあると我に返りました。 1つの取引先に対して、1品1様の受注をしているので素直に CSVテーブル ID:オートナンバー 状況:テキスト CSVテーブルのIDを主キー、受注テーブルに状況:数値を追加し一対多でリレーションをつなぎ、クエリ抽出をする方法で作成しようと思いました。 >必要なCSVデータを作成したならば、月次処理として受注テーブルの状況フィールドを一括で済となるようにします(これも更新クエリというクエリを使って一括処理します) なるほど、更新クエリなどを、月次処理ボタンでフォームに貼り付けて一括処理を出来たら楽ですね。 なかなか、マニュアルから応用へ進展出来なくて...また何かつまづいたら質問を投稿させて頂きます。 有難うございました。