Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

[SOLUCIONADO] Problema con recordset cerrado

Estas en el tema de Problema con recordset cerrado en el foro de Visual Basic clásico en Foros del Web. Buenos dias, tengo un problema con una consulta en una base de datos access. despues de realizar la consulta, cuando quiere llenar el recordset me ...
  #1 (permalink)  
Antiguo 22/05/2013, 09:13
 
Fecha de Ingreso: julio-2012
Mensajes: 7
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta Problema con recordset cerrado

Buenos dias, tengo un problema con una consulta en una base de datos access.
despues de realizar la consulta, cuando quiere llenar el recordset me dice que el objeto esta cerrado.
El tema es que la función que hace esa consulta funcionaba perfecto y yo nunca la modifique, lo que si hice fue agregar otras consultas (que si funcionan) en otras partes del programa.

esto que les pego es parte del código del boton que llama a la función, en éste se crea el recordset " Set mRsCajasaAnular = New ADODB.Recordset" y luego se lo pasa como parámetro a la otra función.

Código:
Private Sub cmdBuscarCajaaAnular_Click()
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    On Error Resume Next
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Dim sRta As String
    Dim iRta As Integer
    Dim sFchVto As String
    Dim sFchProd As String
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    If Len(txtCajaaAnular.Text) = 0 Then
        Call gsMensaje("Se debe indicar una caja a buscar", vbExclamation)
        Exit Sub
    End If
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Limpio la grilla:
    Call mDef_List_Anulaciones
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    mRsCajasaAnular.Close
    Set mRsCajasaAnular = Nothing
    Err.Clear
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Set mRsCajasaAnular = New ADODB.Recordset
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Obtengo los datos de las cajas que coincidan con el número ingresado:
    iRta = giObtener_Datos_Caja(mRsCajasaAnular, Trim$(txtCajaaAnular.Text), sRta)

Esta es la función que me da error cuando quiere llenar el recordset. en ella se define otro recordset "Dim Rs As ADODB.Recordset", y luego con eso se llena el otro recordset "rRec" que se pasa como parámetro a la función.

Código:
Public Function giObtener_Datos_Caja(rRec As ADODB.Recordset, sNroCaja As String, sRta As String) As Integer
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    On Error Resume Next
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Obtengo los datos de las cajas que coincidan con el número ingresado.
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Dim Cn As ADODB.Connection
    Dim Rs As ADODB.Recordset
    Dim sCadena As String
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Set Cn = New ADODB.Connection
    Set Rs = New ADODB.Recordset
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Cn.CursorLocation = adUseClient
    Cn.Open gsParam.sConnAccessLocal
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    sRta = "OK"
    sCadena = "SELECT * from Capturas WHERE NroCaja='" & sNroCaja & "' AND CodProd='" & gsDatosProducc.sCodProducto & "' AND NroOperacion='" & gsDatosProducc.sNroOperación & "' AND ESTADO=0" ' busco cajas no anuladas
    Err.Clear
    Rs.Open sCadena, Cn, adOpenDynamic, adLockBatchOptimistic
    rRec.Open Rs
    rRec.MoveFirst
    If Err.Number = 3021 Then
        ' Caja no existe:
        giObtener_Datos_Caja = 1
    ElseIf Err.Number <> 0 Then
        ' Error de acceso:
        sRta = Trim$(Err.Number) & ", " & Trim$(Err.Description)
        giObtener_Datos_Caja = 2
    Else
        ' Sin error:
        giObtener_Datos_Caja = 0
    End If
    GoTo salir
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
salir:
    Rs.Close
    Cn.Close
    Set Cn = Nothing
    Err.Clear
End Function
Me estoy volviendo loco, el error que me tira es el N° 3704

Muchas gracias gente! Saludos
  #2 (permalink)  
Antiguo 22/05/2013, 09:53
 
Fecha de Ingreso: abril-2005
Ubicación: Piura - Perú
Mensajes: 189
Antigüedad: 19 años
Puntos: 0
Respuesta: Problema con recordset cerrado

Bueno y porque quieres cerrar la consulta, si las puedes reusar tantas veces quieras la idea es descargar con nothing lo que tiene la variable almacenada y la puedes volver a usar, y solo cuando cierras el programa ahi le das close a las las conecciones
  #3 (permalink)  
Antiguo 22/05/2013, 11:32
 
Fecha de Ingreso: julio-2012
Mensajes: 7
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Problema con recordset cerrado

Me resulta mas cómodo manejar las conexiones por cada funcion. Gracias por contestar ya encontré el problema, en la tabla había cambiado un tipo de dato de Texto a Número y por eso me decía que el objeto estaba cerrado(?. No tengo idea por que te tira cualquier error cuando en realidad no coinciden los tipos de datos, pero buen ya esta solucionado.

Gracias por contestar KenMasters!
me voy a plantear trabajar con una sola conexión, me parece que quedaría un código mas ordenado.

Saludos.

Etiquetas: objeto, sql
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 21:23.