La Web del Programador: Comunidad de Programadores
 
    Pregunta:  18420 - COMO EJECUTAR Y RESCATAR CAMPOS DE UN STOREPROCEDURE EN VB6
Autor:  Christian Campillay
hola mi nombre es Christian y tengo el siguiente problema, necesito ejecutar un procedimiento almacenado y luego captar el resultado del procedimiento, en el fondo los campos que este me entregue, si alguien puede ayudarme se lo agradeceria.

  Respuesta:  Mauricio Leyzaola
A mi me funciona (con SQL Server 7) lo siguiente:

Private Function AsignaConsecutivoEntradaSalida(UnaEntrada As clsEntradaSalida) As Boolean
Dim sSQL As String
Dim Rs As New ADODB.Recordset

sSQL = "SPConsecutivoEntradasSalidas " & UnaEntrada.TipoEntradaSalida & ", " & UnaEntrada.AlmacenId
Rs.ActiveConnection = ADOQuery.ConnectionString
Rs.Open sSQL
EstaEntrada.Anio = Rs(0)
EstaEntrada.NoDocumento = Rs(1)

If Not EsValidoElNoDocumento(EstaEntrada) Then Call AsignaConsecutivoEntradaSalida(EstaEntrada)
Set Rs = Nothing
End Function

Creo que el truco está en hacer un select por cada valor que desees que el stored procedure te devuelva. He intentado con parámetros de tipo Output y tambien con el engorroso método Parameters de ADO, pero ambos sin éxito. Este es el stored procedure que llamo desde el código de arriba:

/* Entradas = 0; Salidas =1 */
CREATE PROCEDURE SPConsecutivoEntradasSalidas

@EsEntrada TINYINT,
@AlmacenId SMALLINT

AS

DECLARE @AnioActual SMALLINT,
@UltimoAnio SMALLINT,
@UltimoDocumento INT

/* Obtener el año actual */
SELECT @AnioActual = DATEPART (yyyy,GETDATE())

/* Obtener el ultimo año de la EntradaSalida */
SELECT @UltimoAnio = ISNULL (MAX(Anio),0)
FROM EntradaSalida
WHERE EsEntrada = @EsEntrada
AND Almacen_Id = @AlmacenId

IF @UltimoAnio < @AnioActual
BEGIN
SELECT @UltimoAnio = @AnioActual
SELECT @UltimoDocumento = 0
END
ELSE
BEGIN
SELECT @UltimoDocumento = ISNULL (MAX(NoDocumento),0)
FROM EntradaSalida
WHERE EsEntrada = @EsEntrada
AND Almacen_Id = @AlmacenId
END

SELECT @UltimoDocumento = @UltimoDocumento + 1

SELECT @UltimoAnio,
@UltimoDocumento
GO

Espero que sirva. Suerte.