Je travaille dans le front-end utilisateur d'Access 2010 avec un back-end Microsoft SQL Server 2008.
Les tables dans Access sont toutes liées à la base de données du serveur SQL.
J'ai une procédure stockée qui insère de nouvelles valeurs (fournies par les paramètres) dans une table.
J'ai posé une question similaire précédemment et obtenu une bonne réponse Appel de la procédure stockée lors du passage des paramètres du module d'accès dans VBA
Je ne sais pas comment trouver les informations nécessaires pour établir une chaîne de connexion (ex: je ne connais pas le fournisseur/nom du serveur/adresse du serveur).
J'ai trouvé une question ici qui disait "Si vous avez déjà une table liée Access pointant vers la base de données SQL Server, vous pouvez simplement utiliser sa chaîne .Connect
Avec un objet DAO.QueryDef pour exécuter la procédure stockée" - - Chaîne de connexion pour Access pour appeler la procédure stockée SQL Server
J'ai essayé d'implémenter ce code. Pour passer des paramètres, j'ai essayé d'utiliser un exemple précédent.
J'ai l'erreur
échec de l'appel
à la ligne Set rst = qdf.OpenRecordset(dbOpenSnapshot)
(sans parler de mon code de paramètres de passage est probablement loin).
Set qdf = CurrentDb.CreateQueryDef("")
qdf.Connect = CurrentDb.TableDefs("tblInstrumentInterfaceLog").Connect
qdf.sql = "EXEC dbo.upInsertToInstrumentInterfaceLog"
qdf.ReturnsRecords = True
Set rst = qdf.OpenRecordset(dbOpenSnapshot)
qdf.Parameters.Append qdf.CreateParameter("@BatchID", adVarChar, adParamInput, 60, BatchID)
qdf.Parameters.Append qdf.CreateParameter("@InstrumentName", adVarChar, adParamInput, 60, InstrumentName)
qdf.Parameters.Append qdf.CreateParameter("@FileName", adVarChar, adParamInput, 60, FileName)
qdf.Parameters.Append qdf.CreateParameter("@QueueId", adVarChar, adParamInput, 60, QuenueId)
rst.Close
Set rst = Nothing
Set qdf = Nothing
Quelqu'un pourrait-il me dire ce qui pourrait ne pas fonctionner avec mon code et pourquoi j'obtiens cette erreur?
Victoria,
Vous pouvez exécuter une procédure stockée à l'aide d'ADO, comme ci-dessous ...
Set mobjConn = New ADODB.Connection
mobjConn.Open "your connection string"
Set mobjCmd = New ADODB.Command
With mobjCmd
.ActiveConnection = Me.Connection
.CommandText = "your stored procedure"
.CommandType = adCmdStoredProc
.CommandTimeout = 0
.Parameters.Append .CreateParameter("your parameter name", adInteger, adParamInput, , your parameter value)
' repeat as many times as you have parameters
.Execute
End With
Pour obtenir votre chaîne de connexion, vous pouvez utiliser la ligne
Debug.Print CurrentDb.TableDefs("tblInstrumentInterfaceLog").Connect
dans la fenêtre Exécution et cela devrait vous montrer une chaîne de connexion que vous pouvez utiliser.
Pourriez-vous essayer cela et me faire savoir si vous avez des problèmes.
Cendre
Peut également formuler un appel de proc stocké qui renvoie un jeu de résultats sous la forme d'une instruction select.
Selon cet exemple:
Sub Macro2()
'
' Macro1 Macro
'
'Declare variables'
Dim mySql As String
Set objMyConn = New ADODB.Connection
objMyConn.CommandTimeout = 0
Set objMyCmd = New ADODB.Command
objMyCmd.CommandTimeout = 0
Set objMyRecordset = New ADODB.Recordset
objMyConn.ConnectionString = CStr(Range("ADOConnectString").Value)
objMyConn.Open
Set objMyRecordset.ActiveConnection = objMyConn
Set objMyCmd.ActiveConnection = objMyConn
' call dbo.TotalLHCLoadingRate Range("TotalLHCLoadingRate")
mySql = "select dbo.TotalLHCLoadingRate ( " _
+ CStr(Range("MemberNo").Value) _
+ ", getdate() ) "
MsgBox "TotalLHCLoadingRate SQL : " + mySql
objMyCmd.CommandText = mySql
objMyCmd.CommandType = adCmdText
objMyCmd.Execute
objMyRecordset.Open objMyCmd
Range("TotalLHCLoadingRate ").Value = ""
Range("TotalLHCLoadingRate ").CopyFromRecordset (objMyRecordset)
Range("TotalLHCLoadingRate ").Interior.ColorIndex = 37
MsgBox "TotalLHCLoadingRate : " + CStr(Range("TotalLHCLoadingRate ").Value)
objMyRecordset.Close
End Sub