Al ingresar un registro duplicado en Access no me da mensaje que se repite, solo hasta acabar el formulario generando reproceso

He hecho una consulta de registros duplicados en los cuales se encuentra el número de documento de identificación del cliente, me gustaría que después de capturar el dato (número de documento) duplicado me genere mensaje que este ya está ingresado y no me lo genere al final del formulario pues me conlleva a tener que borrar toda la información capturado generando un reproceso. Agradecería su ayuda... También aclaro que mis conocimientos en Access son empíricos y la base de datos que tengo la cree a través de video tutoriales.

2 respuestas

Respuesta
2

Por partes, si quieres que un valor no se repita basta con poner en las propiedades del campo Indexado Si sin duplicados. O si manejas algo de código, en vista diseño del formulario, seleccionas el control que no quieres que se repita y en sus propiedades-eventos-antes de actualizar, crear un procedimiento de evento y entre Private Sub y End sub poner

If dcount("*","nombredelatabla","dni=" & me.dni & "')>=1 then

Msgbox"Ese DNI ya existe, lo siento", vbokonly,"Otra vez será"

Docmd. Cancelevent

End if

Me explico, si tu escribes un Dni y pulsas enter o te vas a otro control, comprueba si ya hay en la tabla algún registro con ese DNI. Si ya lo hay, te aparece el mensaje y el cursor se vuelve al control DNI para que lo cambies.

Lo primero que dices ya lo tengo desde que cree la BD, que es indexado sin duplicados, pero esto me lo deja saber es hasta que ya he acabado de capturar toda la información en el formulario... genere el código que me indicas y parecía andar bien, pues hice la prueba y efectivamente me indicaba que el número de identificación del cliente ya se encontraba registrado, solo que al ingresar otro número documento que no está en la base de datos me seguía arrojando el mensaje y no me dejaba avanzar a otro campo, cuando borre el dato capturardo y querer avanzar me arrojo el error que adjunto en la imagen.

En verdad agradezco tu ayuda, pues como lo mencione soy empírico en Access y toda información ayuda a que mis conocimientos avancen.

Al no saber cual es la expresión que has puesto no puedo opinar nada. Normalmente eso pasa cuando quieres usar un valor texto como criterio de un campo numérico y viceversa. Por ejemplo, en la expresión que te puse supuse que DNI era numérico, pero si fuera texto tendrías que ponerlo como

........"DNI='" & me.dni & "'")

Es decir, apostrofe comillas & y cierra comillas apostrofe comillas

Mira, si tengo la tabla Otra, en la que puedes ver que no me molesto en poner el campo clave como indexado sin duplicados

De forma que si tengo un formulario(da igual que sea único o continuo, pero éste último se ve mejor)

Si intento repetir el país(puedes ver que el cursor está en el control Pais), al pulsar Enter

Al pulsar Aceptar, el cursor se vuelve al control pais para que lo cambie, si no lo hago, no guardaría el registro. Pero si borro Alemania y pongo Italia, cuando pulse Enter

El cursor se ha ido sin problemas al control Cliente

El código del evento Antes de actualizar del cuadro de texto Pais, es

Private Sub Pais_BeforeUpdate(Cancel As Integer)
If DCount("*", "otra", "pais ='" & Me.Pais & "'") >= 1 Then
MsgBox "Ese pais ya existe", vbOKOnly + vbExclamation, "No se puede"
DoCmd.CancelEvent
End If
End Sub

Pero, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando un par de ejemplos.

Si lo haces, en el asunto del mensaje pon tu alias Jhonathan ya que si no sé quien me escribe ni los abro.

Respuesta
1

En este ejemplo de Neckkito lo tienes explicado paso a paso :

http://neckkito.xyz/nck/index.php/ejemplos/13-formularios/62-este-valor-ya-existe 

Y en esta web también tienes respuestas sobre el mismo tema resueltas, como por ejemplo ésta

Validar si el registro existe antes de guardar

Muchas gracias, por este aporte muy valioso

Pues no dejes de valorar mi respuesta si te sirvió de ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas