Verificar si hay registros repetidos Access

Tengo un formulario "Fcabecerajob" para introducir datos en una tabla Tcabecerajob, necesito asegurarme de que no introduzco la misma tarjeta dos veces, para ello he pensado utilizar Dcount para contar si el campo "codigotrabajador" y el campo "fecha" ya existen en la tabla y en ese caso que salga un mensaje avisando que ya existen datos del mismo trabajador el mismo día. Y que NO se grabe nada en la tabla y que No me deje pasar al subformulario.

Pero no tengo claro como. He empezado por ver si me puede dar un mensaje de que hay casos repetidos para asegurarme que funciona.

He puesto este codigo en el evento despues de actualizar del campo Fecha

 Private Sub FECHA_AfterUpdate()
Dim casosrepetidos As Integer

casosrepetidos = DCount(["*"], ["TCABECERAJOB"], ["CODIGOTRABAJADOR=] & [ME.CODIGOTRABAJADOR])
'And DCount(["*"], [TCABECERAJOB], ["FECHA=] & [ME.FECHA])

MsgBox "LOS CASOS REPETIDOS SON=", casosrepetidos, vbInformation, "informacion"

Gracias por la ayuda

He intentado forzar a repetir una tarjeta pero no me sale ningún mensaje, tampoco error pero no hace nada

2 Respuestas

Respuesta
2

La instrucción tal como la has puesto sería para verificar que no hay dos o más registros en un mismo día. ¿Para qué definir variables si vas a poner el mismo criterio? En el evento Antes de actualizar del cuadro de texto Fecha puedes ponerlo como

If dcount("*","Tcabecerajob","codigotrabajador=" & me.codigotrabajador & " and fecha=#" & me.fecha & "#")=1 then

Msgbox"No puede haber dos registros con ese código y la misma fecha", vbokonly,"Que no te enteras"

Docmd. Cancelevent

end if

He supuesto que codigotrabajador es numérico. Si fuera texto sería

.........."codigotrabajador='" & me.codigotrabajador & "'

Es decir, apóstrofe comillas y cierra comillas apóstrofe

En Vb cuando los nombres de los objetos son todo seguidos no hace falta ponerle corchetes.

Hola Julián, ya entiendo que será culpa mía porque no lo habré hecho bien, pero el código lo he puesto tal cual y no me da ningún error, pero cuando doy el Código de trabajador y pongo la fecha, ya puedo repetirlo indefinidamente que no hace ni dice nada. ¿Dónde puedo haberme equivocado?

Te transcribo el código


Private Sub FECHA_BeforeUpdate(Cancel As Integer)

'Codigo de Julian

If DCount("*", "CABECERAJOB", "CODIGOTRABAJADOR='" & Me.CODIGOTRABJADOR & "' And FECHA= #" & Me.FECHA & "#") >= 1 Then

MsgBox "No puede haber dos registros con ese código y la misma fecha", vbOKOnly, "Que no te enteras"

DoCmd.CancelEvent


End If

Gracias!

Casi seguro que es por la configuración regional de fechas de tu ordenador. Mira si tengo la tabla CabeceraJob

Con ella tengo hecho un formulario. Lo pongo en continuo porque se ve mejor. Puedes ver que repito el código del trabajador y la fecha, pero el cursor aún está en el control Fecha.

Cuando pulso Enter

Y al Aceptar, el cursor me vuelve al control Fecha para cambiarlo

En el evento Antes de actualizar del control fecha le tengo puesto( para que no te dé problemas)

Private Sub Fecha_BeforeUpdate(Cancel As Integer)
If DCount("*", "cabecerajob", "codigotrabajador=" & Me.CodigoTrabajador & " and fecha=forms!cabecerajob!fecha") >= 1 Then
MsgBox "De eso nada, monada", vbOKOnly + vbExclamation, "Otros día quizá, hoy no"
DoCmd.CancelEvent
End If
End Sub

Me olvidaba de decirte que en el ejemplo el campo CodigoTrabajador, en la tabla lo tengo como numérico. Si fuera texto sería

......"codigotrabajador='" & me.codigotrabajador & "'

Es decir, apostrofe comillas & y cierra & comillas apóstrofe

Respuesta
1

Debe hacerlo en el evento Antes de actualizar del control FECHA, algo como:

No haga caso esta bien la variable esto hace que el código sea más legible.

Hola Eduardo,

Ya sé que me he equivocado yo, pero no alcanza a saber donde, ¿qué debería revisar?

En el formulario introduzco código de trabajador, confirmo la fecha y ya puedo repertirlo indefinidamente que ne me da ningún mensaje y puedo seguir sin problema, no me da tampoco errores de compilación ni nada de eso, así que no sé que más revisar, te paso el código literal que he escrito. Porque si el campo fecha tiene un valor por defecto, ¿no debería afectar verdad?


Private Sub FECHA_BeforeUpdate(Cancel As Integer)
Dim casosrepetidos As Integer

'Codigo de Eduardo
casosrepetidos = DCount(["*"], ["CABECERAJOB"], "CODIGOTRABAJADOR='" & Me.CODIGOTRABAJADOR & "' And FECHA=" & "#" & Format(Me.FECHA, "mm/dd/yyyy") & "#")
If casosrepetidos < 0 Then
MsgBox "Ya existe esta Job card para este trabajador el mismo día", vbInformation, "Cuidado.."
Cancel = True
End If

Gracias!

Si el camo fecha tiene un valor no se va es ejecutar el evento, excepto que la cambie.

Casosrepetidos>0 y no <0

Para ir más seguro copie el código el evento Después de actualuzar del campo código del trabajador o llame el evento Después de actualizar del campo fecha.

Si quiere envíeme la base de datos con información ficiticia a [email protected] favor anotar en el asunto la consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas