Validar campo para que no se repitan los registros

Pues como dice el titulo,
Tengo una tabla con 3 campos y quiero que al escribir datos en el 1º campo me salga un error si se repite ese dato sin tener que esperar a escribir en los 3 campos y guardar el registro
Es decir, de error al guardar el campo.

1 Respuesta

Respuesta
1
Crea un formulario con el asistente de formularios y mete el siguiente código en las propiedades del cuadro de texto del campo "al perder el enfoque"
Private Sub nombredelcuadrodetexto_LostFocus()
On Error GoTo Err_valorduplicado
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Exit_valorduplicado:
Exit Sub
Err_valorduplicado:
MsgBox "el valor introducido es un valor duplicado"
Resume Exit_valorduplicado
End Sub
Este código lo que hace es guardar el registro cada vez que el cuadro de texto pierde el enfoque y te devuelve un error "el valor introducido es un valor duplicado" cada vez que introduces un valor duplicado en el campo
PD. No olvides poner en las propiedades del campo dentro de la tabla: Indexado: Si (sin duplicados)
He hecho lo que tu me comentas Generar código y he puesto lo que tu me comentas, pero no funciona, te pongo el código para que lo veas (en la tabla el campo lo tengo indexado para no permitir duplicados, lo digo por si debido a esto)
Private Sub proveedor_cif_BeforeUpdate(Cancel As Integer)
End Sub
Private Sub proveedor_cif_LostFocus()
On Error GoTo Err_valorduplicado
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Exit_valorduplicado:
Exit Sub
Err_valorduplicado:
MsgBox "el valor introducido es un valor duplicado"
Resume Exit_valorduplicado
End Sub
End Sub
Muchas gracias
Un saludo
El código que yo te mande se ejecuta cuando el cuadro de texto pierde el enfoque, es decir, cuando pasas del campo cif (en tu caso) al campo siguiente, el código debe funcionar y lo que has puesto dentro del código es correcto. Revisa el nombre del cuadro de texto que suele ser una fuente frecuente de errores.
Otro posible error puede ser que al hacer click sobre el procedimiento coloques todo el texto y tienes que tener en cuenta que visual basic coloca por defecto el inicio y el final de la sentencia: pero debes verificar que el texto sea este:
Private Sub proveedor_cif_LostFocus()
On Error GoTo Err_valorduplicado
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Exit_valorduplicado:
Exit Sub
Err_valorduplicado:
MsgBox "el valor introducido es un valor duplicado"
Resume Exit_valorduplicado
End Sub
Pero solamente este, "Private Sub" indica el inicio de la sentencia y "End Sub" el final. He visto que tienes 2 End sub en tu anterior procedimiento; normalmente el procedimiento debe quedar entre dos lineas horizontales.
Lo que hace el procedimiento que te indique es mandarte un aviso cuando tu introduces en el campo CIF un valor duplicado, pero este código se ejecutará cuando cambies a otro campo.
El campo CIF debe ser EXACTAMENTE IGUAL QUE EL QUE TIENES GUARDADO EN LA TABLA; es decir si tienes guardado B88888888 el valor que introduzcas debe ser el mismo. Si introduces B-88888888 no te devolverá un aviso puesto que no es un valor duplicado.
PD. No olvides poner en las propiedades del campo dentro de la tabla: Indexado: Si (sin duplicados)
Hola de nuevo siento ser tan pesado sigue sin funcionar. Te comento:
Al insertar el código, la parte de (CANCEL AS INTEGER) siempre lo deja dentro aunque lo borre, entonces opte por ponerlo al fina y quedaría de la forma que te adjunto. El nombre del formulario es el mismo que la tabla (proveedor_cif), ¿tal vez no funcione porque en ese campo le tengo metida una mascara de entrada?
Private Sub proveedor_cif_LostFocus()
On Error GoTo Err_valorduplicado
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Exit_valorduplicado:
Exit Sub
Err_valorduplicado:
MsgBox "el valor introducido es un valor duplicado"
Resume Exit_valorduplicado
End Sub
________________________________________________
Private Sub proveedor_cif_BeforeUpdate(Cancel As Integer)
End Sub
En las propiedades del cuadro de texto en la pestaña eventos le borras todos los procedimientos excepto el que hemos colocado. No se con que version de access estas trabajando.
Si no funciona prueba esto:
CREA UN BOTÓN CON EL ASISTENTE PARA GUARDAR EL REGISTRO Y LE PONES LA PROPIEDAD Visible: No
en la pestaña evento, te vas al procedimiento de evento del botón que acabamos de crear, copias la parte central del mismo sin el inicio ni el final de la sentencia ( te lo he explicado antes ) y posteriormente lo colocas en el procedimiento "al perder el enfoque" del cuadro de texto borrando el que hemos creado anteriormente.
Si después de todo no te funciona me mandas el archivo .mdb por mail a: gusguma @ gmail . com ( le quitas los espacios ) y te lo arreglo
un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas