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

ASP+DLL+SP: Item cannot be found in the collection corresponding to the requested...

Estas en el tema de ASP+DLL+SP: Item cannot be found in the collection corresponding to the requested... en el foro de ASP Clásico en Foros del Web. Tengo una pagina asp que instancia una componente que a su vez consulta un sp que retorna valores. Pues bien, si ejecuto el SP desde ...
  #1 (permalink)  
Antiguo 16/02/2012, 06:59
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 10 meses
Puntos: 8
ASP+DLL+SP: Item cannot be found in the collection corresponding to the requested...

Tengo una pagina asp que instancia una componente que a su vez consulta un sp que retorna valores.

Pues bien, si ejecuto el SP desde el Analizador de Consultas con parámetros en duro, arroja resultados.

Si ejecuto la componente desde Visual, con parametros en duro, arroja resultados. (o sea, la comunicacion DLL-SQL, funciona)

Ahora, si desde ASP le paso parámetros a la componente, no me arroja ningún resultado. Es más, me arroja el siguiente error:

Cita:
Item cannot be found in the collection corresponding to the requested name or ordinal.
Estoy segurísimo de que los campos que estoy consultando existan. Le he dado vueltas y no he logrado resolverlo.

Les dejo los códigos por si pueden hecharme una manito por favor.

ASP
Código PHP:
    Dim Rs
    
    Set Rs 
Server.CreateObject("ADODB.Recordset")
        
Set oCartolaDAO Server.CreateObject("Security_TEFAM.CartolaDAO")
    
    
call oCartolaDAO.iniciar    

    
    
If Not oCartolaDAO.obtenerS("1/5/2012""2/15/2012",01,"96655860-1"Rsthen
            Response
.Write("Error al obtener cartola: " oCartolaDAO.sMensajeError)
        
response.end
        End 
If

    if 
not Rs.EOF then
        response
.write  Rs("CtaOrigen") & "|"
    
end if    

    
oCartolaDAO.finalizar
    Set Rs 
Nothing 
VB
Código PHP:
Public Function obtenerS_
                        FechaDesde 
As String_
                        FechaHasta 
As String_
                        TipoTransaccion 
As Integer_
                        IdEstadoTransferencia 
As Integer_
                        TipoConsulta 
As Integer_
                        RutEmpresa 
As String_
                        rs 
As Variant) As Boolean

On Error GoTo 
Catch

   
    
Dim oCmd As ADODB.Command
    Set oCmd 
= New ADODB.Command
    oCmd
.CommandType adCmdStoredProc
    oCmd
.CommandText "Usp_TEFAM_CartolaObtenerS"
    
oCmd.ActiveConnection oConnection_
    
If oConnection_ Is Nothing Then
        Me
.set_iError = -1
        Me
.set_sMensajeError "Conección cerrada, inicialice "
        
Exit Function
    
End If
    
    
Dim f1f2aux() As String
    aux 
Split(FechaDesde"/")
    If 
aux(0) < 10 Then aux(0) = "0" aux(0)
    If 
aux(1) < 10 Then aux(1) = "0" aux(1)
    
f1 aux(2) & "-" aux(0) & "-" aux(1)
    
aux Split(FechaHasta"/")
    If 
aux(0) < 10 Then aux(0) = "0" aux(0)
    If 
aux(1) < 10 Then aux(1) = "0" aux(1)
    
f2 aux(2) & "-" aux(0) & "-" aux(1)
    
    
oCmd.Parameters("@FechaDesde").value f1
    oCmd
.Parameters("@FechaHasta").value f2
    
    
'oCmd.Parameters("@FechaDesde").value = FechaDesde
    '
oCmd.Parameters("@FechaHasta").value FechaHasta
    
    
If TipoTransaccion 0 Then
        oCmd
.Parameters("@TipoTransaccion").value Null
    
Else
        
oCmd.Parameters("@TipoTransaccion").value TipoTransaccion
    End 
If
    
    If 
IdEstadoTransferencia 0 Then
        oCmd
.Parameters("@IdEstadoTransferencia").value Null
    
Else
        
oCmd.Parameters("@IdEstadoTransferencia").value IdEstadoTransferencia
    End 
If
    
    
    
oCmd.Parameters("@TipoConsulta").value TipoConsulta
    oCmd
.Parameters("@RutEmpresa").value RutEmpresa
        
    Set rs 
oCmd.Execute
       
    obtenerS 
True
    
Exit Function
    
Catch:
     
Me.set_iError Err.Number
     Me
.set_sMensajeError Err.Description
     obtenerS 
False
     
End 
Function 
SP
Código PHP:
CREATE PROCEDURE [dbo].[Usp_TEFAM_CartolaObtenerS]
(
    @
FechaDesde            datetime
    
,@FechaHasta        datetime
    
,@TipoTransaccion    int
    
,@IdEstadoTransferencia int
    
,@TipoConsulta        int
    
,@RutEmpresa        Varchar(15)
)
AS
BEGIN
    SET NOCOUNT ON
    
