アクセスのテーブル更新について

このQ&Aのポイント
  • アクセスのテーブルを更新する方法についての質問です。具体的な処理方法を教えてください。
  • 質問者はアクセス初心者で、エクセルのVBAがある程度できるレベルだとのことです。
  • 処理1では、テーブル1とテーブル2の内容が異なる場合、テーブル1にテーブル2の内容を書き込む方法を求めています。処理2では、テーブル1のフラグが9以外のレコードをテーブル3に追加し、追加したレコードをテーブル1から削除する方法を教えて欲しいとのことです。
回答を見る
  • ベストアンサー

アクセスのテーブル更新について

アクセスのテーブル更新について ------------------ テーブル1 性  名   フラグ 地域 佐藤 太郎 1 鈴木 次郎 9 高橋 三郎 3 ------------------ テーブル2 地域 フラグ 関東 1 関西 2 海外 3 ------------------ テーブル3 性  名   フラグ 地域 田中 四郎 2    関西 ------------------ アクセス初心者です。エクセルはファイル操作のVBAをモタモタしながら組める程度です。 上記1から3のテーブル(以下T)がある場合の、以下2つの処理を行う方法が分からず困っています。 処理1 T1の地域とT2の地域の内容が異なった場合、T1の地域にT2の地域の内容を書き込む 処理2(処理1実行後) T1のフラグが9以外のレコードをT3に追加し、追加したレコードをT1から削除する 上記処理は追加クエリや更新クエリで実行出来る内容でしょうか? VBAの記述が必要な内容でしょうか?そこからして分かっていません。 具体的な処理方法という形で教えて頂けたらと思います。 どうか宜しくお願いします。

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

  • ベストアンサー
  • don9don9
  • ベストアンサー率47% (299/624)
回答No.3

姓と名をキーにした場合、同姓同名の人がいたらどうするのか? ユニークキー(社員番号など)が必要ではないのか? 地域という項目の内容が、T2と一致しなければならないのであれば 最初からT1やT3に地域という項目を作らず、フラグだけにしておいて 必要な時にT2とJOINすればいいのでは? など、疑問な点もありますが、とりあえず以下でどうでしょうか。 クエリ1を UPDATE テーブル2 INNER JOIN テーブル1 ON テーブル2.フラグ = テーブル1.フラグ SET テーブル1.地域 = テーブル2.地域; クエリ2を INSERT INTO テーブル3 SELECT テーブル1.* FROM テーブル1 INNER JOIN テーブル2 ON (テーブル1.地域 = テーブル2.地域) AND (テーブル1.フラグ = テーブル2.フラグ) WHERE NOT EXISTS(SELECT * FROM テーブル3 WHERE テーブル3.姓=テーブル1.姓 AND テーブル3.名=テーブル1.名); クエリ3を DELETE * FROM テーブル1 WHERE EXISTS(SELECT * FROM テーブル3 WHERE テーブル3.姓=テーブル1.姓 AND テーブル3.名=テーブル1.名); として、これを1,2,3の順番で実行します。

kazu0056
質問者

お礼

SQLに張り付けて、無事動作確認出来ました。 疑問な点に関しましては、実際に扱う情報は全く別物であり、 サンプルデータの条件を無理矢理作成した為に生じた物です。 確認したかった動作に関して、全て確認、理解出来ました。 本当にありがとうございました。

その他の回答 (2)

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

T1とT2を結びつけるキーはなんでしょう? >T1とT2の地域が異なった場合 T1に地域が入っていませんが? もしフラグがT2キーならT1に(T3にも) 地域フィールドをもつ必要はありません。

kazu0056
質問者

お礼

回答ありがとうございました。 T1地域は値Nullを想定しています。 実際に知りたいのはNullあるいはNull以外の、フラグで 繋げて見たT2の地域とは異なるデータが入っている場合です。 ですので条件に「T1とT2の地域が異なった場合」と記載しました。 「Nullだったら」という条件だけの動作では不十分であった為です。

  • rqg2010
  • ベストアンサー率66% (2/3)
回答No.1

お早うございます。 >処理1 >T1の地域とT2の地域の内容が異なった場合、T1の地域にT2の地域の内容を書き込む と、いうことですが、 T1の地域が記載されていません。 また、「異なった場合」ということですが、 何を基に?、どのキーを基に?異なったと判断するのかわかりません。

kazu0056
質問者

お礼

回答ありがとうございました。 いくつかの疑問点に関しましては、回答No2のお方に お礼させて頂いた内容と重なるものと思います。 何を基に?につきましては、フラグを基に、となります。

