Foros del Web » Programando para Internet » ASP Clásico »

Ayuda con llamada a Procedimiento Almacenado

Estas en el tema de Ayuda con llamada a Procedimiento Almacenado en el foro de ASP Clásico en Foros del Web. Hola muchachos tengo un problema con una llamada a un Procedimiento Almacenado, ojala me puedan ayudar a resolver mi problema. Estoy trabajando con asp y ...
  #1 (permalink)  
Antiguo 01/01/2008, 22:48
Avatar de eeyore  
Fecha de Ingreso: mayo-2006
Mensajes: 53
Antigüedad: 19 años
Puntos: 0
Pregunta Ayuda con llamada a Procedimiento Almacenado

Hola muchachos tengo un problema con una llamada a un Procedimiento Almacenado, ojala me puedan ayudar a resolver mi problema. Estoy trabajando con asp y sql server 2000.

Este es el asp donde se ingresan los datos:

Código PHP:
<form name="forma" action="pruebaSP.asp" method="post">
    <
table width="80%"  border="0" align="center" cellpadding="0" cellspacing="0">
        <
tr
            <
td height="73" align="right">
                <
div align="right"><font color="#999999" ><b>Prueba de Insert en SP&nbsp; &nbsp;</b></font><img src="http://www.forosdelweb.com/images/p1.gif" width="56" height="61" align="absmiddle">
            </
td>
        </
tr>
        <
tr>
          <
td>
                <
table>
                    <
tr>
                        <
td height="15" bgcolor="98BEE2" ><div align="center">Número de Operacion:</div></td>
                        <
td  height="15"  class="formaCampo"> <div align="center">
                          <
input size="50" type="text" maxlength="50" name="op" value="">
                      </
div></td>
                    </
tr>
                    <
tr>
                        <
td height="15" bgcolor="98BEE2" > <div align="center">Número de Cuenta:</div></td>
                        <
td class="formaCampo" height="15"> <div align="center">
                          <
input size="50" type="text" maxlength="50" name="cuenta" value="">
                      </
div></td>
                    </
tr>
                </
table>
            </
td>
        </
tr>
    </
table>
    <
br>
    <
div align="right">
        <
input type="submit" value="Insert SP">
    </
div>
</
form
Este es el codigo del archivo que recibe el anterior formulario, consigue los valores, creo la conexion y mando llamar el SP:

Código PHP:
<tr
    <
td height="21" colspan="2" align="center">
    <!---------------------------------->
    <%
    
op request.Form("op")
    
cuenta request.Form("cuenta")
    
    
response.Write("Operacion: "&op&"<br>")
    
response.Write("Cuenta: "&cuenta&"<br>")
    
        
Creo la conexion
    Set Conn 
Server.CreateObject("ADODB.Connection")
    
Conn.Open "ejemplo"
    
    
sql "Execute procedure InsertaEjemplo("&op&","&cuenta&")"
    
response.Write("sql SP: "&sql&"<br><br>")
    
Set busq Conn.execute(sql)
    
    if 
Not busq.eof Then
        response
.Write("SI PROCEDE")
    else
        
Conn.close
        set Conn 
Nothing
        response
.Write("NO PROCEDE")
    
end if
    %>
    <!-- 
AQUI VA EL CONTENIDO -->
    </
td>
</
tr
Y este es el SP que mando llamar:

Código PHP:
CREATE PROCEDURE InsertaEjemplo

@numOp int,

@
numCuenta int

AS

INSERT INTO movimientos(operacion,cvecuentaVALUES(@numOp, @numCuenta)

RETURN @@
IDENTITY
GO 
Me marca el siguiente error:

Microsoft OLE DB Provider for SQL Server error '80040e14'

Sintaxis incorrecta cerca de la palabra clave 'procedure'.


en esta la linea que hago la llamada al SP:

Set busq = Conn.execute(sql)

al ejecutar la siguiente linea:

Execute procedure InsertaEjemplo(15,25)

No se que estoy haciendo mal, agradezco su ayuda.

Última edición por eeyore; 01/01/2008 a las 22:50 Razón: error de redacion
  #2 (permalink)  
Antiguo 01/01/2008, 23:23
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Ayuda con llamada a Procedimiento Almacenado

Te sugiero utilizar el objeto Command al llamar a tus stored procedures, por seguridad, eficiencia y estructura de codigo.

Código:
<%
op = request.Form("op")
cuenta = request.Form("cuenta")

Set cmd = Server.CreateObject("ADODB.Command")
Set Conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")

Conn.Open "ejemplo"

cmd.CommandText = "InsertaEjemplo"
cmd.CommandType = adCmdStoredProc

cmdParameters.Append cmd.CreateParameter("numCuenta", adInteger, adParamInput, 4, cuenta)
cmdParameters.Append cmd.CreateParameter("numOp", adInteger, adParamInput, 4, op)

rs = cmd.Execute()
%>
Mas informacion por aqui: http://support.microsoft.com/kb/165156

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 01/01/2008, 23:55
Avatar de eeyore  
Fecha de Ingreso: mayo-2006
Mensajes: 53
Antigüedad: 19 años
Puntos: 0
Pregunta Re: Ayuda con llamada a Procedimiento Almacenado

Cita:
Iniciado por u_goldman Ver Mensaje
Te sugiero utilizar el objeto Command al llamar a tus stored procedures, por seguridad, eficiencia y estructura de codigo.

Código:
<%
op = request.Form("op")
cuenta = request.Form("cuenta")

Set cmd = Server.CreateObject("ADODB.Command")
Set Conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")

Conn.Open "ejemplo"

cmd.CommandText = "InsertaEjemplo"
cmd.CommandType = adCmdStoredProc

cmdParameters.Append cmd.CreateParameter("numCuenta", adInteger, adParamInput, 4, cuenta)
cmdParameters.Append cmd.CreateParameter("numOp", adInteger, adParamInput, 4, op)

rs = cmd.Execute()
%>
Mas informacion por aqui: http://support.microsoft.com/kb/165156

Saludos
Muchas gracias por tu ayuda, dejame checarlo a ver si lo puedo hacer funcionar, solo me quedan dos preguntas:

1.- Con las lineas de cmdParameters tengo que especificar tanto el parametro como el campo de la tabla?

2.- Como uso y manejo los Recordset? El resultado que regresa el sp es un Recordset?
  #4 (permalink)  
Antiguo 02/01/2008, 12:15
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Ayuda con llamada a Procedimiento Almacenado

Cita:
Iniciado por eeyore Ver Mensaje
Muchas gracias por tu ayuda, dejame checarlo a ver si lo puedo hacer funcionar, solo me quedan dos preguntas:

1.- Con las lineas de cmdParameters tengo que especificar tanto el parametro como el campo de la tabla?

2.- Como uso y manejo los Recordset? El resultado que regresa el sp es un Recordset?
1. Solamente el nombre del parámetro y su tipo de dato
2. Es lo mismo, finalmente recuperas en un recordset lo que arroje el SP.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 02/01/2008, 21:00
Avatar de eeyore  
Fecha de Ingreso: mayo-2006
Mensajes: 53
Antigüedad: 19 años
Puntos: 0
Pregunta Re: Ayuda con llamada a Procedimiento Almacenado

Cita:
Iniciado por u_goldman Ver Mensaje
1. Solamente el nombre del parámetro y su tipo de dato
2. Es lo mismo, finalmente recuperas en un recordset lo que arroje el SP.

Saludos
Hola, gracias por tu ayuda, sigo con problemas me marca el siguiente error:

ADODB.Command error '800a0bb9'

Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros.


Este es la adaptacion que le hice al codigo con la info que me proporcionaste:

Código PHP:
<%
rec request.Form("rec")
cuenta request.Form("cuenta")

response.Write("rec: "&rec&"<br>")
response.Write("cuenta: "&cuenta&"<br>")

Set cmd Server.CreateObject("ADODB.Command")
Set Conn Server.CreateObject("ADODB.Connection")
Set rs Server.CreateObject("ADODB.Recordset")

Conn.Open "ejemplo"

cmd.CommandText "InsertaEjemplo"
cmd.CommandType adCmdStoredProc

cmdParameters
.Append cmd.CreateParameter("rec"adIntegeradParamInput4rec)
cmdParameters.Append cmd.CreateParameter("cuenta"adIntegeradParamInput2cuenta)

rs cmd.Execute()

if 
err.numer 0 Then
    response
.Write("SI PROCEDE")
else
    
response.Write("NO PROCEDE")
end if

rs.close
set rs 
nothing

response
.Write("ok todo ok")
%> 
Cual podria ser el error? Tienen que ser del mismo tipo tanto las variables del asp, del sp y las de la la tabla de sql?

Segun he checado en ejemplos, la instruccion cmdParameters.Append cmd.CreateParameter() contiene los siguientes parametros:

cmdParameters.Append cmd.CreateParameter("nombre_variable_sp", tipo_Dato, tipo_Parametro, longuitud, variableX)

donde variableX es el valor que se le pasa a "nombre_variable_sp", o estoy en un error?
  #6 (permalink)  
Antiguo 02/01/2008, 23:49
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Ayuda con llamada a Procedimiento Almacenado

MMmmmmhhh ok, dos cosas, la longitud del entero es 4, son dos enteros cierto?

cmdParameters.Append cmd.CreateParameter("rec", adInteger, adParamInput, 4, rec)
cmdParameters.Append cmd.CreateParameter("cuenta", adInteger, adParamInput, 4, cuenta)

La otra cosa es que no tengas las constantes de ADO, incluye el archivo Adovbs.inc


Nos cuentas como te fue...
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 03/01/2008, 11:34
Avatar de eeyore  
Fecha de Ingreso: mayo-2006
Mensajes: 53
Antigüedad: 19 años
Puntos: 0
Pregunta Re: Ayuda con llamada a Procedimiento Almacenado

Cita:
Iniciado por u_goldman Ver Mensaje
MMmmmmhhh ok, dos cosas, la longitud del entero es 4, son dos enteros cierto?

cmdParameters.Append cmd.CreateParameter("rec", adInteger, adParamInput, 4, rec)
cmdParameters.Append cmd.CreateParameter("cuenta", adInteger, adParamInput, 4, cuenta)

La otra cosa es que no tengas las constantes de ADO, incluye el archivo Adovbs.inc


Nos cuentas como te fue...
Sobre la longitud del entero, puse 2 y 4 porque en la tabla de sql, tengo los siguientes campos:

folio int 4
rec smallint 2
cvecuenta float 8

donde el folio es auntonumerico, por eso mi pregunta que si tanto en la llamada del asp, como en SP y en la tabla tenian que tener el mismo tipo los parametros y campos.

Asi es como tengo el SP
Código PHP:
CREATE PROCEDURE InsertaEjemplo

@rec int,

@
numCuenta int

AS

INSERT INTO movimientos(rec,cvecuentaVALUES(@rec, @numCuenta)

RETURN @@
IDENTITY
GO 
pero no se si debo tener los parametros igual que en la tabla y dejarlo asi:

Código PHP:
CREATE PROCEDURE InsertaEjemplo

@rec smallint,

@
numCuenta float

AS

INSERT INTO movimientos(rec,cvecuentaVALUES(@rec, @numCuenta)

RETURN @@
IDENTITY
GO 
y lo mismo para el asp, en la llamada:

Código PHP:
cmdParameters.Append cmd.CreateParameter("rec"adIntegeradParamInput4rec)
cmdParameters.Append cmd.CreateParameter("cuenta"adIntegeradParamInput2cuenta
pero en lugar del adInteger no se como poner el equivalente al smallint y float.

Acaso me estoy complicando las cosas?

Por cierto para que son las constantes ADO?
  #8 (permalink)  
Antiguo 03/01/2008, 11:38
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Ayuda con llamada a Procedimiento Almacenado

Ahhhh, necesitas leer esto: http://msdn2.microsoft.com/en-us/library/aa160695.aspx

Tus valores son adSmallInt y adDouble

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #9 (permalink)  
Antiguo 03/01/2008, 13:30
Avatar de eeyore  
Fecha de Ingreso: mayo-2006
Mensajes: 53
Antigüedad: 19 años
Puntos: 0
Pregunta Re: Ayuda con llamada a Procedimiento Almacenado

Cita:
Iniciado por u_goldman Ver Mensaje
Ahhhh, necesitas leer esto: http://msdn2.microsoft.com/en-us/library/aa160695.aspx

Tus valores son adSmallInt y adDouble

Saludos
Ok, realizado ya las modificaciones que me mencionas, el codigo asp queda de la siguiente manera:

Código PHP:
...codigo html

<!--#include file="Adovbs.inc"-->

...codigo html

<%
Dim cmd,rs
rec 
request.Form("rec")
cuenta request.Form("cuenta")

response.Write("Rec: "&rec&"<br>")
response.Write("Cuenta: "&cuenta&"<br>")

Set cmd Server.CreateObject("ADODB.Command")
Set Conn Server.CreateObject("ADODB.Connection")
Set rs Server.CreateObject("ADODB.Recordset")

Conn.Open "ejemplo"

cmd.CommandText "InsertaEjemplo"
cmd.CommandType adCmdStoredProc

cmdParameters
.Append cmd.CreateParameter("rec"adSmallIntadParamInput2rec)
cmdParameters.Append cmd.CreateParameter("cuenta"adDoubleadParamInput8cuenta)

rs cmd.Execute()

if 
err.numer 0 Then
    response
.Write("SI PROCEDE")
else
    
response.Write("NO PROCEDE")
end if

rs.close
set rs 
nothing

response
.Write("ok todo ok")
%> 
y el codigo del SP queda asi:

Código PHP:
CREATE PROCEDURE InsertaEjemplo

@rec smallint,

@
cuenta float

AS

INSERT INTO movimientos(recaudadora,cvecuentaVALUES(@rec, @cuenta)

RETURN @@
IDENTITY
GO 
Pero ahora me marca este error:


Error de Microsoft VBScript en tiempo de ejecución error '800a01a8'

Se requiere un objeto: ''


En esta linea:

cmdParameters.Append cmd.CreateParameter("rec", adSmallInt, adParamInput, 2, rec)


No se que estoy haciendo mal
  #10 (permalink)  
Antiguo 03/01/2008, 13:48
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Ayuda con llamada a Procedimiento Almacenado

Tranquilo, nada mas te esta diciendo que no tienes un objeto

cmd.Parameters.Append cmd.CreateParameter("rec", adSmallInt, adParamInput, 2, rec)
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #11 (permalink)  
Antiguo 03/01/2008, 14:17
Avatar de eeyore  
Fecha de Ingreso: mayo-2006
Mensajes: 53
Antigüedad: 19 años
Puntos: 0
Sonrisa Re: Ayuda con llamada a Procedimiento Almacenado

Cita:
Iniciado por u_goldman Ver Mensaje
Tranquilo, nada mas te esta diciendo que no tienes un objeto

cmd.Parameters.Append cmd.CreateParameter("rec", adSmallInt, adParamInput, 2, rec)
Creo que ya funciona, pero lo podre checar a conciencia hasta mañana porque tengo que salir a un pendiente.

Creo que existian dos errores, uno el punto que me indicas y el otro me lo daba porque no estaba abierta la conexion o estaba fuera de contexo, revisando otros ejemplos vi esta linea:

Set cmd.ActiveConnection = Conn

la agrege y al parecer funciono, mañana te digo detalladamente si ya quedo.

Muchisimas gracias por tu ayuda, en verdad te lo agradezco :)
  #12 (permalink)  
Antiguo 03/01/2008, 14:23
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Ayuda con llamada a Procedimiento Almacenado

Por nadas
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #13 (permalink)  
Antiguo 07/01/2008, 13:12
Avatar de eeyore  
Fecha de Ingreso: mayo-2006
Mensajes: 53
Antigüedad: 19 años
Puntos: 0
Pregunta Re: Ayuda con llamada a Procedimiento Almacenado

Cita:
Iniciado por u_goldman Ver Mensaje
Tranquilo, nada mas te esta diciendo que no tienes un objeto

cmd.Parameters.Append cmd.CreateParameter("rec", adSmallInt, adParamInput, 2, rec)
Hola como estan, yo aqui dando lata de nuevo, pues ya lo cheque y si funciona, ya me inserta los datos que capturo en el formulario, ahora solo tengo un problema al momento de solicitar el parametro de salida del SP el cual un @@IDENTITY:

Código PHP:
CREATE PROCEDURE InsertaEjemplo

@rec smallint,

@
cuenta float

AS

INSERT INTO movimientos(recaudadora,cvecuentaVALUES(@rec, @cuenta)

RETURN @@
IDENTITY
GO 
el codigo asp llamando el SP quedo asi:

Código PHP:
Set cmd Server.CreateObject("ADODB.Command")
Set Conn Server.CreateObject("ADODB.Connection")
Set rs Server.CreateObject("ADODB.Recordset")

Conn.Open "ejemplo"

Set cmd.ActiveConnection Conn
cmd
.CommandText "InsertaEjemplo"
cmd.CommandType adCmdStoredProc

cmd
.Parameters.Append cmd.CreateParameter("rec"adSmallIntadParamInput2rec)
cmd.Parameters.Append cmd.CreateParameter("cuenta"adDoubleadParamInput8cuenta)
cmd.Parameters.Append cmd.CreateParameter("idReturn"adIntegeradParamOutput,4)

rs cmd.Execute()
response.Write("ok todo ok")

set rs nothing 
Como debo pedir el valor que me regresa el RETURN @@IDENTITY del SP?
  #14 (permalink)  
Antiguo 07/01/2008, 13:17
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Ayuda con llamada a Procedimiento Almacenado

Código:
newId = cmd.Parameters("idReturn")
Salú!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #15 (permalink)  
Antiguo 07/01/2008, 13:32
Avatar de eeyore  
Fecha de Ingreso: mayo-2006
Mensajes: 53
Antigüedad: 19 años
Puntos: 0
Pregunta Re: Ayuda con llamada a Procedimiento Almacenado

Cita:
Iniciado por u_goldman Ver Mensaje
Código:
newId = cmd.Parameters("idReturn")
Salú!
El codigo quedo de la siguiente manera:

Código PHP:
newId cmd.Parameters("idReturn")
response.Write("newId: "&newId&"<br>"
pero me marca el siguiente error:


ADODB.Command error '800a0cc1'

No se encontró el elemento en la colección que corresponde con el nombre o el ordinal pedido.


No se sera poruqe en el SP no le estoy especificando un nombre al parametro de retorno?
  #16 (permalink)  
Antiguo 07/01/2008, 14:12
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Ayuda con llamada a Procedimiento Almacenado

OOhhh, aahhh, a ver, decláralo como parámetro de salida en tu stored:

Código:
CREATE PROCEDURE InsertaEjemplo

@rec smallint,

@cuenta float

@idnuevo int OUTPUT
AS

INSERT INTO movimientos(recaudadora,cvecuenta) VALUES(@rec, @cuenta);SELECT @idnuevo = @@IDENTITY


GO
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway

Última edición por u_goldman; 07/01/2008 a las 14:16 Razón: Corrijo, ando medio lento esta mañana
  #17 (permalink)  
Antiguo 07/01/2008, 16:00
Avatar de eeyore  
Fecha de Ingreso: mayo-2006
Mensajes: 53
Antigüedad: 19 años
Puntos: 0
Pregunta Re: Ayuda con llamada a Procedimiento Almacenado

Cita:
Iniciado por u_goldman Ver Mensaje
OOhhh, aahhh, a ver, decláralo como parámetro de salida en tu stored:

Código:
CREATE PROCEDURE InsertaEjemplo

@rec smallint,

@cuenta float

@idnuevo int OUTPUT
AS

INSERT INTO movimientos(recaudadora,cvecuenta) VALUES(@rec, @cuenta);SELECT @idnuevo = @@IDENTITY


GO
ok, realizada la correcion, asi queda el SP:

Código PHP:
CREATE PROCEDURE InsertaEjemplo

@rec smallint,

@
cuenta float,

@
idnuevo int OUTPUT

AS

INSERT INTO actostransm_prueba(recaudadora,cvecuentaVALUES(@rec, @cuenta);
SELECT @idnuevo = @@IDENTITY
GO 
y el ASP, asi:

Código PHP:
Set cmd.ActiveConnection Conn
cmd
.CommandText "InsertaEjemplo"
cmd.CommandType adCmdStoredProc

cmd
.Parameters.Append cmd.CreateParameter("rec"adSmallIntadParamInput2rec)
cmd.Parameters.Append cmd.CreateParameter("cuenta"adDoubleadParamInput8cuenta)


rs cmd.Execute()

newId cmd.Parameters("idnuevo")
response.Write("newId: "&newId&"<br>")

response.Write("ok todo ok")

set rs nothing 
Pero ahora me da este error:

Microsoft OLE DB Provider for SQL Server error '80040e10'

El procedimiento 'InsertaEjemplo' precisa el parámetro '@idnuevo', que no se ha especificado.

:S
  #18 (permalink)  
Antiguo 07/01/2008, 16:02
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Ayuda con llamada a Procedimiento Almacenado

Tal como el error indica, falta definir el parámetro

cmd.Parameters.Append cmd.CreateParameter("idnuevo", adInteger, adParamOutput, 8)


Saludos
  #19 (permalink)  
Antiguo 07/01/2008, 16:21
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Ayuda con llamada a Procedimiento Almacenado

Este thread era de asesoría personalizada hasta que llegaste a arruinarlo ahora tú me pagas... es bueno verte de nuevo tigus, tigus!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #20 (permalink)  
Antiguo 07/01/2008, 16:28
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años, 4 meses
Puntos: 53
Re: Ayuda con llamada a Procedimiento Almacenado

Cita:
Iniciado por Myakire Ver Mensaje
Tal como el error indica, falta definir el parámetro

cmd.Parameters.Append cmd.CreateParameter("idnuevo", adInteger, adParamOutput, 8)


Saludos
Cita:
Iniciado por u_goldman Ver Mensaje
Este thread era de asesoría personalizada hasta que llegaste a arruinarlo ahora tú me pagas... es bueno verte de nuevo tigus, tigus!
Si gustan puedo comenzar a preguntar así, hacemos un concurso y el ganador.. recibe la paga...

jejej

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #21 (permalink)  
Antiguo 08/01/2008, 08:27
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Ayuda con llamada a Procedimiento Almacenado

Cita:
Iniciado por u_goldman Ver Mensaje
Este thread era de asesoría personalizada hasta que llegaste a arruinarlo ahora tú me pagas... es bueno verte de nuevo tigus, tigus!
Happy new year Poco a poco me iré incorporando de nuevo a este asunto, y si, noté que este es uno de esos mensajes donde das la información a cuenta gotas y de forma mañosamente incompleta para poder inflar tu contador, y supuse que la respuesta la ibas a dar en no menos de 3 mensajes, así que no pude evitarlo, jejeje ... pero no te preocupes no le diré nada al moderador del foro sobre estas mañas tuyas


Saludos Geo y uri
  #22 (permalink)  
Antiguo 08/01/2008, 13:06
Avatar de eeyore  
Fecha de Ingreso: mayo-2006
Mensajes: 53
Antigüedad: 19 años
Puntos: 0
Pregunta Re: Ayuda con llamada a Procedimiento Almacenado

Muchas gracias, pues ya hice la ultima modificacion que me mencionan, pero ahora me marca este error:

Microsoft OLE DB Provider for SQL Server error '80040e14'

El parámetro formal '@rec' se definió con OUTPUT, pero el parámetro real no se ha declarado con OUTPUT.


el codigo asp quedo de la siguiente manera:

Código PHP:
Set cmd Server.CreateObject("ADODB.Command")
Set Conn Server.CreateObject("ADODB.Connection")
Set rs Server.CreateObject("ADODB.Recordset")

Conn.Open "ejemplo"

Set cmd.ActiveConnection Conn
cmd
.CommandText "InsertaEjemplo"
cmd.CommandType adCmdStoredProc

cmd
.Parameters.Append cmd.CreateParameter("idnuevo"adIntegeradParamOutput4)
cmd.Parameters.Append cmd.CreateParameter("rec"adSmallIntadParamInput2rec)
cmd.Parameters.Append cmd.CreateParameter("cuenta"adDoubleadParamInput8cuenta)


rs cmd.Execute()

newId cmd.Parameters("idnuevo")
response.Write("newId: "&newId&"<br>")

response.Write("ok todo ok")

set rs nothing 
y el SP de la siguiente manera:

Código PHP:
CREATE PROCEDURE InsertaEjemplo

@rec smallint,

@
cuenta float,

@
idnuevo int OUTPUT

AS

INSERT INTO actostransm_prueba(recaudadora,cvecuentaVALUES(@rec, @cuenta);
SELECT @idnuevo = @@IDENTITY
GO 
Alguna idea de que pueda estar mal?
  #23 (permalink)  
Antiguo 08/01/2008, 13:16
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Ayuda con llamada a Procedimiento Almacenado

Ok, los parametros tienen que ir en orden, trata así:

Código:
cmd.Parameters.Append cmd.CreateParameter("rec", adSmallInt, adParamInput, 2, rec)
cmd.Parameters.Append cmd.CreateParameter("cuenta", adDouble, adParamInput, 8, cuenta) 
cmd.Parameters.Append cmd.CreateParameter("idnuevo", adInteger, adParamOutput, 4)
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #24 (permalink)  
Antiguo 08/01/2008, 14:16
Avatar de eeyore  
Fecha de Ingreso: mayo-2006
Mensajes: 53
Antigüedad: 19 años
Puntos: 0
Pregunta Re: Ayuda con llamada a Procedimiento Almacenado

Cita:
Iniciado por u_goldman Ver Mensaje
Ok, los parametros tienen que ir en orden, trata así:

Código:
cmd.Parameters.Append cmd.CreateParameter("rec", adSmallInt, adParamInput, 2, rec)
cmd.Parameters.Append cmd.CreateParameter("cuenta", adDouble, adParamInput, 8, cuenta) 
cmd.Parameters.Append cmd.CreateParameter("idnuevo", adInteger, adParamOutput, 4)
Cambios realizados, ya no me marca ningun error, pero no me devuelve nada el SP :p


ASP:
Código PHP:
Set cmd Server.CreateObject("ADODB.Command")
Set Conn Server.CreateObject("ADODB.Connection")
Set rs Server.CreateObject("ADODB.Recordset")

Conn.Open "ejemplo"

Set cmd.ActiveConnection Conn
cmd
.CommandText "InsertaEjemplo"
cmd.CommandType adCmdStoredProc

cmd
.Parameters.Append cmd.CreateParameter("rec"adSmallIntadParamInput2rec)
cmd.Parameters.Append cmd.CreateParameter("cuenta"adDoubleadParamInput8cuenta)
cmd.Parameters.Append cmd.CreateParameter("idnuevo"adIntegeradParamOutput4)

rs cmd.Execute()

newId cmd.Parameters("idnuevo")
response.Write("newId: "&newId&"<br>")

response.Write("ok todo ok")

set rs nothing 

SP:
Código PHP:
CREATE PROCEDURE InsertaEjemplo

@rec smallint,

@
cuenta float,

@
idnuevo int OUTPUT

AS

INSERT INTO actostransm_prueba(recaudadora,cvecuentaVALUES(@rec, @cuenta);
SELECT @idnuevo = @@IDENTITY
GO 
  #25 (permalink)  
Antiguo 08/01/2008, 14:26
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Ayuda con llamada a Procedimiento Almacenado

Trata esto:

Código:
rs = cmd.Execute.NextRecordset()
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:54.