我有一个DAO记录集,它循环遍历记录集并在另一个表上运行SQL语句,更新该表的记录。出于某种原因,它不喜欢在SQL语句的where子句中使用记录集值。我已经尝试了我能想到的一切。
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 :(得分:3)
只需编写一个查询即可完成整个操作并抛弃VBA代码循环。当前版本存在安全漏洞,性能不佳,维护过于复杂。
update Table2
inner join Table1 on (Table1.A = Table2.A)
SET Table2.B = Table1.B
答案 1 :(得分: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 & "'"