通过Excel VBA运行访问查询的间歇性错误

时间:2015-07-30 12:31:02

标签: excel-vba ms-access vba excel

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

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”,目前无法执行此操作,是否需要加载某种代码库或者需要预防某些代码库这个间歇性的问题?

2 个答案:

答案 0 :(得分:2)

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

如果确实如此,请使用应用程序对象DoCmd ...

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

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

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

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

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

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

答案 1 :(得分:1)

尝试早期绑定访问应用程序。

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)