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

Recuprar un valor de un procedimiento almacenado

Estas en el tema de Recuprar un valor de un procedimiento almacenado en el foro de ASP Clásico en Foros del Web. Buenos días! Tengo un problema para recuperar el valor de retorno de un procedimiento almacenado, nunca había trabajado con estos, pero buscando encontre que se ...
  #1 (permalink)  
Antiguo 22/08/2007, 06:43
 
Fecha de Ingreso: diciembre-2002
Ubicación: Villa Alemana
Mensajes: 103
Antigüedad: 21 años, 6 meses
Puntos: 0
Pregunta Recuprar un valor de un procedimiento almacenado

Buenos días!

Tengo un problema para recuperar el valor de retorno de un procedimiento almacenado, nunca había trabajado con estos, pero buscando encontre que se usaba una variable de salida, pero al intentar recuperarla de en mi código asp, me dice el siguiente error:


ADODB.Fields error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/MantenedorTarifario/GuardaFormulario.asp, line 79


la línea 79, tiene:

esta es parte del código:


ListaForm = CMD.Execute * Se ejecuta el pa en el que se genera el campo de salida

i=0
Set CMD1 = CreateObject("ADODB.Command")
Set CMD1.ActiveConnection = ccmm1
While request.form("CDTPTarifa").count>i
CMD1.CommandText = Application("owner3") & "pa_IDetalleFormulario"
'/*se llama al procedimiento almacenado y se le envian los parametros */
CMD1.CommandType = 4
CMD1.Parameters.refresh
CMD1.Parameters(1) = ListaForm("idformulario")
*Línea 79 Aquí trato de recuperar el valor del campo

Gracias!!!
  #2 (permalink)  
Antiguo 22/08/2007, 10:36
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Recuprar un valor de un procedimiento almacenado

Aquí tienes un ejemplo:

Código:
      set cmd=server.CreateObject("ADODB.command")
      Set cmd.ActiveConnection = Con
      cmd.CommandText = "iUsuario"
      cmd.CommandType=adCmdStoredProc
      cmd.Parameters.Append (cmd.CreateParameter("@Login", adVarChar, adParamInput, 10, UCASE(Request.Form("Login"))))
      cmd.Parameters.Append (cmd.CreateParameter("@NumClave", adInteger, adParamOutput, 5))
      cmd.Execute	 
      ID = cmd.Parameters("@NumClave")
      set cmd = nothing
Las constantes están definidas en el archivo adovbs.inc

Saludos
  #3 (permalink)  
Antiguo 03/10/2007, 14:42
 
Fecha de Ingreso: diciembre-2002
Ubicación: Villa Alemana
Mensajes: 103
Antigüedad: 21 años, 6 meses
Puntos: 0
Re: Recuprar un valor de un procedimiento almacenado

Gracias por la ayuda, la verdad es que habia dejado pendiente este tema y ahora lo retomo,
me dice el siguiente error:


ADODB.Command error '800a0bb9'

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

/MantenedorTarifario/GuardaFormulario.asp, line 66


El link del archivo adovbs.inc esta roto, debo cargar ese archivo en mi web?

Gracias
  #4 (permalink)  
Antiguo 03/10/2007, 15:00
 
Fecha de Ingreso: diciembre-2002
Ubicación: Villa Alemana
Mensajes: 103
Antigüedad: 21 años, 6 meses
Puntos: 0
Re: Recuprar un valor de un procedimiento almacenado

ya! inclui el archivo adovbs.inc, y no me tiro ese error más, pero ahora me dice esto:


Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Procedure or function pa_INuevoFormulario has too many arguments specified.

/MantenedorTarifario/GuardaFormulario.asp, line 67


cómo puede tener mucho parametros?
  #5 (permalink)  
Antiguo 04/10/2007, 07:53
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Recuprar un valor de un procedimiento almacenado

a ver, pega el código del procedimiento almacenado y de la llamada desde ASP para constatarlo
  #6 (permalink)  
Antiguo 04/10/2007, 08:25
 
Fecha de Ingreso: diciembre-2002
Ubicación: Villa Alemana
Mensajes: 103
Antigüedad: 21 años, 6 meses
Puntos: 0
Re: Recuprar un valor de un procedimiento almacenado

Este es el código del pa, no estoy segura de si tengo que declarar la variable que creo en el código asp (la que esta en azul)


Código:
CREATE PROCEDURE  pa_INuevoFormulario  @tipo_insp smallint, @idmovil 
int, @agente int, @insp1 int, @insp2 int, @insp3 int, @comuna int, @lugar varchar
(20), @reparticion int, @usuario int, @idformulario int output   AS

declare @idform as int   

INSERT INTO
Formulario (CDReparticion, CDTPInspeccion, IDMovil, IDAgencia, NRRutUsuario, FCIngreso, CDComuna, GLDetalleLugar)
VALUES  
(@reparticion,@tipo_insp,@idmovil, @agente, @usuario, getdate(), @comuna,@lugar)

SET @idform = SCOPE_IDENTITY()

if @insp1>0 
begin
INSERT INTO DetalleInspector (IDFormulario, IDPersona, FCIngreso, NRRUTUsuario)
VALUES		           (@idform ,  @insp1, getdate(), @usuario)
end

if @insp2>0 
begin
	INSERT INTO DetalleInspector (IDFormulario, IDPersona, FCIngreso, NRRUTUsuario)
	VALUES		           (@idform ,  @insp2, getdate(), @usuario)
end

if @insp3>0 
begin
	INSERT INTO DetalleInspector (IDFormulario, IDPersona, FCIngreso, NRRUTUsuario)
	VALUES		           (@idform ,  @insp3, getdate(), @usuario)
end
set @idformulario= @idform 

INSERT INTO EstadoPlanilla (IDFormulario, CDTPEstado, FCingreso, NRUsuario)
VALUES (@idform, 1, getdate(), @usuario)
GO

y este es el código de donde le llamo.

Código:
/*Se establese la coneccion*/
Set CMD = CreateObject("ADODB.Command")
Set CMD.ActiveConnection = ccmm1
'response.write "Esto va aca: " & Session("obj").usuario

CMD.CommandText= Application("owner3") & "pa_INuevoFormulario"
 '/*se llama al procedimiento almacenado y se le envian los parametros */
CMD.CommandType =4
CMD.Parameters.refresh

If (request.form("tipo_insp")= "parcial") then
    CMD.Parameters(1)= 1
else 
   CMD.Parameters(1)= 2
end if 

CMD.Parameters(2)= 5  ' request.form("Carac_Nave")
CMD.Parameters(3)= request.form("Rut_Agente")
If (request.form("Rut_Insp1")= "NoInsp1") then
    CMD.Parameters(4)= 0
else 
   CMD.Parameters(4)= request.form("Rut_Insp1")
end if 
if (request.form("Rut_Insp2")="NoInsp2") then
       CMD.Parameters(5)= 0    
else
	CMD.Parameters(5)= request.form("Rut_Insp2")
end if 
if (request.form("Rut_Insp3")="NoInsp3") then
       CMD.Parameters(6)= 0    
else
		CMD.Parameters(6)= request.form("Rut_Insp3")
end if
if (request.form("Rut_Insp3")="NoComuna") then
       CMD.Parameters(7)= 0    
else
		CMD.Parameters(7)= request.form("Comuna")
end if
CMD.Parameters(8)= request.form("det_lugarInsp")
CMD.Parameters(9)= 1034
CMD.Parameters(10)=Session("obj").usuario
CMD.Parameters(11)=0
CMD.Parameters.Append (CMD.CreateParameter("@idformulario", adInteger, adParamOutput,3))
ListaForm = CMD.Execute
id = ListaForm("@idformulario")
Gracias
  #7 (permalink)  
Antiguo 04/10/2007, 10:02
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Recuprar un valor de un procedimiento almacenado

En tu SP tienes definidos 11 parámetros y en tu objeto command tienes 12

Ahí esta el error

Saludos
  #8 (permalink)  
Antiguo 04/10/2007, 10:51
 
Fecha de Ingreso: diciembre-2002
Ubicación: Villa Alemana
Mensajes: 103
Antigüedad: 21 años, 6 meses
Puntos: 0
Re: Recuprar un valor de un procedimiento almacenado

del código borre: CMD.Parameters(11)=0
pero de todas formas tira el mismo error.

no encuentro que más pueda estar malo.
  #9 (permalink)  
Antiguo 04/10/2007, 11:02
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Re: Recuprar un valor de un procedimiento almacenado

Nunca lo he hecho asi, pero a mi me parece que como toda coleccion, debe ser "zero-based", es decir 0,1,2...por lo tanto tendrias que comenzar a especificar tus parametros en 0, del 0 al 10, aunque realmente yo te recomiendo que crees explicitamente tus parametros, es una manera mas ordenada y menos abstracta de trabajar.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #10 (permalink)  
Antiguo 04/10/2007, 13:19
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Recuprar un valor de un procedimiento almacenado

Para hacer lo que U_G dice, cambia todas asignaciones de parámetros como la del parámetro de salida.
  #11 (permalink)  
Antiguo 04/10/2007, 14:28
 
Fecha de Ingreso: diciembre-2002
Ubicación: Villa Alemana
Mensajes: 103
Antigüedad: 21 años, 6 meses
Puntos: 0
Re: Recuprar un valor de un procedimiento almacenado

Código:
<%
'/*Se establese la coneccion*/
Set CMD = CreateObject("ADODB.Command")
Set CMD.ActiveConnection = ccmm1

CMD.CommandText= Application("owner3") & "pa_INuevoFormulario"
 '/*se llama al procedimiento almacenado y se le envian los parametros */
CMD.CommandType =4
CMD.Parameters.refresh
If (request.form("tipo_insp")= "parcial") then
    CMD.Parameters.Append (CMD.CreateParameter("@tipo_insp", adsmallint, adParamInput, 2, 1))
else 
   CMD.Parameters.Append (CMD.CreateParameter("@tipo_insp", adsmallint, adParamInput, 2, 2))
end if 

CMD.Parameters.Append (CMD.CreateParameter("@idmovil", adInteger, adParamInput, 4, 5))
CMD.Parameters.Append (CMD.CreateParameter("@agente", adInteger, adParamInput, 4, request.form("Rut_Agente")))

If (request.form("Rut_Insp1")= "NoInsp1") then
     CMD.Parameters.Append (CMD.CreateParameter("@insp1", adInteger, adParamInput, 	9, 0))
   else 
   CMD.Parameters.Append (CMD.CreateParameter("@insp1", adInteger, adParamInput, 9, request.form("Rut_Insp1")))
end if 
if (request.form("Rut_Insp2")="NoInsp2") then
       CMD.Parameters.Append (CMD.CreateParameter("@insp2", adInteger, adParamInput, 9, 0))
else
   CMD.Parameters.Append (CMD.CreateParameter("@insp2", adInteger, adParamInput, 9, request.form("Rut_Insp2")))
end if 
if (request.form("Rut_Insp3")="NoInsp3") then
       CMD.Parameters.Append (CMD.CreateParameter("@insp3", adInteger, adParamInput, 9, 0))
else 
       CMD.Parameters.Append (CMD.CreateParameter("@insp3", adInteger, adParamInput, 9, request.form("Rut_Insp3")))
end if
if (request.form("Comuna")="NoComuna") then
       CMD.Parameters.Append (CMD.CreateParameter("@comuna", adInteger, adParamInput, 4,0))    
else
		CMD.Parameters.Append (CMD.CreateParameter("@comuna", adInteger, adParamInput, 4, request.form("Comuna")))
end if
CMD.Parameters.Append (CMD.CreateParameter("@lugar", adVarChar, adParamInput, 20, request.form("lugar")))
CMD.Parameters.Append (CMD.CreateParameter("@reparticion", adInteger, adParamInput, 4, request.form("reparticion")))
CMD.Parameters.Append (CMD.CreateParameter("@usuario", adInteger, adParamInput, 4, Session("obj").usuario))
CMD.Parameters.Append (CMD.CreateParameter("@idformulario", adInteger, adParamOutput,4))
ListaForm = CMD.Execute
quedaría algo asi? a eso se refieren?
igual me tira el mismo error!!
estoy buscando información, pero no he encontrado
  #12 (permalink)  
Antiguo 05/10/2007, 07:28
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Recuprar un valor de un procedimiento almacenado

ye preferiría algo más fácil de mantener:
Código:
Set CMD = CreateObject("ADODB.Command")
Set CMD.ActiveConnection = ccmm1

CMD.CommandText= "pa_INuevoFormulario"
CMD.CommandType =adCmdStoredProc

If (request.form("tipo_insp")= "parcial") then TipoInsp = 1 Else TipoInsp = 2 End If 
If (request.form("NoInsp1")= "NoInsp1") then NoInsp1 = 0 Else NoInsp1 = Cint(request.form("Rut_Insp1")) End If 
If (request.form("NoInsp2")= "NoInsp2") then NoInsp2 = 0 Else NoInsp2 = Cint(request.form("Rut_Insp2")) End If 
If (request.form("NoInsp3")= "NoInsp3") then NoInsp3 = 0 Else NoInsp3 = Cint(request.form("Rut_Insp3")) End If 
If (request.form("Comuna")="NoComuna") then Comuna = 0 Else Comuna = Cint(request.form("Comuna")) End If 

CMD.Parameters.Append (CMD.CreateParameter("@tipo_insp", adsmallint, adParamInput, 2, 2))
CMD.Parameters.Append (CMD.CreateParameter("@idmovil", adInteger, adParamInput, 4, 5))
CMD.Parameters.Append (CMD.CreateParameter("@agente", adInteger, adParamInput, 4, TipoInsp))
CMD.Parameters.Append (CMD.CreateParameter("@insp1", adInteger, adParamInput, 9, NoInsp1))
CMD.Parameters.Append (CMD.CreateParameter("@insp2", adInteger, adParamInput, 9, NoInsp2))
CMD.Parameters.Append (CMD.CreateParameter("@insp3", adInteger, adParamInput, 9, NoInsp3))
CMD.Parameters.Append (CMD.CreateParameter("@comuna", adInteger, adParamInput, 4, Comuna))
CMD.Parameters.Append (CMD.CreateParameter("@lugar", adVarChar, adParamInput, 20, request.form("lugar")))
CMD.Parameters.Append (CMD.CreateParameter("@reparticion", adInteger, adParamInput, 4, request.form("reparticion")))
CMD.Parameters.Append (CMD.CreateParameter("@usuario", adInteger, adParamInput, 4, Session("obj").usuario))
CMD.Parameters.Append (CMD.CreateParameter("@idformulario", adInteger, adParamOutput,4))
cmd.Prepared = True
CMD.Execute
Ahora, así ya no debería de marcarte el error de "Demasiados argumentos", quizá algún otro (como que X parámetro no se ha especificado), pero eso no, ya que corresponden los que mandas, con los que recibes.

SI pudieras revisar bien el mensaje de error y confirmar, por favor
  #13 (permalink)  
Antiguo 05/10/2007, 08:12
 
Fecha de Ingreso: diciembre-2002
Ubicación: Villa Alemana
Mensajes: 103
Antigüedad: 21 años, 6 meses
Puntos: 0
Re: Recuprar un valor de un procedimiento almacenado

ya ordene todo, pero me sigue mandando el mismo error:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Procedure or function pa_INuevoFormulario has too many arguments specified.

/MantenedorTarifario/GuardaFormulario.asp, line 53


los parámetros que defino aca, deben ir de igual forma en mi pa ?

Gracias
  #14 (permalink)  
Antiguo 05/10/2007, 08:27
 
Fecha de Ingreso: diciembre-2002
Ubicación: Villa Alemana
Mensajes: 103
Antigüedad: 21 años, 6 meses
Puntos: 0
Re: Recuprar un valor de un procedimiento almacenado

heeeee!! porfin
le saque la linea de comando
CMD.Parameters.refresh

y ya no me tira el error!!!!

Gracias!

y ahora cómo recupero el valor del parámetro de salida??
asi me dice que no encuentra el valor

varible = ListaForm("@idformulario")
  #15 (permalink)  
Antiguo 05/10/2007, 08:38
 
Fecha de Ingreso: diciembre-2002
Ubicación: Villa Alemana
Mensajes: 103
Antigüedad: 21 años, 6 meses
Puntos: 0
Re: Recuprar un valor de un procedimiento almacenado

heeeee!
ya lo logre!
es
variable = cmd("@idformulario")

es que yo pasaba todo a una variable, y asi no la reconocia.

Gracias por su ayuda!
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 16:31.