Problema con ADO vb6

Una tabla (la cual ya está cargada con datos de una planilla de excel) la estructura tiene este formato:
Código Apellido Nombre Fecha Hora Modo
3123 Basic Visual 12/05/2050  08:50:23 Entrada
3123 Basic Visual 12/05/2050  16:02:00 Salida
Etc etc,
Esos datos los utilizo para cargarlos en una tabla con esta estructura:
Código Apellido Nombre Día Fecha Entrada Salida Horas
3123 Basic Visual Jue 12/05/2050  08:50:23 16:02:00 7
---------------
El código que les escribo a continuación me tira este error:
Err -2147217864 (80040e38)
Descripción "No se puede encontrar la fila para su actualización: algunos valores han cambiado desde la última vez que se leyó."
Este es el código fuente:
For i = 1 To rsX.RecordCount
    If rsF.RecordCount > 0 Then
        Err = 0
        rsF.Filter = "Apellido='" & rsX("Apellido") & "' AND Nombre='" & rsX("Nombre") & "' AND Fecha=#" & rsX("Fecha") & "#"
        If rsF.RecordCount = 1 Then
            If rsX("Modo").Value <> "Salida" Then
                If rsF("Entrada") = Null Then rsF("Entrada") = rsX("Hora")
                If rsF("Entrada") > rsX("Hora") Then rsF("Entrada") = rsX("Hora")
            Else
                If rsF("Salida") = Null Then rsF("Salida") = rsX("Hora")
                If rsF("Salida") < rsX("Hora") Then rsF("Salida") = rsX("Hora")
            End If
            'rsF("Horas") = CalcularHoras(rsF("Entrada"), rsF("Salida"), rsE("TEntrada"), rsE("TSalida"), rsE("SEntrada"), rsE("SSalida"), rsE("DescSabado"), rsF("Fecha"), rsF("Apellido"), rsF("Nombre"), 5, 57,, rsE("Especiales"))
 else
     'codigo para agregar una nueva fichada
 End If
    Else
        rsF.Filter = adFilterNone
        With rsF
        .AddNew
        .Fields("Codigo") = rsX("Codigo")
        .Fields("Apellido") = rsX("Apellido")
        .Fields("Nombre") = rsX("Nombre")
        .Fields("Dia") = WeekdayName(Weekday(rsX("Fecha"), vbSunday), True, vbSunday)
        .Fields("Fecha") = rsX("Fecha")
        If rsX("Modo").Value <> "Salida" Then
            .Fields("Entrada") = rsX("Hora")
            .Fields("Salida") = TimeValue("23:59:59")
        Else
            .Fields("Salida") = rsX("Hora")
            .Fields("Entrada") = TimeValue("00:00:00")
        End If
        '. Fields("Horas") = CalcularHoras(rsF("Entrada"), rsF("Salida"), rsE("TEntrada"), rsE("TSalida"), rsE("SEntrada"), rsE("SSalida"), rsE("DescSabado"), rsF("Fecha"), rsF("Apellido"), rsF("Nombre"), 5, 57,, rsE("Especiales"))
        End With
    End If
rsX.MoveNext
Next
rsF.Filter = adFilterNone
rsF.UpdateBatch adAffectAllChapters
datFichadas.Refresh
rsF.Sort = "Codigo ASC, Fecha DESC"
rsF.Requery
Screen.MousePointer = vbDefault
Exit Sub
----------
Cualquier ayuda idea que tengas me sería de gran ayuda.
¡Help!
Respuesta
1
Pero estas trabajando con vb 6.0 y access o directamente un excel y de ahí usas macros

2 respuestas más de otros expertos

Respuesta
1

Es muy simple, MySQL te genera este error sino cambias ningún campo de la tabla. Cambia algo en los campos o no generes el comando ".update" cuando no existen cambios.

Respuesta
Por el mensaje de error estas intentando acceder a una fila que no existe, sin embargo no especificas en que linea del código se dispara el error.
perdón, me lo tira en la línea: If rsF.RecordCount = 1 Then
Cabe aclarar que rsX es el recordset de la primer tabla de donde tomo los datos; y rsF el recordset de la tabla donde escribo los datos.
Si lo que intentas preguntar es si el recordset esta vacío pregunta
If Not rsF.EOF And Not rsF.OF Then
' Hay datos en el recordset
Else
' recordset esta nulo o vacio
End if
Si, pensé que podría ser ese el problema, por eso también había probado con If Not rsF.RecordCount <> 1 Then pero me tira el mismo error. También acabo de probar con If Not rsF.BOF And Not rsF.EOF Then y no pasa naranja. La verdad no sé que puede ser.
Debes cambiar la manera com haces als preguntas posiblemente, y revisar tu lógica porque la instrucción que te apse funciona para dectecatr si un recordset no ha devuelto datos que es tu problema
If Not rsF.BOF And Not rsF.EOF Then. Por lo que entiendo esta sentencia asegura que la posición de recordset actual no sea ni 3 ni -3. Pero el error, a mi parecer, está diciendo que el recordset que quiero acceder cambió de lugar o lo abrán actualizado desde otro lado(cosa que es imposible a esta altura porque esa base es local)
Estas equivocado, lo que asegura la instrucción es que no sea el fin de archivo o sea más allá del ultimo registro del rcordset o que no sea antes del principio, si esto es cierto quiere decir que hay registros en el recordset.
No se que que te refieres con 3 y -3, lo que dice el mensaje no es que el recordset cambio de lugar, eso no es así pues el recordset es un objeto de memoria del pc que ejecuta no de la red.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas