2017-09-08 9 views
1

レコードセットをループし、別のテーブルでSQLステートメントを実行し、そのテーブルのレコードを更新するDAOレコードセットがあります。なんらかの理由で、SQLステートメントのwhere句でレコードセット値を使用することは好ましくありません。私は考えることができるすべてを試しました。SQL内のVBAアクセスレコードセットフィールド

strSQL = "Select A, B FROM TABLE1" 
Set rs = CurrentDb.OpenRecordset(strSQL) 
If Not rs.BOF and Not rs.EOF Then 
rs.MoveFirst 
While (Not rs.EOF) 
    DoCmd.RunSQL "UPDATE TABLE2 SET TABLE2.B = rs!B WHERE TABLE2.A = rs!A;" 
    rs.MoveNext 
Wend 
End If 
rs.Close 

唯一の問題はwhere句です。 set節には同じように値にアクセスしていても問題はありません。 where句でデータ型の不一致エラーが発生します。

+0

TABLE1.AとTABLE2.Aのフィールドタイプは何ですか?彼らはどちらも弦ですか? – braX

+0

あなたはレコードセットの値を使用していません....あなたは文字列 "rs!A"と "rs!B"を使用しています.... _rs!A_と_rs!B_の値をSQLクエリに挿入する必要があります文字列......インターネット上で 'string concatenation'を参照してください。 – jsotola

+1

善良な君。これを単一のクエリとして書くだけです。これをループしてSQLステートメントを構築するのは夢中です! – JohnFx

答えて

1

はこのようにそれを試してみてください。

"UPDATE TABLE2 SET TABLE2.B = " & rs!B & " WHERE TABLE2.A = " & rs!A 

そして彼らは文字列である場合は、このような単一引用符でそれらを配置する必要があります。

"UPDATE TABLE2 SET TABLE2.B = '" & rs!B & "' WHERE TABLE2.A = '" & rs!A & "'" 
2

ちょうど全体を行うには、単一のクエリを書きます物事とVBAコードループを捨てる。現在のバージョンにはセキュリティ上の脆弱性があり、パフォーマンスが悪く、メンテナンスが非常に複雑です。

update Table2 
inner join Table1 on (Table1.A = Table2.A) 
SET Table2.B = Table1.B 
+0

が修正されました。助けてくれてありがとう。 – JohnFx