通过 Excel VBA 运行访问查询时出现间歇性错误

Posted

技术标签:

【中文标题】通过 Excel VBA 运行访问查询时出现间歇性错误【英文标题】:Intermittent error with Running Access Queries through Excel VBA 【发布时间】:2015-07-30 12:31:02 【问题描述】:

我有一个 .xlsm 文件,它在一个新电子表格中编译来自 5 个 Access 数据库表的条目,然后打开 Access,并运行几个查询来更新主表(我知道,数据库的架构很糟糕...... ) 下面的代码(有时)会出现问题,

Dim accessApp
Set accessApp = CreateObject("Access.Application")
accessApp.UserControl = True
accessApp.OpenCurrentDatabase ("G:\Dir1\Dir2\Processing Database.accdb")
DoCmd.SetWarnings False
DoCmd.OpenQuery "DeleteFTP", acViewNormal, acEdit

OpenQuery 行上,我收到“运行时错误 2486,您目前无法执行此操作”,是否需要加载某种代码库或其他什么来防止此间歇性问题?

【问题讨论】:

是否有其他用户访问此数据库?桌子可能会因为这样的事情而被锁定吗? 也许……有没有办法确定某人是否在处理数据库中? 在与 accdb 文件相同的文件夹中有一个 .laccdb 文件,您可以使用文本编辑器读取该文件。只有当有人访问数据库时,该文件才应该存在。 【参考方案1】:

我认为您的 Processing Database.accdb 数据库包含一个名为 DeleteFTP 的已保存查询,并且您希望执行该查询。

如果是这样,则使用应用程序对象accessApp 限定DoCmd ...

accessApp.DoCmd.OpenQuery "DeleteFTP", acViewNormal, acEdit

请注意,如果您的 Excel 项目不包含 Access 引用,它将无法识别这些 Access 常量 acViewNormalacEdit。在这种情况下,您可以使用常量的值而不是它们的名称:

accessApp.DoCmd.OpenQuery "DeleteFTP", 0, 1

但是我不确定这些建议是否足够,因为您说问题是间歇性的,在我看来,您当前的代码总是会失败。所以还有一些我不明白的事情。

关闭SetWarnings 会抑制信息。我不知道它是否在这种情况下隐藏了线索,但建议你还是避免它。如果您使用带有dbFailOnError 选项的DAO.Database.Execute 方法来执行删除查询,则不需要它...

'DoCmd.SetWarnings False
'DoCmd.OpenQuery "DeleteFTP", acViewNormal, acEdit
accessApp.CurrentDb.Execute "DeleteFTP", 128 ' dbFailOnError = 128

【讨论】:

谢谢,我将避免使用“SetWarnings”并希望包含 accessApp。前缀。 是的,我建议在保存的查询上使用 Execute 方法,如果它是一个操作查询而不是数据请求:accessApp.CurrentDb.QueryDefs("DeleteFTP").Execute - 你有选项像 dbFailOnError 标志一样,如果出现错误,则回滚您的删除,以及 RecordsAffected 属性,该属性允许您捕获已删除的记录数。【参考方案2】:

尝试提前绑定访问应用程序。

Dim accessApp As Access.Application
Set accessApp = New Access.Application
accessApp.UserControl = True
accessApp.OpenCurrentDatabase("G:\Dir1\Dir2\Processing Database.accdb")
accessApp.DoCmd.SetWarnings False
accessApp.DoCmd.OpenQuery "DeleteFTP", acViewNormal, acEdit

您可能还想尝试以独占模式打开数据库。

accessApp.OpenCurrentDatabase("G:\Dir1\Dir2\Processing Database.accdb", true)

【讨论】:

以上是关于通过 Excel VBA 运行访问查询时出现间歇性错误的主要内容,如果未能解决你的问题,请参考以下文章

运行查询时出现运行时错误 3075 MS Access VBA

excel用vba时出现运行错误6-溢出,请帮忙看下我的程序是否有问题

通过 Obj-c 查询 REST API 时出现 Azure DocumentDB 间歇性 401 错误

通过 excel VBA 加入 SQL 表时出错

将公式插入单元格 VBA Excel 时出现运行时错误 1004

使用 web3.py 查询远程以太坊节点时出现间歇性“读取超时”错误