こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ACCESS 更新 ADO Filter Do Until

いつもお世話になっております。
ACCESSのフォームに作成したコマンドボタンを実行すると
TABLE1からTABLE2へID番号を元に値を更新するようなプログラムを
作りましたが、うまく動きません。
ご指摘お願いします。

参考までに画像を添付します。

Dim CN As New ADODB.Connection
Dim rsA As New ADODB.Recordset
Dim rsB As New ADODB.Recordset


Set CN = CurrentProject.Connection
rsA.Open "TABLE1", CN, adOpenKeyset, adLockOptimistic
rsB.Open "TABLE2", CN, adOpenKeyset, adLockOptimistic

Do Until rsA.EOF

rsB.Filter = " ID = '" & rsA!ID & "'"

Do Until rsB.EOF
rsB!名前 = rsA!名前
rsB!価格 = rsA!価格
rsB.Update
Loop

rsA.MoveNext
Loop

rsB.Close: Set rsB = Nothing
rsA.Close: Set rsA = Nothing
CN.Close: Set CN = Nothing

投稿日時 - 2009-03-17 16:27:25

QNo.4804510

困ってます

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

ANO2ですが、
"UPDATE TABLE1 LEFT JOIN TABLE2 ON TABLE1.ID = TABLE2.ID SET TABLE2.NAME = [TABLE1]![NAME], TABLE2.[PRICE] = [TABLE1]![NAME];"

"UPDATE TABLE1 LEFT JOIN TABLE2 ON TABLE1.ID = TABLE2.ID SET TABLE2.NAME = [TABLE1]![NAME], TABLE2.[PRICE] = [TABLE1]![PRICE];"
でした。

投稿日時 - 2009-03-17 19:16:19

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

更新クエリを使えるのがアクセスの特徴ですが、そのSQL文をそのままVBAで実行させることもできます。

Dim CN As New ADODB.Connection
Set CN = CurrentProject.Connection
CN.EXECUTE "UPDATE TABLE1 LEFT JOIN TABLE2 ON TABLE1.ID = TABLE2.ID SET TABLE2.NAME = [TABLE1]![NAME], TABLE2.[PRICE] = [TABLE1]![NAME];"
CN.CLOSE
SET CN = NOTHING

LEFT JOINなのか、INNER JOIN なのかは、与えられている情報からは判断できませんが、idに重複がなければどちらでもよいのかなと思います。

投稿日時 - 2009-03-17 19:13:11

ANo.1

Recordset を使わなくても
更新クエリでご希望のことはできると思いますが。

> TABLE1からTABLE2へID番号を元に値を更新するようなプログラムを
> 作りましたが、うまく動きません。
うまく動かなくてどうなるかを書くようにしましょうね。

Do Until rsB.EOF
rsB!名前 = rsA!名前
rsB!価格 = rsA!価格
rsB.Update
rsB.MoveNext  '<--- 追加
Loop

投稿日時 - 2009-03-17 18:49:36

あなたにオススメの質問