Compartilhar via


Chamada de um procedimento armazenado com um comando

Aplica-se ao: Access 2013, Office 2013

Você também pode usar um comando ao chamar um procedimento armazenado. O código a seguir chama um procedimento armazenado no banco de dados de exemplo Northwind, chamado CustOrdersOrders, definido como segue:

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

Esse procedimento armazenado é semelhante ao comando usado em Parâmetros do objeto Command, por usar um parâmetro de identificação do cliente e retornar informações sobre os pedidos desse cliente. O código a seguir usa esse procedimento armazenado como a fonte de um Recordset do ADO.

O uso do procedimento armazenado permite acessar outro recurso do ADO: o método Refresh da coleção Parameters. Usando esse método, o ADO pode preencher automaticamente todas as informações sobre os parâmetros necessários para o comando em tempo de execução. O desempenho é penalizado quando essa técnica é usada, pois o ADO precisa consultar a fonte de dados para obter as informações sobre os parâmetros.

Existem outras diferenças importantes entre o código a seguir e o código de Parâmetros do objeto Command, onde os parâmetros foram inseridos manualmente. Em primeiro lugar, este código não define a propriedade Prepared como True, pois é um procedimento armazenado do SQL Server e é compilado previamente por definição. Em segundo lugar, a propriedade CommandType do objeto Command mudou para adCmdStoredProc, no segundo exemplo, para informar ao ADO que o comando era um procedimento armazenado.

 
'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