SQL where where

时间:2017-09-08 15:41:32

标签: sql vba recordset mismatch

我有一个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子句中遇到数据类型不匹配错误。

2 个答案:

答案 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 & "'"