• ベストアンサー

アクセスの更新クエリについて(親子テーブル)

はじめまして。 アクセスを勉強しはじめて2週間の初心者です。 説明がわかりずらいかもしれませんが、ご容赦ください。 以下のようなテーブルがあります。 ●親テーブル(装置名称と装置番号の組み合わせが主キー) ・装置キー ・装置名称 ・装置番号 ・収容No-1 ・収容No-2 ●子テーブル(主キー設定なし) ・装置キー(親テーブルの装置キーと参照整合:1対多) ・収容No-3 ・最新情報 ●参照テーブル(主キー設定なし) ・収容No-1 ・収容No-2 ・収容No-3 ・最新情報 子テーブルの最新情報フィールドを参照テーブルの最新情報に 更新する更新クエリを作成したいのですが、うまく実行ができ ません。 クエリの作り方の基本がわかっていないと思いますが、私が作 った方法は、 1.上記3つのテーブルをクエリのデザインビューで表示 2.親テーブルと参照テーブルの収容No-1、2を結合 3.子テーブルと参照テーブルの収容No-3を結合 4.クエリの種類を更新クエリに変更 5.テーブルに子テーブル、フィールドに最新情報を設定 6.レコードの更新欄に[参照テーブル]![最新情報]を設定 です。 ビューで確認すると殆どのデータが空白で表示されております。 どのあたりに悪さがあるかをご教授いただけますと助かります。 ご不明な点がありましたら、何なりとお伝えください。 よろしくお願いします。

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

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

>5.テーブルに子テーブル、フィールドに最新情報を設定 >6.レコードの更新欄に[参照テーブル].[最新情報]を設定 のテーブル設定が逆なのでは?と思います。 もし、SQL文がわかるのなら、クエリを「デザインビュー」で開いた後、 クエリのウィンドウのタイトルバーを右クリックして「SQLビュー」を選べばSQL文を 見ること(編集も)ができます。 ANo.1 さんが言っているのは、 参照テーブルを作成してしまうと、親テーブルと参照テーブルで項目が重複している。 そのため、親テーブルでも編集テーブルでもデータを編集することが可能になってしまい、 どちらのテーブルのデータが正しいのかわからなくなってしまう。 (子テーブルと編集テーブルでも同様のことが言える。) 参照「テーブル」ではなく、参照「クエリ」を選択クエリ(=SELECT文)として作成しなさい。 ということだと思います。 私も同意見です。 おそらく、wadawadaさんはデータ編集は親テーブルと子テーブルのみで、 参照テーブルは閲覧用と考えているのだと思います。 そうであれば、なおさら参照「テーブル」ではなく、参照「クエリ」にすべきです。

wadawada
質問者

お礼

CHRONOS_0さん、irija_bariさん 早速のご回答ありがとうございました。 私の説明が良くなかったたので、再度説明させてください。 「参照テーブル」というのは、「親テーブル」と「子テーブル」から作成されるものではありません。更新クエリの参照元のテーブルを表現したかったのですが、書き方がまずかったですね。 他にもありましたら、よろしくお願いします。

その他の回答 (1)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

>クエリの作り方の基本がわかっていないと思いますが 分かっていないのはクエリの作りかたではなくテーブルの作り方です テーブル作成の基本は「One Fact on One Place」 収容No-1、2、3が複数の場所にあるのはNGです 参照テーブルは作ってはいけません これらは親テーブルからつど取り出すようにします

