web-dev-qa-db-fra.com

Procédure stockée d'appel MS Access SQL Server

J'ai une application MS Access qui contient toutes les tables liées à SQL Server, donc dans le code ou la requête VBA MS Access, je travaille avec ces tables très simplement, j'y accède par nom, comme [Customers].

J'ai également une procédure stockée dans SQL Server appelée sp_CopyData que je dois appeler depuis mon code VBA. Comment puis-je faire cela sans créer de nouvelle connexion à SQL Server (je l'ai déjà quelque part!? Parce que j'ai accès aux tables)?

Ou c'est impossible? Appréciez toute aide. Merci!

13
ihorko

La bonne réponse trouvée, elle devrait être comme:

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
19
ihorko

Créez une requête d'intercommunication et vous pouvez ensuite l'utiliser dans toute l'application à tout moment lorsque vous avez besoin d'exécuter du T-SQL.

Le code cela devient:

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

Le code dans MS Access fonctionne pour moi:

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
6
Lubart

Essayer:

CurrentProject.Connection.Execute "EXEC sp_CopyData"

Références: http://msdn.Microsoft.com/en-us/library/office/ff821478 (v = office.14) .aspx

4
Bogdan Sahlean