---------------------------------
    --@
TipoConsulta --> COUNT  --
    --          
--> SELECT --
    ---------------------------------
    
SET @FechaHasta DATEADD(DD,1,@FechaHasta)

    IF @
TipoConsulta 1
    BEGIN
        SELECT          dbo
.TEFAM_Transferencia.CtaOrigen
                    
dbo.TEFAM_Transferencia.NombreDestino
                    
dbo.TEFAM_Banco.Nombre AS BancoDestino
                    
dbo.TEFAM_Transferencia.MontoTRX    
                    
dbo.TEFAM_Transferencia.IdEstadoTransferencia
                    
dbo.TEFAM_Transferencia.IdTipoTrfTransferencia
                    
dbo.TEFAM_EstadoTransferencia.Nombre AS EstadoTransferencia
                    
dbo.TEFAM_TipoTrfTransferencia.Nombre AS TipoTransferencia
                    
CONVERT(VARCHAR,dbo.TEFAM_Transferencia.FechaCreacion,105) + ' ' CONVERT(VARCHAR,dbo.TEFAM_Transferencia.FechaCreacion,108) AS  FechaUsuarioNormal
                    
dbo.TEFAM_Transferencia.IdTransferencia
                    
ISNULL(dbo.TEFAM_Transferencia.IdNominaCabecera,0) AS IdNominaCabecera
                    
dbo.TEFAM_Transferencia.MotivoTransferencia AS MotivoTransferencia
        FROM       dbo
.TEFAM_Transferencia INNER JOIN
                   dbo
.TEFAM_Banco ON dbo.TEFAM_Transferencia.IdBancoDestino dbo.TEFAM_Banco.IdBanco 
                    INNER JOIN   dbo
.TEFAM_EstadoTransferencia 
                        ON dbo
.TEFAM_Transferencia.IdEstadoTransferencia dbo.TEFAM_EstadoTransferencia.IdEstadoTransferencia INNER JOIN
                   dbo
.TEFAM_TipoTrfTransferencia ON dbo.TEFAM_Transferencia.IdTipoTrfTransferencia dbo.TEFAM_TipoTrfTransferencia.IdTipoTrfTransferencia
        WHERE        FechaCreacion BETWEEN 
@FechaDesde AND @FechaHasta 
                    
AND ((@IdEstadoTransferencia is null) OR (@IdEstadoTransferencia IS NOT NULL AND @IdEstadoTransferencia            TEFAM_EstadoTransferencia.IdEstadoTransferencia))
                    AND ((@
TipoTransaccion        is null) OR (@TipoTransaccion            IS NOT NULL AND @TipoTransaccion            TEFAM_TipoTrfTransferencia.IdTipoTrfTransferencia))
                    AND 
dbo.TEFAM_Transferencia.RutEmpresa = @RutEmpresa        
                    
AND dbo.TEFAM_Transferencia.IdEstadoTransferencia <> 9
    END
    
ELSE
    
BEGIN
        SELECT     cuantos
=count(dbo.TEFAM_Transferencia.CtaOrigen
        
FROM       dbo.TEFAM_Transferencia INNER JOIN
                   dbo
.TEFAM_Banco ON dbo.TEFAM_Transferencia.IdBancoDestino dbo.TEFAM_Banco.IdBanco INNER JOIN
                   dbo
.TEFAM_EstadoTransferencia ON dbo.TEFAM_Transferencia.IdEstadoTransferencia dbo.TEFAM_EstadoTransferencia.IdEstadoTransferencia INNER JOIN
                   dbo
.TEFAM_TipoTrfTransferencia ON dbo.TEFAM_Transferencia.IdTipoTrfTransferencia dbo.TEFAM_TipoTrfTransferencia.IdTipoTrfTransferencia
        WHERE        FechaCreacion BETWEEN 
@FechaDesde AND @FechaHasta 
                    
AND ((@IdEstadoTransferencia is null) OR (@IdEstadoTransferencia            IS NOT NULL AND @IdEstadoTransferencia TEFAM_EstadoTransferencia.IdEstadoTransferencia))
                    AND ((@
TipoTransaccion    is null) OR (@TipoTransaccion            IS NOT NULL AND @TipoTransaccion            TEFAM_TipoTrfTransferencia.IdTipoTrfTransferencia))                    AND dbo.TEFAM_Transferencia.RutEmpresa = @RutEmpresa        
                    
AND dbo.TEFAM_Transferencia.IdEstadoTransferencia <> 9
    END        

END 
  #2 (permalink)  
Antiguo 16/02/2012, 16:55
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 10 meses
Puntos: 8
Respuesta: ASP+DLL+SP: Item cannot be found in the collection corresponding to the re

le puse banderas.. para ver que es lo que está haciendo...

ASP
Código PHP:
    Set oCartolaDAO Server.CreateObject("Security_TEFAM.CartolaDAO")
    
oCartolaDAO.iniciar    
    resultado
=oCartolaDAO.obtenerCartola("20120105""20120215",00,"96655860-1")
    
oCartolaDAO.finalizar
    response
.write resultado 
Código PHP:
Public Function obtenerCartola_
                        FechaDesde 
As String_
                        FechaHasta 
As String_
                        TipoTransaccion 
As Integer_
                        IdEstadoTransferencia 
As Integer_
                        TipoConsulta 
As Integer_
                        RutEmpresa 
As String) As String
                        
