Partager via


Appel d’une procédure stockée à l’aide d’une commande

S’applique à : Access 2013, Office 2013

Vous pouvez aussi utiliser une commande lorsque vous appelez une procédure stockée. Le code suivant appelle une procédure stockée dans l'exemple de base de données Northwind, appelée CustOrdersOrders, qui est définie comme suit :

 
CREATE PROCEDURE CustOrdersOrders @CustomerID nchar(5) AS 
SELECT OrderID, OrderDate, RequiredDate, ShippedDate 
FROM Orders 
WHERE CustomerID = @CustomerID 
ORDER BY OrderID 

Cette procédure stockée est similaire à la commande utilisée dans Paramètres de l'objet Command, dans la mesure où elle prend un paramètre CustomerID et retourne des informations sur les commandes de ce client. Le code suivant utilise cette procédure stockée comme source d'un objet Recordset ADO.

L'utilisation de la procédure stockée vous permet d'accéder à une autre fonctionnalité d'ADO : la méthode Refresh de la collection Parameters. Grâce à cette méthode, ADO peut remplir automatiquement toutes les informations sur les paramètres requis par la commande, au moment de l'exécution. Cette technique pénalise les performances car ADO doit interroger la source de données pour obtenir des informations sur les paramètres.

Il existe d'autres différences importantes entre le code suivant et le code illustré dans Paramètres de l'objet Command, où les paramètres ont été entrés manuellement. D'une part, ce code n'affecte pas à la propriété Prepared la valeur True car il s'agit d'une procédure stockée SQL Server, par nature précompilée. D'autre part, la propriété CommandType de l'objet Command a été affectée de la valeur adCmdStoredProc dans le deuxième exemple pour informer ADO que la commande est une procédure stockée.

 
'BeginAutoParamCmd 
 On Error GoTo ErrHandler: 
 
 Dim objConn As New ADODB.Connection 
 Dim objCmd As New ADODB.Command 
 Dim objParm1 As New ADODB.Parameter 
 Dim objRs As New ADODB.Recordset 
 
 ' Set CommandText equal to the stored procedure name. 
 objCmd.CommandText = "CustOrdersOrders" 
 objCmd.CommandType = adCmdStoredProc 
 
 ' Connect to the data source. 
 Set objConn = GetNewConnection 
 objCmd.ActiveConnection = objConn 
 
 ' Automatically fill in parameter info from stored procedure. 
 objCmd.Parameters.Refresh 
 
 ' Set the param value. 
 objCmd(1) = "ALFKI" 
 
 ' Execute once and display... 
 Set objRs = objCmd.Execute 
 
 Debug.Print objParm1.Value 
 Do While Not objRs.EOF 
 Debug.Print vbTab & objRs(0) & vbTab & objRs(1) & vbTab & _ 
 objRs(2) & vbTab & objRs(3) 
 objRs.MoveNext 
 Loop 
 
 ' ...then set new param value, re-execute command, and display. 
 objCmd(1) = "CACTU" 
 Set objRs = objCmd.Execute 
 
 Debug.Print objParm1.Value 
 Do While Not objRs.EOF 
 Debug.Print vbTab & objRs(0) & vbTab & objRs(1) & vbTab & _ 
 objRs(2) & vbTab & objRs(3) 
 objRs.MoveNext 
 Loop 
 
 'clean up 
 objRs.Close 
 objConn.Close 
 Set objRs = Nothing 
 Set objConn = Nothing 
 Set objCmd = Nothing 
 Set objParm1 = Nothing 
 Exit Sub 
 
ErrHandler: 
 'clean up 
 If objRs.State = adStateOpen Then 
 objRs.Close 
 End If 
 
 If objConn.State = adStateOpen Then 
 objConn.Close 
 End If 
 
 Set objRs = Nothing 
 Set objConn = Nothing 
 Set objCmd = Nothing 
 Set objParm1 = Nothing 
 
 If Err <> 0 Then 
 MsgBox Err.Source & "-->" & Err.Description, , "Error" 
 End If 
'EndAutoParamCmd