- ベストアンサー
VBA ACCESS 更新 追加 find ADO テーブル
- みんなの回答 (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 になります。(これまた、未検証です。) レコード数が多くなってくるとパフォーマンスに大きな差が出てきます。(クエリのほうが有利です。)