【问题标题】:vba access recordset field inside SQL where clauseSQL where子句中的vba访问记录集字段
【发布时间】:2018-02-17 14:16:50
【问题描述】:

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

【问题讨论】:

  • TABLE1.A 和 TABLE2.A 的字段类型是什么?它们都是字符串吗?
  • 您没有使用记录集值...。您正在使用字符串“rs!A”和“rs!B”...。您需要插入 rs 的值!Ars!B 到 SQL 查询字符串中......在互联网上查找string concatenation
  • 天哪。只需将其编写为单个查询即可。通过循环和构建 SQL 语句来做到这一点太疯狂了!

标签: sql vba recordset mismatch


【解决方案1】:

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

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

【讨论】:

  • 已修复。感谢您的帮助。
【解决方案2】:

试试这样:

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

如果它们是字符串,那么您需要将它们放在单引号中,如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    相关资源
    最近更新 更多