関連するQ&A

  • ACCESS97で テーブルの更新について

    ACCESS97で 相談したいことがあります。 定期的にあるテーブルを作成する時、 (1)テーブル作成クエリーを毎回 実施する方法と (2)元々テーブルを作っておいて  毎回、全件削除クエリー、全件追加クエリーを実行する 方法などがあります。  得られる結果は同じです。 この時、毎回テーブル作成クエリーを実施すると ムダにアクセス自体のファイルが大きくなったり データベースが壊れることが多い と聞いたので (2)の方にしたのですが、処理時間が(1)よりも掛かってしまいます。 そこで、上記(1),(2)に関する方法はどちらの方がお勧めでしょうか? ※ 件数は100000件 くらいあります。

  • Accessの更新クエリについて質問です。

    よろしくお願いします。 集計したクエリを元に更新クエリを実行すると、更新できません。 やりたい作業としては、売上データテーブルのレコード数を得意先ごとにカウントして、得意先マスタテーブルのレコード件数フィールドを更新する作業です。 追加クエリで一度テーブルに追加してから、テーブル同士で更新も考えたんですが、レコード数が多いためにDBのサイズが爆発的に増えて廃案になりました。 何か良い方法があれば教えてください。

  • ACCESS【更新クエリの中断ができない】

    ACCESS初心者です。質問がわかりにくかったらすみません。 ACCESSの更新クエリで、レコードのカンマをスペースに置き換える式を作りました。 クエリを実行すると、 ”更新クエリを実行すると、テーブルのデータが更新されます” と、メッセージが表示され”はい”で次に進むと ”*件のレコードが更新されます。”と正確な件数が表示されます。 ただ、ここでやはり中断したいと思い、”いいえ”を選択しても、 レコードは更新されてしまいます。何故でしょうか?教えてください。 ______________________ フィールド:     型名 テーブル:      データ統合 レコードの更新:  Replace([型名],","," ") 抽出条件:     Like"*,*"

  • ACCESS VBAで画面からの更新

    ACCESS VBAの画面からの更新をしようとしています。 レコードソースで直接クエリを参照させている項目は表示された値を修正すれば そのままテーブルの値も修正できます。 しかし、コントロールソースにDLookUpを使って表示した項目を修正しても テーブルの内容が更新されません。 即時更新されるようにするにはどうのようにすればよいのでしょうか?

  • テーブルの数値をほかのテーブルに更新していくのには?

    OS:Windows Xp Access Version:Access 2002 お世話になります。 毎日、CSVファイルの成績表が取得でき、それをテーブルにインポート後、ほかのテーブルに数値を加算していきたいと思っております。 テーブルの構成が仮に、 Tインポート用テーブル 社員ID テキスト型←主キー 実績  数値型 とあり、この実績の数字を T実績テーブルにある 社員ID 実績 の"実績"のフィールドに加算していきたいと思っております。 インポートされた「Tインポート用テーブル」の全レコードは「T実績テーブル」に加算後、 消去します。 当方、SQL構文にはいまだに不慣れでありますので、更新クエリ、追加クエリでの方法があればありがたいです。 乱筆、乱文ですがよろしくお願いいたします。

  • SQLサーバーのテーブルに対してアクセスで更新クエリを行ないたい

    こんばんは。 ・vista ・アクセス2003 ・SQL Server 2005 です。 SQL ServerからテーブルをMDBへリンクしているのですが そのテーブルに対し、アクセス側で更新クエリを実行しようとすると 実行時エラー '3157': ODBC--リンク テーブル'テーブル名'での更新に失敗しました。 [Microsoft][ODBC SQL Server Driver]時間切れになりました。(#0) と言うエラーになり、更新クエリができません。 どうすればアクセスでSQLサーバーのテーブルに対して更新クエリを行えるのでしょうか? よろしくお願いします。

  • ACCESS2000 クエリーを開いてテーブルのデータを更新したい

    ウィンドウズ98,ACCESS2000です。 二つのテーブルがあって、リレーションがあります。 これを元にクエリーを作成して、クエリーを表示させたフォームでデータの更新や削除を行いたいと思っております。 が、実際やろうとするとこのレコードセットは更新できませんとでます。 何か考えられる理由はありますか? よろしくお願いします。

  • Access 2007で、テーブルからレコードを削除するクエリを作りた

    Access 2007で、テーブルからレコードを削除するクエリを作りたい。 具体的には、テーブルAのフィールドF1とテーブルBのフィールドF2があるとします。このとき、テーブルA中の各レコード(仮にXとします)であって、そのF1の値と同じ値をF2に持つレコードがテーブルBに含まれている場合は、(テーブルAから)そのレコードXを削除するという処理をしたいのです。ややこしいと思いますが、これをクエリやマクロで作ることはできるでしょうか? 私はVBAを知らない初心者です。上の処理も文章で書くと理解してもらえるかどうか不安ですが、だれか助けて下さい。

  • アクセスで同一テーブル内へのデータの追加

    こんにちは。Access2000を使用しています。 「顧客テーブル」には「お買上げ年度」と「顧客名」フィールド があります。 「お買上げ年度」= "2007"の顧客を、「お買上げ年度」 = "2008" として「顧客テーブル」内に追加したいのですが、一度仮テーブル やCSVファイルにデータを退避することなく、クエリやVBA(ADO)で 対応することは可能でしょうか?(=同一テーブル内への追加クエリ を実行したい。)よろしくお願いいたします。

  • Access で更新クエリー

    教えてください。アクセス2000 Win2Kです。 あるDBから1つのレコードだけ抽出し(オートナンバーをキーにしてテーブル作成クエリでローカルテーブルを作成します。)その後、そのレコードを加工して元のDBにもどしたいのですが、1レコード上にフィールドが60近くあるので一括で更新したいのです。「T_ローカル.*」みたいな感じで・・・。なにか良い方法はありませんか?一旦、DBから削除して加工したレコードを追加する方法も考えたのですが、DBのオートナンバーが変わってしまうのでやめました。 なにか良い方法をご存じの方、是非ご教授ください。 よろしくお願いします。

専門家に質問してみよう