• ベストアンサー

VBA ACCESS 更新 追加 find ADO テーブル

いつもお世話になっております。 ACCESSのフォームに作成したコマンドボタンを実行すると 元テーブルから対象テーブルへIDを元に値を更新するようなプログラムを 作りたいと思います。 また、注意点として元テーブルでは「ID」、対象テーブルでは「管理番号」の異なる名称によりデータの管理を行っております。 アドバイスお願いします。 VBAの中でADO関数やFind関数を使ったら出来ると考えております。

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

  • ベストアンサー
  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

関係ないかもしれませんが、前の質問は解決していますか? 自分がした質問をちゃんとファローしておかないと、まともに回答してくれる人が減りますよ。  http://oshiete1.goo.ne.jp/qa4804510.html さて、ご質問の件ですが、これは追加クエリで行うことができます。  クエリというのはSQL処理ですのでADOから、発行することもできます。 クエリを使わないでやる場合は、 1.元テーブルを開きレコードを一件ずつ参照し、 2.そのIDのレコードが、対象テーブルにあるかどうか調べ、 3.ない場合は新規レコードを作成する。 ということになります。 前回のコードを改造すると(未検証ですが)、 Dim CN As New ADODB.Connection Dim rsA As New ADODB.Recordset Dim rsB As New ADODB.Recordset Set CN = CurrentProject.Connection rsA.Open "元テーブル", CN, adOpenKeyset, adLockOptimistic rsB.Open "対象テーブル", CN, adOpenKeyset, adLockOptimistic Do Until rsA.EOF rsB.Filter = " 管理番号 = '" & rsA!ID & "'" if rsB.EOF then rsB.addnew rsB!管理番号 = rsA!ID rsB!名前 = rsA!名前 rsB!価格 = rsA!価格 rsB.Update End if rsA.MoveNext Loop rsB.Close: Set rsB = Nothing rsA.Close: Set rsA = Nothing CN.Close: Set CN = Nothing のような感じになると思います。 これが、クエリ(SQL)で処理すると、 Dim CN As New ADODB.Connection Set CN = CurrentProject.Connection CN.EXECUTE "INSERT INTO 対象テーブル(管理番号,名前,価格) SELECT 元テーブル.ID, 元テーブル.名前, 元テーブル.価格 FROM 元テーブル LEFT JOIN 対象テーブル ON 元テーブル.ID = 対象テーブル.管理番号 WHERE 対象テーブル.管理番号 Is Null" CN.CLOSE: SET CN = NOTHING になります。(これまた、未検証です。) レコード数が多くなってくるとパフォーマンスに大きな差が出てきます。(クエリのほうが有利です。)

関連するQ&A