Dim resultado 
As String
resultado 
"--Begin--"

On Error GoTo Catch

    
resultado resultado "|Dim Rs"
    
Dim Rs
    Set Rs 
= New Adodb.Recordset
    
    resultado 
resultado "|Conexion a la BD"
    
Dim oCmd As Adodb.Command
    Set oCmd 
= New Adodb.Command
    oCmd
.CommandType adCmdStoredProc
    oCmd
.CommandText "Usp_TEFAM_CartolaObtenerS"
    
oCmd.ActiveConnection oConnection_
    
If oConnection_ Is Nothing Then
        Me
.set_iError = -1
        Me
.set_sMensajeError "Conección cerrada, inicialice "
        
Exit Function
    
End If
    
    
resultado resultado "|FechaDesde "
    
oCmd.Parameters("@FechaDesde").value FechaDesde
    resultado 
resultado FechaDesde

    resultado 
resultado "|FechaHasta "
    
oCmd.Parameters("@FechaHasta").value FechaHasta
    resultado 
resultado FechaHasta
    
    resultado 
resultado "|TipoTransaccion "
    
If TipoTransaccion 0 Then
        resultado 
resultado " Null"
        
oCmd.Parameters("@TipoTransaccion").value Null
    
Else
        
resultado resultado TipoTransaccion
        oCmd
.Parameters("@TipoTransaccion").value TipoTransaccion
    End 
If
    
    
resultado resultado "|IdEstadoTransferencia "
    
If IdEstadoTransferencia 0 Then
        resultado 
resultado " Null "
        
oCmd.Parameters("@IdEstadoTransferencia").value Null
    
Else
        
resultado resultado IdEstadoTransferencia
        oCmd
.Parameters("@IdEstadoTransferencia").value IdEstadoTransferencia
    End 
If
    
    
resultado resultado "|TipoConsulta "
    
oCmd.Parameters("@TipoConsulta").value TipoConsulta
    resultado 
resultado TipoConsulta
 
    resultado 
resultado "|RutEmpresa "
    
oCmd.Parameters("@RutEmpresa").value RutEmpresa
    resultado 
resultado RutEmpresa
 
    resultado 
resultado "|.Execute"
    
Set Rs oCmd.Execute
    
    resultado 
resultado "|--End--"

    
obtenerCartola True
    obtenerCartola 
resultado "|True"
    
Exit Function
    
Catch:
     
Me.set_iError Err.Number
     Me
.set_sMensajeError Err.Description
     obtenerCartola 
resultado "==>" Err.Number ":" Err.Description "|False"
     
End Function 

Y este es el error que ahora me arroja:
Código PHP:
--Begin--|Dim Rs|Conexion a la BD|FechaDesde ==>3265:Item cannot be found in the collection corresponding to the requested name or ordinal.|False 

Lo más extraño es que el parametro que le mando tiene el mismo nombre que en el SP.

Última edición por pcarvajal; 16/02/2012 a las 17:01
  #3 (permalink)  
Antiguo 23/02/2012, 16:29
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 10 meses
Puntos: 98
Respuesta: ASP+DLL+SP: Item cannot be found in the collection corresponding to the re

Mmmmmhhhh nunca he pasado parametros asi pero por el tipo de error me parece que tienes que pasarle toda la informacion del parametro, lo que normalmente hago es:

Código ASP:
Ver original
  1. Set param = oCmd.Parameters.Append("FechaDesde", adDate, adParamInput, 8, fechaDesde)
  2. Set param = oCmd.Parameters.Append("FechaHasta ", adDate, adParamInput, 8, fechaHasta)
  3. Set param = oCmd.Parameters.Append("TipoTransaccion", adInteger, adParamInput, 4, TipoTransaccion )
  4. Set param = oCmd.Parameters.Append("IdEstadoTransferencia", adInteger, adParamInput, 4, IdEstadoTransferencia)
  5. Set param = oCmd.Parameters.Append("TipoConsulta", adInteger, adParamInput, 4, TipoConsulta )
  6. Set param = oCmd.Parameters.Append("RutEmpresa", [tipo string adVarchar?], adParamInput, [tamano del string], RutEmpresa)

Necesitarias ver primero que todos tus tipos de datos esten correcto y que los valores que pasas son correctos, yo comenzaria por poner valores por deafault al SP y pasar uno por uno los parametros, utilizando diferentes metodos, quizas tambien necesites por ahi incluir el arcihvo de las constantes de ADO.

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

Etiquetas: asp, collection, found, item, recordset, server, campos
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 07:00.