Procedimientos almacenados

Hola emperador, se mucho sobre visual basic... Pero estoy aponchado con lo que son los procedimientos almacenados, he creado algunos me funcionan bien pero estos tienen mensajes que yo mismo cree, la pregunta es la siguiente, ¿cómo puedo traer esos mensajes desde sql para que me los muestre visual basic? Espero respuestas cuidate que estés bien

1 Respuesta

Respuesta
1
Yo los traigo a través de parámetros de salida
te noto con experiencia, no se como llamas a los stored, pero si les pasas parámetros, para salir son muy parecidos en cuanto a declaración nada más es que son output
por favor me podrías pasar pedazo del stored en donde pones los mensajes
Haber el stored desde la aplicación visual basic si me funciona, le ingreso los parámetros, aquí esta el stored para que veas la verdad es que estoy con muchas ganas de aprender bien esto...
CREATE PROCEDURE spAgregaCliente
         @ID_CLIENTE  AS BIGINT,
         @NOM_CLIENTE AS NCHAR(50),
         @DIR_COM AS NCHAR(100),
         @msg AS VARCHAR(100) OUTPUT
AS
begin
        SET NOCOUNT ON;
         IF EXISTS (SELECT * FROM cliente WHERE id_cliente = @ID_CLIENTE)
             BEGIN
        SET @msg = 'Cliente ya esta registrado, dentro del sistema.'
            END
          ELSE
     BEGIN
        INSERT INTO cliente (id_cliente,n_cliente) VALUES (@ID_CLIENTE,@NOM_CLIENTE)
        INSERT INTO dbo.comuna (id_cliente,dir_comuna)  VALUES (@ID_CLIENTE,@DIR_COM)
        SET @msg = 'Cliente y direccion se agrego correctamente.'
              END
END
GO
Ese es el stored, fíjate en los mensajes... esos son los que quiero mostrar por pantalla desde visual
asi lo ejecuto desde visual
cn.Execute ("DECLARE @msg AS VARCHAR(100); " & _
                    "EXEC spAgregaCliente '" & Me.sumid & "','" & Me.TxtTrabajadores(0).Text & "','" & Me.TxtTrabajadores(1).Text & "',@msg OUTPUT " & _
                    "SELECT @msg AS msg")
msg es la variable donde se almacena el mensaje... como hago para que aparezca en un msgbox de visual
Yo los trabajo distinto
BytTipoComando = adCmdStoredProc
                          ObjAccesoDB. EjecutarCmd StrComandoSQL, BytTipoComando,, VarParametrosIN, varParametrosOUT
             StrComandoSQL = "SELECT isnull ( Sum(importe) * 100 / 3,0) AS Having Sum(Importe) <> 0"
             If varParametrosOUT(1) < 0 Then
fijate que los trabajo muy distinto, uso una conexion donde le indico que tipo de comando, los parametros de entrada (como vectores) y los parametros de salida que dependen del stored, si son 14 te trae 14 si son 1 te trae, despues usando varparametrosOUT(1), o, (0), ahi segun el stored sabes en que posicion cae cada cosa o viendo la documentacion.
¿Pero para mostrar los datos los tengo que poner en un recordset? Tienes alguna aplicación donde salga como poder traer los datos mediante un stored, lo otro por que he investigado se puede poner cualquier tipo de sentencia o query... ¿a eso asumo que puedo hacer un inner join e invocarlo desde visual verdad?
Nono cuando vos tienes el output, eso es del stored
pero de alguna manera tener que traerlo para trabajar al visual
el recordset es solo la herramienta donde haces la conexión, le decís que le estas pasando, le pasas las variables de entrada y las de salida las maneja el stored.
Después según la programación que hagas, en mi caso, a través del uso del recordset llego a obtener todos los varametros de salida y los trabajo como un vector
acá te paso los pasos de como lo hago
primero el recordset
BytTipoComando = adCmdStoredProc
                          ObjAccesoDB. EjecutarCmd StrComandoSQL, BytTipoComando,, VarParametrosIN, varParametrosOUT
aca van todos los datos al procedimiento ejecutar
EJECUTAR
'Aca ejecuta el Comando y verifica si existen parametros de salida
                                                                                                                                                         ObjComando.Execute
        If Not IsMissing(varParametrosOUT) Then
            Dim objParametro As ADODB.Parameter
            IntIndice = 0
            varParametrosOUT = Array("")
            For Each objParametro In ObjComando.Parameters
                If objParametro.Direction = adParamOutput Or objParametro.Direction = adParamInputOutput Then
                    ReDim Preserve varParametrosOUT(0 To IntIndice)
                    varParametrosOUT(IntIndice) = objParametro.Value
                    IntIndice = IntIndice + 1
                End If
            Next
            Set objParametro = Nothing
        End If
Bueno aca fijate como los uso una vez que vuelve al procedimiento original, y segun la documentacion se cual es cero u uno.
         If varParametrosOUT(1) < 0 Then
                   tot_Bruto_ret60A = rs1!BRUTORetPer60A + varParametrosOUT(0)
                   Tot_ret60A = rs1!RETPer60A + varParametrosOUT(1)
         Else
                 tot_Bruto_ret60A = varParametrosOUT(0) - rs1!BRUTORetPer60A
                  Tot_ret60A = varParametrosOUT(1) - rs1!RETPer60A
       End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas