我有一个 MS Access 应用程序,其中包含链接到 SQL Server 的所有表,因此在 MS Access VBA 代码或查询中,我使用这些表非常简单,我通过名称访问它们,例如[Customers]
.
此外,我在 SQL Server 中有一个存储过程sp_CopyData
,我需要从我的 VBA 代码中调用它。在不创建与 SQL Server 的新连接的情况下如何做到这一点(我已经在某处拥有它!?因为我可以访问表)?
或者这是不可能的?感谢任何帮助。谢谢!
我有一个 MS Access 应用程序,其中包含链接到 SQL Server 的所有表,因此在 MS Access VBA 代码或查询中,我使用这些表非常简单,我通过名称访问它们,例如[Customers]
.
此外,我在 SQL Server 中有一个存储过程sp_CopyData
,我需要从我的 VBA 代码中调用它。在不创建与 SQL Server 的新连接的情况下如何做到这一点(我已经在某处拥有它!?因为我可以访问表)?
或者这是不可能的?感谢任何帮助。谢谢!
找到了正确的答案,应该是这样的:
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
创建一个传递查询,然后您可以在需要执行某些 T-SQL 的任何时候在整个应用程序中使用它。
代码变成:
With CurrentDb.QueryDefs("qPass")
.SQL = "exec sp_copydata"
.ReturnsRecords = False ''avoid 3065 error
.Execute
End With
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
尝试:
CurrentProject.Connection.Execute "EXEC sp_CopyData"
参考资料: http: //msdn.microsoft.com/en-us/library/office/ff821478 (v=office.14).aspx