Controlar que no me repita el dato

Mi problema es que cuando entra un dato a mi aplicación ejemplo auto 1 y ese auto 1 ya esta agregado anteriormente en mi base de datos siempre me dice que es verdadero el EOF y no entra, por eso cuando el dato que entra auto 1 siempre me lo agrega generando un registro nuevo y lo que quiero es que vea si ese auto 1 ya existe que no agregue otro registro sino que modifique los demás datos de ese auto 1 osea velocidad etc.
El código es este
Do While Not MiRecordset. EOF aca no entra y siempre dice verdadero y pasa a base bacia y agrega otro registro que es lo que yo no quiero, quiero que modifique si existe ese auto 1 los demas datos dejando siempre un registro de ese auto 1.
                'Actualizamos la posición del móvil en las últimas posiciones
                If Val(Movil) <> 0 And Val(Movil) = MiRecordset!Poul_vehi_id Then
                    MiRecordset!Poul_latitud = Latitud1
                    MiRecordset!Poul_longitud = Longitud1
                    'Llamamos a CalculoFecha para calcular la hora y el día con el resultado de las horas de menos para Uruguay con relación a UTM
                    FechaC = CalculoFecha(DiaHora)
                    diayhora = FechaC
                    MiRecordset!Poul_posi_fecha = FechaC
                    Print #2, "Guardo datos del Movil " & Movil
                    Print #2, " Latitud: " & Latitud1; "Longitud: " & Longitud1; "Fecha: " & FechaC
                    PVelocidad = Val(Mid(VirlocData, 34, 3))
                    PSentido = Val(Mid(VirlocData, 37, 3))
                    PCalidad = 3
                    VHexa = "&H" & Mid(VirlocData, 43, 2)
                    PEstado = CInt(VHexa)
                    AlarmaMostrada = Mid(VirlocData, 45, 2)
                    If Val(AlarmaMostrada) = 0 Then
                        PEvento = 20
                    Else
                        PEvento = Val(AlarmaMostrada)
                    End If
                    MiRecordset!Poul_velocidad = PVelocidad
                    MiRecordset!Poul_sentido = PSentido
                    MiRecordset!Poul_calidad_sgn = PCalidad
                    MiRecordset!Poul_estado = PEstado
                    MiRecordset!Poul_evento = PEvento
                    Encontrado = True
                    MiRecordset.Update
                    Exit Do
                End If
                    MiRecordset.MoveNext
            Loop
            MiRecordset.MoveFirst
BaseVacia:
                    If MiRecordset2.EOF = True And MiRecordset2.BOF = True Then
                        Exit Sub
                    End If
                        If Encontrado = False And Val(Movil) <> 0 Then
                            MiRecordset.AddNew
                            MiRecordset!Poul_vehi_id = Movil
                            MiRecordset!Poul_latitud = Latitud1
                            MiRecordset!Poul_longitud = Longitud1
                            FechaC = CalculoFecha(DiaHora)
                            diayhora = FechaC
                            MiRecordset!Poul_posi_fecha = FechaC
                            Print #2, "Guardo datos del Movil " & Movil
                            Print #2, " Latitud: " & Latitud1; "Longitud: " & Longitud1; "Fecha: " & FechaC
                            PVelocidad = Val(Mid(VirlocData, 34, 3))
                            MiRecordset.Update
                        End If
End If

1 respuesta

Respuesta
1
Prueba justo después de que hagas el Dim RS = New RS (antes dehacer nada con el) a poner RS.CursorLocation=aduseclient.
Hola gracias por responder, ¿tu decís que antes de usarlo cuando lo creo coloco eso y que hace ese código? Gracias por la ayuda estoy trancado con eso porque siempre me dice que es true y en realidad hay datos en la tabla esa.
Si, justo antes de Recordset. Open.
Recuerdo que la primera vez que utilicé ADO con VB6 tuve problemas similares y era precisamente esto. La cuestión no me quedó muy clara en su día, me explico: lo que hace es definir si el cursor del recordset apunta hacia el lado del servidor o del cliente (mantiene la sincro con la base de datos o puedes coger un recordset y alterarlo sin problemas )... el caso es que ante un "SELECT" ambos métodos deberían dar el mismo resultado, ya que no se toca nada... pero no lo dan... misterios de VB6.
Prueba antes de esto y antes del Do While Not MiRecordset.EOF que tienes a la entrada a poner un Dim C = MiRecordset.RecordCount con un punto de interrupción en la orden del Do while y mira a ver que valor tiene C (número de registros) a ver si coincide con el que tu tienes en tu BD.
A mi me salían 0, -1 y cosas extremadamente raras antes de usar el aduseclient.
Hola gracias por ayudarme, mira coloque esto que me pasaste
Dim C As Long
                     C = MiRecordset.RecordCount
            Do While Not MiRecordset.EOF
                'Actualizamos la posición del movil en las últimas posiciones
                If Val(Movil) <> 0 And Val(Movil) = MiRecordset!Poul_vehi_id Then
                    MiRecordset!Poul_latitud = Latitud1
                    MiRecordset!Poul_longitud = Longitud1
                    'Llamamos a CalculoFecha para calcular la hora y el día con el resultado de las horas de menos para Uruguay con relación a UTM
                    FechaC = CalculoFecha(DiaHora)
                    diayhora = FechaC
                    MiRecordset!Poul_posi_fecha = FechaC
                    Print #2, "Guardo datos del Movil " & Movil
                    Print #2, " Latitud: " & Latitud1; "Longitud: " & Longitud1; "Fecha: " & FechaC
                    PVelocidad = Val(Mid(VirlocData, 34, 3))
                    PSentido = Val(Mid(VirlocData, 37, 3))
                    PCalidad = 3
                    VHexa = "&H" & Mid(VirlocData, 43, 2)
                    PEstado = CInt(VHexa)
                    AlarmaMostrada = Mid(VirlocData, 45, 2)
                    If Val(AlarmaMostrada) = 0 Then
                        PEvento = 20
                    Else
                        PEvento = Val(AlarmaMostrada)
                    End If
                    MiRecordset!Poul_velocidad = PVelocidad
                    MiRecordset!Poul_sentido = PSentido
                    MiRecordset!Poul_calidad_sgn = PCalidad
                    MiRecordset!Poul_estado = PEstado
                    MiRecordset!Poul_evento = PEvento
                    Encontrado = True
                    MiRecordset.Update
                    Exit Do
                End If
                    MiRecordset.MoveNext
            Loop
            MiRecordset.MoveFirst
Antes de colocar lo anterior antes del .open me daba C -1 ahora me da correcto la cantidad que hay en la base de datos pero sabes que cuando entra a comparar si el dato que entra ej auto1 ya esta en la base de datos lo encuentra pero igual me agrega otro registro para ese auto1 y lo que quiere es que actualize solamente ese registro que ya esta si es de ese auto1 si es de otro que si agregue otro registro gracias
Es que el tema del cursor te puede cambiar por completo el esperado funcionamiento de un recordset (como por ejemplo ahora, que venía sin registros Y POR ESO NO TE ENTRABA AL BUCLE... porque el recordset ya venía con EOF al estar vacío).
Te recomiendo que lo pongas siempre que trabajes con recordsets, ya que mantener la sincro con el servidor sólo sería útil en aplicaciones en tiempo real (contando con que ésto realmente funcione, de lo cual tengo mis dudas).
Y ahora justo detrás de MiRecordset!Poul_latitud = Latitud1 (comienzas el volcado de datos al recordset) pones un MiRecordset.Edit, ya que si no especificas la edición del registro actual, el .update añadirá un nuevo registro.
Perdón, justo antes, no después... que a veces me confundo...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas