vba 访问 SQL where 子句中的记录集字段

vba access recordset field inside SQL where clause

我有一个 DAO 记录集,它循环记录集并在另一个 table 上运行 SQL 语句,更新那个 table 的记录。出于某种原因,它不喜欢在 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 子句上收到数据类型不匹配错误。

这样试试:

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

如果它们是字符串,那么你需要像这样将它们放在单引号中:

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

只需编写一个查询即可完成整个操作并摆脱 VBA 代码循环。当前版本存在安全漏洞,性能不佳,维护复杂。

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