从外部 ODBC 表访问 VBA 更新表

Posted

技术标签:

【中文标题】从外部 ODBC 表访问 VBA 更新表【英文标题】:Access VBA update table from external ODBC table 【发布时间】:2013-12-20 09:56:29 【问题描述】:

我正在尝试使用 Access VBA 中的外部 ODBC 表更新我的本地数据库表之一。

部分更新代码如下所示。

Dim db As Database
Dim qdf As QueryDef
Dim updateQuery As String

updateQuery = "My_Update_Query"

Set db = CurrentDb()
Set qdf = db.CreateQueryDef
qdf.SQL = updateQuery

qdf.Execute dbFailOnError

我的代码在 qdf.Execute 行停止运行。我收到错误消息“对象无效或不再设置”。错误代码 3420。

在我的更新查询中,我已将本地表字段值设置为等于外部 ODBC 表字段值。外部 ODBC 表已作为链接表导入到我的 Access 中。

请问我是否还需要在此处显式连接到外部表?如果是这样,我该怎么做?

非常感谢您的帮助。

【问题讨论】:

我总是将记录集用于这种类型的操作,如果这有助于您可以直接指定连接字符串并在记录集上运行事务。 您是否有一个名为 My_Update_Query 的已保存查询,并且您是否正在尝试执行该查询?如果是这样,当您在 Access 查询设计器中对其进行测试时,它是否可以正常工作? 对我来说,这看起来可能像是缺少对象库引用。 VBA > Tools > References. @HansUp 我有一个弹出窗口,要求我输入链接表的参数值。这就是为什么我在执行 sql 时是否真的连接了该链接表感到困惑。 @engineersmnky 你指的是recordset.edit 方法吗?看来我必须一个一个地更新我的记录,而不是执行一个简单的更新查询。有没有简单的方法来实现这一目标?我没有选择记录集的另一个原因是我不确定它是否可以返回更新的结果,无论是成功还是失败。 【参考方案1】:

“My_Update_Query”不是一个有效的 SQL 语句,这是 qdf.SQL 需要的。如果这是您要运行的查询的名称,请使用:

Dim qdf As QueryDef

Set qdf = CurrentDb.QueryDefs("My_Update_Query")
qdf.Execute

或者删除整个QueryDef 的东西,然后说:

DoCmd.OpenQuery "My_Update_Query"

只要 ODBC 表链接到您的数据库,您就不必每次都显式连接到它。

【讨论】:

"My_Update_Query" 不是查询对象,而是我的代码中包含更新 SQL 的一段字符串。所以我认为不能直接在 CurrentDb.QueryDefs("My_Update_Query") 中引用它。我还尝试了 Set qdf = db.CreateQueryDef(, updateQuery)。它还在 qdf.execute 语句中给了我相同的“对象无效或不再设置”错误。 你能发布SQL吗? 你是对的。我不需要再次显式链接表,但是在连接到 ODBC 表时我必须注意主键

以上是关于从外部 ODBC 表访问 VBA 更新表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Access VBA 更新所有 ODBC 链接的 SQL Server 表的服务器名称

使用表单和子表单访问 VBA 代码格式更新表

刷新访问直通查询

帮助访问 2007 sql 表? [关闭]

从 excel 导入到具有更多字段的访问表 (vba)

访问 VBA SQL 更新命令