【问题标题】:MS Access call SQL Server stored procedureMS Access 调用 SQL Server 存储过程
【发布时间】:2013-09-18 23:48:36
【问题描述】:

我有一个 MS Access 应用程序,其中包含链接到 SQL Server 的所有表,因此在 MS Access VBA 代码或查询中,我使用这些表非常简单,我通过名称访问它们,例如 [Customers]

我在 SQL Server 中有一个名为 sp_CopyData 的存储过程,我需要从我的 VBA 代码中调用它。在不创建与 SQL Server 的新连接的情况下如何做到这一点(我已经在某处拥有它!?因为我可以访问表)?

还是不可能?感谢任何帮助。谢谢!

【问题讨论】:

标签: sql-server vba ms-access stored-procedures ms-access-2007


【解决方案1】:

找到了正确的答案,应该是这样的:

Dim qdef As DAO.QueryDef
Set qdef = CurrentDb.CreateQueryDef("")
qdef.Connect = CurrentDb.TableDefs("[ANY LINKED TABLE TO MS SQL SERVER]").Connect
qdef.SQL = "EXEC sp_CopyData"
qdef.ReturnsRecords = False  ''avoid 3065 error
qdef.Execute

【讨论】:

  • 对于任何使用它来运行不返回任何内容的存储过程的人,您可能会收到“(3065)无法执行选择查询。”像我一样的错误。我可以通过在执行查询之前添加行 qdef.ReturnsRecords = False 来解决此问题。
  • 什么是“到 MS SQL SERVER 的任何链接表”?似乎您涉及一个与正在执行的存储过程无关的表。这是不好的形式。
  • @johnywhy 如果您不想在例程中对连接字符串进行硬编码,那么您需要从现有表之一中获取 if。您可以随意使用查询中涉及的查询,仅用于外观和防止投诉,但这会冒着人们认为它比实际更相关的风险。
【解决方案2】:

创建一个传递查询,然后您可以在需要执行某些 T-SQL 的任何时候在整个应用程序中使用它。

变成这样的代码:

With CurrentDb.QueryDefs("qPass")
  .SQL = "exec sp_copydata"
  .ReturnsRecords = False  ''avoid 3065 error
  .Execute
End With

【讨论】:

  • ihorko 和 Kallal 的输入都对我有用,但缺少一点:DAO.QueryDef 对象上的.ReturnsRecords = False
【解决方案3】:

MS Access 中的代码适用于我:

Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
cmd.ActiveConnection = "Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=[DB];Data Source=[PC];Integrated Security=SSPI;"
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "sp_CopyData"
cmd.Parameters.Append cmd.CreateParameter("@param", adVarChar, adParamInput, 255, param)
cmd.Execute

【讨论】:

    【解决方案4】:

    试试:

    CurrentProject.Connection.Execute "EXEC sp_CopyData"
    

    参考:http://msdn.microsoft.com/en-us/library/office/ff821478(v=office.14).aspx

    【讨论】:

    • 就像 CurrentProject.Connection 与当前的 Access DB 建立了连接,而不是与链接的 SQL SERVER... 我需要从 SQL Server 调用它...
    • CurrentProject.Connection 在 ADP 中使用时可能没问题。无论如何,它们已被弃用。
    猜你喜欢
    • 2012-09-06
    • 2015-06-18
    • 2019-03-06
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多