関連するQ&A

  • ACCESS 更新クエリについて

    更新クエリで更新したいのですが、クロス集計クエリの数値を元にテーブルを更新することは出来ないようで、困っています。 なぜそのようなことをしているかと申しますと、 商品品目_個数_コード(主キー) のようにフィールドを持っているのですが、 印刷に関しては品目ごとに印刷したい、ということで 一度クロス集計クエリ(TRANSFORM)で りんご_ばなな_ぶどう_コード(主キー) 数値_数値_数値_数値 のような並びにして、テーブル作成クエリでテーブルを作成し そのテーブルをレポートに使用しています。 数値などが変わった場合その作成したテーブルの数値を 作成元になったクロス集計クエリで更新したいのですが、出来なくて困っています。 テーブル作成クエリで上書きすると、古いデータが消えてしまうため 何か良い方法はないかと思っています。 回答のほどお願いします。

  • 更新不可能のクエリの条件を教えてください。

    他の人が作ったアクセスのファイルなのですが クエリを開いてデータを編集しようとすると 音が鳴り、左下のステータスバー(?)に 「このレコードセットは更新できません」 となってしまいます。 そのクエリをデザインビューで見ると 二つのテーブルが矢印で繋がっており、 月: Month(T【家計簿】明細!取引日) のような式で作られたフォールドが10個くらいあります。 二つのテーブルそれぞれに主キーはありますが 主キー同士は繋がっていません。 他の人が作った時は2003で作り 私は2007で開いています。 どこをどういじれば、更新可能なクエリになるのか分からないので 更新不可能のクエリの条件を教えてください。 変にいじって戻せなくなりたくないので^^; アドバイスよろしくお願いします。

  • Access2000のテーブル作成クエリについて

    テーブル作成クエリを使用し、作成された新しいテーブルを見ると、Yes/No型のフィールドのレコードが 0 や -1 に変換されています。 これを回避、または後からチェックボックスの形式に訂正する方法はないでしょうか? もうひとつ 作成された新しいテーブルでは、コピー元のテーブルで「主キー」となっていたフィールドが「主キー」ではなくなります。どうしてなのでしょうか?

  • テーブル間の更新クエリにおいて

    Access2010で入力フォームを作成しています。 一時データとしてテーブルAを連結サブフォームとして編集します。保存ボタンをクリックするとメインのテーブルB(Aとフィールド構成は同じ)へA、Bのフィールド間で値が異なる場合、上書き保存をするという更新クエリを用意しています。 質問はテーブルAでフォーム上、オプショングループのラジオボタン(項目はテキスト型 値リストは0と1)に設定した項目が初期値のnullから入力したデータがメインのテーブルBに更新できないので困ってます。 連結フォームなので、テーブルAに値が入っており且つBと値が異なるのはデータビューで確認しています。ただ更新クエリでの選択(データビュー)に載ってこない。 この項目がテーブルBに反映されるのは予めインポートで0もしくは1が入力されていた状態から変更した場合と他の項目も合わせて値に変更があった場合のみでした。 クエリの抽出条件はテーブルA.項目<>テーブルB.項目としています。他の項目もor条件で同じ設定にしています。切り分けのため、このオプショングループの項目だけを変更した場合のクエリにしても反映はされませんでした。 考慮すべき点あればご教示ください。 よろしくお願いいたします。 どうかお助けくださいませm(__)m

  • 親子関係のテーブルについて

    現在SQLServerを使用した、Webアプリケーションの製作を行なっています。 そのデータベース内で、親子関係があるテーブルを使用しており、親テーブルの主キーIDを、子テーブルの外部キーに設定しています。 親テーブルの主キーIDはidentityを使用して連番にしています。 親子関係があるテーブルは、親が登録されると、すぐに子のテーブルにもデータを追加するという形で、親テーブルが追加された直後に親テーブルの主キーIDをMAX関数を使用して取得し、子テーブルに登録しております。 このやり方ですと、通常は問題は無いのですが、同時に連続してアクセスがある時に、親テーブルの主キーIDを取得する際に、ずれが生じたりして正確な親子関係にならない場合があります。 この手法は一般的な手法ではないのでしょうか?また、何かいい対処法はございませんでしょうか? お力をお貸しください。よろしくお願いします。

  • access クエリで集計した数値を別クエリで使いたい

    access2003で2000ファイル形式で以下のものを作っています。 テーブル「A」(フィールドは登録番号(主キー)、 書名) 「B」(登録番号(主キー)、 書名) がある。Aの「登録番号の最大値」(100とする)をクエリ(クエリ名「集計クエリ」)で集計して得た。 テーブルBの登録番号(1~30とする)を更新クエリで(1+100 ~ 30+100)に更新したい。そこでデザインビューで登録番号フィールド(テーブルB)の「レコードの更新」欄にビルダーで「[B]![登録番号]+[集計クエリ]![登録番号の最大値]」と入力して実行したら 実行できなかった。(仕方ないので「[B]![登録番号]+100」として実行したら更新できた。)今後もあるので「集計クエリ」で得た値を直接呼んで、更新クエリを実行したいのだが・・・。 わかりにくい質問で恐縮です。ご理解頂けたならば、ご教授ください。

  • メイン・サブフォームの内容を更新クエリで更新したい

    お世話になります。 現在、 tb受注日報(親)、tb受注伝票(子)で、受注伝票をサブフォームという形で組み込んだ【受注日報フォーム】と tb作業表(親)、tb作業表明細(子)で、作業表明細をサブフォームという形で組み込んだ【作業表フォーム】 があります。 【受注日報フォーム】上にあるコマンドボタンのマクロに、親同士、子同士での追加クエリを設定し、ボタンを押せば【受注日報フォーム】に入力した内容を【作業表フォーム】に反映させられるようにしています。 この要領でコマンドボタンを押せば以前に入力した【受注日報フォーム】の更新内容を【作業表フォーム】に反映させられるようにしたいと考えています。 そこで、親同士、子同士で更新クエリを作ってみた結果、親同士の更新は大丈夫でしたが、子同士の更新が一番目のレコードしか更新されませんでした。 更新クエリの抽出条件 親 フィールド 「識別番号」(オートナンバーです)   テーブル 「作業表」   抽出条件 [forms]![受注日報]![識別番号] 子 フィールド 「受注伝票番号」   テーブル 「作業表明細」   抽出条件 [forms]![受注日報]![受注伝票Sub].[form]![受注伝票番号] ちなみに親同士の追加クエリの抽出条件に使用した主キーは「識別番号」とは別の番号で、オートナンバーではなく、最大値に+1するやり方で振っている番号を使用していて、子同士の主キーは追加クエリも更新クエリもおなじ[受注伝票番号]を使用しています。 抽出条件かこの主キーの設定が問題なのかなあと思いますが、わからないのでどなたかご回答宜しくお願い致します。

  • ACCESSでテーブルを更新する時で

    テーブル(1)のある項目で、テーブル(2)のある項目を更新したいのですが・・    項目 → No ・・・ 更新a 更新b テーブル(1)  001     100 200 テーブル(2)  001      50  50          ↓          ↓ 【更新後】 001 100 200 どの様にすればできますか教えて下さいませんか。 《クエリーの更新を使えばできそうなんですが、実際にどうすれば良いのかよく解りません》       

  • テーブル作成クエリで主キーを設定

    サブフォーム作成のため主キーを設定したいのですが、クエリでグループ化した顧客コードをテーブルとするクエリで主キーを顧客コードに設定したいのですが、クエリ実行で主キー設定方法を教えてください。

  • Access2003 更新クエリについてご教授下さい。

    初めまして。 今回、初めてご質問させていただきます。 Access2003の更新クエリについてご教授お願いします。 AテーブルとBテーブルがあります。 ■Aテーブル(ALLテーブル)  各フィールド名:  名前(テキスト型)/完了(Yes/No型)/備考欄(テキスト型) ■Bテーブル(更新させたいテーブル)  各フィールド名:  名前(テキスト型)/完了(Yes/No型)/備考欄(テキスト型)  (※Aテーブルと同じです。) Bテーブルの内容をAテーブルへ更新させたいのですが 名前/完了のフィールドは、更新クエリで完成出来ましたが 備考欄の更新が出来ません。 (※備考欄には、コメントがそれぞれ入っています。) どのような形でクエリを作成すれば Aテーブルへ更新が可能になるのでしょうか? 以上、ご教授お願い致します。

専門家に質問してみよう