2011-11-23 16 views
7

me gustaría pasar parámetros a un procedimiento almacenado en SQL Server 2008 y me gustaría para almacenar los resultados en un ADODB.Recordsetejecución de procedimientos almacenados y retornar valores de VBA

Actualmente tengo esto:

Public Sub UpdateWithStoredProcedure() 
     Dim cmd As New ADODB.Command 
     Dim conn As ADODB.Connection 
     Dim prm As ADODB.Parameter 
     Dim strConn As String 
     Dim strSQL As String 

     strConn = "Provider=SQLOLEDB.1;" & _ 
      "Data Source=(local); Initial Catalog=NorthWind;" & _ 
      "Integrated Security=SSPI" 

     Set conn = New ADODB.Connection 
     conn.Open strConn 

     Set cmd = New ADODB.Command 
     cmd.CommandText = "procOrderUpdate" 
     cmd.CommandType = adCmdStoredProc 
     cmd.ActiveConnection = conn 

     Set prm = cmd.CreateParameter("OrderID", adInteger, adParamInput) 
     cmd.Parameters.Append prm 
     cmd.Parameters("OrderID").Value = 1 

     Set prm = cmd.CreateParameter("OrderDate", adDate, adParamInput) 
     cmd.Parameters.Append prm 
     cmd.Parameters("OrderDate").Value = "1/1/2007" 

     Set prm = cmd.CreateParameter("ShipVia", adInteger, adParamInput) 
     cmd.Parameters.Append prm 
     cmd.Parameters("ShipVia").Value = 2 
     Set prm = cmd.CreateParameter("Freight", adCurrency, adParamInput) 
     cmd.Parameters.Append prm 
     cmd.Parameters("Freight").Value = "10.5" 

     'Execute the Stored Procedure 
     cmd.Execute 

     'Close the connection 
     conn.Close 
    End Sub 

La pregunta es ¿cómo puedo almacenar esto en un conjunto de registros en lugar de simplemente ejecutarlo?

+0

Está su procedimiento almacenado escrito para devolver un conjunto de registros? –

+0

@tim Disculpe, ¿puede explicar la diferencia entre un procedimiento almacenado que devuelva un juego de registros y la alternativa? –

+0

No todos los procedimientos almacenados están diseñados para devolver un conjunto de registros. Algunos procedimientos almacenados simplemente devuelven información a través de parámetros de "salida". ¿Has probado la sugerencia de Pynner? –

Respuesta

8

Creo que todo lo que necesita es este

Dim Rst As ADODB.Recordset 

y esto

Set Rst = cmd.Execute 
Cuestiones relacionadas