通过 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 常量 acViewNormal
和 acEdit
。在这种情况下,您可以使用常量的值而不是它们的名称:
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 错误