【发布时间】:2016-11-10 15:07:19
【问题描述】:
我在我的 SQL 服务器和 MS Access 所在的虚拟机上运行。我建立了一个从 Access 到 SQL 的 ODBC 连接并链接了几个表。我可以对这些表执行常规操作(选择/更新等)。
但是,由于某种奇怪的原因,我无法运行存储过程!该过程在 SSMS 上完美运行,但当我从 Access VBA 调用它时却没有。以下是我用来执行 proc 的代码(我还需要传递 3 个参数,但为简单起见,我已将其从下面的代码中排除):
With CurrentDb.QueryDefs("qPass")
.SQL = "exec [HS].[spGetXMLExtract]"
.Execute
End With
MS Access 返回的错误是
无效的 SQL 语句:预期为“DELETE”、“INSERT”、“PROCEDURE”、“SELECT”或“UPDATE”。
不知道是否会发生这种情况,因为: 1. 我在虚拟机上安装了这些应用程序;和/或 2. 我需要以某种方式将存储过程链接到 MS Access,就像我为表所做的那样(也许这无法完成)。
我想我“可能”能够采用一些复杂的方法,但我不想这样做。示例:
1. 在 SQL 中创建一个包含存储参数的列的表;在执行我的存储过程的那个表上写一个AFTER UPDATE触发器;从 MS Access 触发一个“更新”查询,该查询将更新该表中的参数,然后触发一个 SQL 触发器。或;
2. 完全消除方程式中的存储过程,并通过 MS Access 中的 Sub 执行它的各个语句(选择/更新/插入等)。不知道这是否会导致创建临时表出现问题。
有人可以就此提出建议吗,这是一个真正的障碍!
提前致谢!
【问题讨论】:
-
这应该可以。您确定 "qPass" 是具有正确连接字符串的直通查询,并且
ReturnsRecords= False 吗? -- 如果您手动运行该查询会怎样? -
听起来您没有创建查询 qPass 作为传递。使用 SQL 设计器时,请确保单击(选择)传递选项。完成后,您的代码应该可以正常工作。
-
谢谢大家。我不知道为什么它不起作用,查询对我来说似乎是通过。现在我使用触发器来节省时间,因为我需要在最后期限之前完成。但我会更进一步!
标签: sql-server ms-access stored-procedures