Evitar registros duplicados con formulario

Estoy registrando clientes a través de un formulario que actúa sobre una tabla del tipo Nombre, Movil, Fijo, fecha... Y me gustaría que me detectara si el cliente ya existe. La clave primaria la tengo con el id autonumérico. Me gustaría que al poner el móvil o el fijo, me avisara que ya existe si es el caso (por lo tenato ese cliente ya esta registrado) y si no, que me deje continuar llenando campos...

1 Respuesta

Respuesta
2

Sergi: De las varias maneras que hay de hacerlo, te explico una.

Abre tu tabla en vista de diseño. En los campos de los teléfonos, les pones a ambos>>

No te dejará pasar ni una. Quizá alguien aporte otra solución y así eliges la que mejor se adapte. Saludos >> Jacinto

Sergi: Con mi respuesta anterior, te va a obligar a introducir "siempre" un móvil y un Fijo.

Para soslayar ese tema, si quieres programa los Eventos Antes de Actualizar (BeforeUpdate de los "dos cuadros de texto. Yo te envío el código de uno y tú lo trasladas al otro.

Private Sub Movil_BeforeUpdate(Cancel As Integer)
Dim CriterioUno As String
Dim CantNum As Byte
'Compruebo que ese Movil realmente existe
CriterioUno = "Movil = " & Me.Movil
CantNum = Nz(DCount("[Movil]", "Clientes", CriterioUno), 0)
If CantNum > 0 Then
        MsgBox "Este Número ya existe en la Tabla Clientes........" & vbCrLf & "Repasa la entrada e intenta de nuevo", vbCritical, "NUMERO DE MOVIL YA EXISTE"
        DoCmd.CancelEvent
        Me!Movil.Undo
End If
Movil_BeforeUpdate_Salir:
On Error GoTo 0
Exit Sub
Movil_BeforeUpdate_TratamientoErrores:
MsgBox "Error " & Err & " en Procedimiento.: Movil_BeforeUpdate de Documento VBA: Form_FNEntrgados (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume Movil_BeforeUpdate_Salir
End Sub

Como ves estoy suponiendo que el Nombre de tu TextBox y Campo de Tabla se llaman Movil y que la Tabla se llama Clientes. Las propiedades de los Campos que te comento en la solución primera debes restituirlos a : No, Si , No

El móvil, como me comentaste, lo supongo como tipo "Número"

Mis saludos >> Jacinto

Jacinto o quien sea :): Tu propuesta me parece muy interesante... y mucho más completa que la primera. Le "pego" el código tal cual en el evento del cuadro móvil donde se debe introducir el teléfono móvil "antes de actualizar" -Este es mi código:

Private Sub Movil_BeforeUpdate(Cancel As Integer)
Dim CriterioUno As String
Dim CantNum As Byte
'Compruebo que ese Movil realmente existe
CriterioUno = "Movil = " & Me.Movil
CantNum = Nz(DCount("[Movil]", "Clientes", CriterioUno), 0)
If CantNum > 0 Then
        MsgBox "Este Número ya existe en la Tabla Clientes........" & vbCrLf & "Repasa la entrada e intenta de nuevo", vbCritical, "NUMERO DE MOVIL YA EXISTE"
        DoCmd.CancelEvent
        Me!Movil.Undo
End If
Movil_BeforeUpdate_Salir:
On Error GoTo 0
Exit Sub
Movil_BeforeUpdate_TratamientoErrores:
MsgBox "Error " & Err & " en Procedimiento.: Movil_BeforeUpdate de Documento VBA: Form_FNEntrgados (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume Movil_BeforeUpdate_Salir
End Sub

-Ya en el formulario, cuando lleno el campo "Movil" con cualquier valor, me muestra el error:

"Se ha producido el error 3078

Y si le digo depurar, me marca en amarillo la linia de codigo:

CantNum = Nz(DCount("[Movil]", "Clientes", CriterioUno), 0)

¿Dónde esta el fallo?

Sergi: Que te puedo decir yo que no te esté diciendo Access, pues eso que has de cambiar la Tabla Clientes por el nombre de tu tabla y en todo caso Movil, por el nombre de tu campo si no se llama así.

Al final de mi respuesta de arriba, ya te advertía de esa posibilidad con la frase.>>

Como ves estoy suponiendo que el Nombre de tu TextBox y Campo de Tabla se llaman Movil y que la Tabla se llama Clientes.

Haz esos cambios y me comentas, porque repasando lo que te envíe, no ve que pueda provocar errores. Y otro apunte, si tu tabla tuviera el nombre "partido", como por ejemplo Mi Tabla, has de encerrarlo entre corchetes [Mi Tabla]. Un saludo >>Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas