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!
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
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
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
Essayer:
CurrentProject.Connection.Execute "EXEC sp_CopyData"
Références: http://msdn.Microsoft.com/en-us/library/office/ff821478 (v = office.14) .aspx