Affecter une valeur de return de procédure stockée à une variable VBA

Cela devrait être très facile, mais je n'ai pas encore trouvé de réponse concise. J'ai une procédure stockée très simple dans le server SQL qui renvoie une valeur entière. Tout ce que je veux faire est d'get cette valeur de return dans une variable à utiliser dans Access.

Procédure stockée:

ALTER PROCEDURE [dbo].[out_GetNextID] @NextSumID integer AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here SELECT @NextSumID = IDENT_CURRENT('Outage Summary')+IDENT_INCR('Outage Summary') RETURN @NextSumID END 

J'utilise ADODB pour exécuter la procédure stockée, et je me sens stupide de devoir requestr cela, mais comment puis-je accéder à la valeur de return dans Access après avoir exécuté cmd.Execute? Merci d'avance et désolé pour la question boiteuse.

Il existe deux approches, utilisant des parameters de sortie ou définissant un ReturnValue (voir ci-dessous). Pour les parameters OUTPUT, en citant ce lien SO :

Pour l'essentiel, il suffit de créer un paramètre SqlParameter, de définir la direction de sortie et de l'append à la collection Parameters de SqlCommand. Ensuite, exécutez la procédure stockée et obtenez la valeur du paramètre.

Voir le code de cette page.

Cependant, vous devez également inclure le mot OUT (ou OUTPUT) dans votre déclaration de variable:

 @NextSumID integer OUT 

Lorsque vous déclarez la variable comme OUT (ou OUTPUT), elle sera returnnée automatiquement, avec la valeur qu'elle a quand la procédure se termine, vous pouvez donc simplement utiliser RETURN.

Renvoyer des données à partir d'une procédure stockée: MSDN

Vous pouvez à la place utiliser RETURN @NextSumID car vous renvoyez simplement une seule valeur entière. Pour cette approche, vous devez spécifier le paramètre en tant que ReturnValue :

 theParameter.Direction = ParameterDirection.ReturnValue 

Cette approche est discutée plus loin ici (MSDN) .

Voici comment vous obtiendriez la valeur de return en utilisant une procédure stockée qui renvoie une valeur. Vous aurez besoin de reference à la bibliothèque Microsoft ActiveX Data Objects 2.8 .

 Sub CheckValue(ByVal NextSumID As Long) 'open connnection Dim ACon As New Connection ACon.Open ("Provider=SQLOLEDB;Data Source=<SqlServer>;" & _ "Initial Catalog=<Table>;Integrated Security=SSPI") 'set command Dim ACmd As New Command Set ACmd.ActiveConnection = ACon ACmd.CommandText = "out_GetNextID" ACmd.CommandType = adCmdStoredProc 'Return value must be first parameter else you'll get error from too many parameters 'Procedure or function "Name" has too many arguments specified. ACmd.Parameters.Append ACmd.CreateParameter("ReturnValue", adInteger, adParamReturnValue) ACmd.Parameters.Append ACmd.CreateParameter("NextSumID", adVarChar, adParamInput, 10, NextSumID) 'execute query Call ACmd.Execute 'get return value Debug.Print "Return value: " & ACmd.Parameters("ReturnValue") ACon.Close End Sub