从Access VBA执行SQL Server传递查询

时间:2014-12-30 18:05:32

标签: sql ms-access access-vba pass-through

我在Access 2007中保存了UPDATE传递查询。当我双击传递查询时,它成功运行。如何从VBA运行此查询?我喜欢在我的"闪屏"负荷。

我目前正在使用以下代码:

CurrentDb.Execute "Q_UPDATE_PASSTHROUGH", dbSQLPassThrough

但我收到以下消息:

enter image description here

传递查询包含所有连接信息,并且通过多次运行确认SQL语法是正确的,因此不确定我在VBA调用中缺少的是什么。

3 个答案:

答案 0 :(得分:5)

使用QueryDef的Execute方法:

CurrentDb.QueryDefs("Q_UPDATE_PASSTHROUGH").Execute

我认为你不应该在这里明确地包含 dbSQLPassThrough 选项,但是你可以尝试这样做:

CurrentDb.QueryDefs("Q_UPDATE_PASSTHROUGH").Execute dbSQLPassThrough

答案 1 :(得分:1)

我确认QueryDef的Execute方法是实现目标的推荐方法。

CurrentDb.QueryDefs("Q_UPDATE_PASSTHROUGH").Execute

但是,我可以指出,在与Access 2010类似的情况下,dbSQLPassThrough参数使用Options会导致Run-time error '3001': Invalid Argument

答案 2 :(得分:1)

我最近遇到了同样的问题。尽管上述Execute方法在大多数情况下都有效,但是某些人(包括我在内)在使用参数 dbSQLPassThrough 时遇到了Run-time error '3001': Invalid Argument。我上面的答案也解决了这一问题,即使在最简单的SQL语句中也是如此。

对于遇到相同问题的人,我建议使用OpenQuery方法作为替代方法。

以下代码的有效替代

CurrentDb.QueryDefs("Q_UPDATE_PASSTHROUGH").Execute

将是

DoCmd.OpenQuery "Q_UPDATE_PASSTHROUGH"

我知道此线程已有4年的历史,但是,在Google上搜索不起作用的Execute方法的解决方案会将您直接带到该线程,这就是为什么我认为添加替代解决方案会很有用的原因为我解决了这个问题。