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
我有一个 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