Compropar la existencia del Cliente antes de dar de alta uno nuevo

En las altas de nuevos Clientes tengo la necesidad de poder comprobar al dar el DNI/CIF si el mismo ya existe y no autorizar a la creación de nuevo el registro.

Necesito desde el campo DNI/CIF en un evento que antes de continuar con la creación de todos los datos del Cliente, se compruebe, en la tabla MAESTROCLIENTES, que si existe el mismo, y de existir me abra un formulario, en el que me muestre el Cliente que ya ha sido dado de alta anteriormente, y en la el caso de NO existir siga la secuencia ordinaria para la creación del resto de datos del mismo.

Datos de la tabla: MAESTROCLIENTES

Identificacion Fiscal: DNI/CIF

Formulario a mostrar el Cliente Existente: CLIENTEYAEXISTENTE

Respuesta
3

En el evento Antes de actualizar del cuadro de texto NIF/DNI crea un procedimiento de evento y entre Private Sub y End Sub pon

If dcount("*","maestroclientes","NIF/DNI= '" & me.nif/dni & "'")=0 then

msgbox"Ese cliente ya existe"

docmd.openform"Maestrocliente",,,"nif/dni= '" & me.nif/dni & "'",,acdialog

else

exit sub

end if

Suponiendo que el formulario donde anotas los datos de los clientes se llame MaestroCliente.

2 respuestas más de otros expertos

Respuesta
3

José: De acuerdo a los datos que citas, creo que algo así, debería resolverte el problema.

Private Sub NIF/DNI_BeforeUpdate(Cancel As Integer)
Dim CriterioUno As String
Dim UnDNI As Byte
On Error GoTo NIF/DNI_BeforeUpdate_TratamientoErrores
'Aseguro que el Formulario CLIENTEYAEXISTENTE esté cerrado. Si el Formulario está abierto lo cierro, antes de abrirlo
If CurrentProject.AllForms("CLIENTEYAEXISTENTE").IsLoaded Then DoCmd.Close acForm, "CLIENTEYAEXISTENTE"
'Compruebo si ese NIF/DNI existe
CriterioUno = "[NIF/DNI] = '" & Me.[NIF/DNI] & "'"
UnDNI = Nz(DCount("[NIF/DNI]", "MAESTROCLIENTES", CriterioUno), 0)
If UnDNI > 0 Then
    MsgBox "Este DNI ya existe en la Tabla MAESTROCLIENTES........" & vbCrLf & "Se abrirá Formulario que lo muestra", vbCritical, "NIF/DNI EXISTENTE"
    DoCmd.OpenForm FormName:=”CLIENTEYAEXISTENTE”, WindowMode:=acDialog, WhereCondition:="[NIF/DNI] = '" & Me.NIF/DNI & "'"
    DoCmd.CancelEvent
    Me![NIF/DNI].Undo
Else
    'Aquí no hace falta, pero lo pongo por si quieres otra acción
End If
CriterioUno = ""
UnDNI = 0
NIF/DNI_BeforeUpdate_Salir:
On Error GoTo 0
Exit Sub
NIF/DNI_BeforeUpdate_TratamientoErrores:
MsgBox "Error " & Err & " en Procedimiento.: NIF/DNI_BeforeUpdate de Documento VBA: Form_NombreDeTuForm (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume NIF/DNI_BeforeUpdate_Salir
End Sub

Como ves estoy suponiendo que NIF/DNI es un Campo de Texto en la Tabla.

Mis saludos >> Jacinto

He modificado el campo DNI/CIF por CIF y he adaptado la rutina de esta forma en el el evento: Al perder el enfoque

También he modificado el nombre del Form: CLIENTEYAEXISTE

Private Sub CIF_LostFocus()
Dim CriterioUno As String
Dim UnDNI As Byte
On Error GoTo CIF_BeforeUpdate_TratamientoErrores
'Aseguro que el Formulario CLIENTEYAEXISTE esté cerrado. Si el Formulario está abierto lo cierro, antes de abrirlo
If CurrentProject.AllForms("CLIENTEYAEXISTE").IsLoaded Then DoCmd.Close acForm, "CLIENTEYAEXISTE"
'Compruebo si ese CIF existe
CriterioUno = "[CIF] = '" & Me.[CIF] & "'"
UnDNI = Nz(DCount("[CIF]", "MAESTROCLIENTES", CriterioUno), 0)
If UnDNI > 0 Then
MsgBox "Este DNI ya existe en la Tabla MAESTROCLIENTES........" & vbCrLf & "Se abrirá Formulario que lo muestra", vbCritical, "CIF EXISTENTE"
DoCmd.OpenForm FormName:=”CLIENTEYAEXISTE”, WindowMode:=acDialog, WhereCondition:="[CIF] = '" & Me.CIF & "'"
DoCmd.CancelEvent
Me![CIF].Undo
Else
'Aquí no hace falta, pero lo pongo por si quieres otra acción
End If
CriterioUno = ""
UnDNI = 0
CIF_BeforeUpdate_Salir:
On Error GoTo 0
Exit Sub
CIF_BeforeUpdate_TratamientoErrores:
MsgBox "Error " & Err & " en Procedimiento.: CIF_BeforeUpdate de Documento VBA: Form_CLIENTEYAEXISTE (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume CIF_BeforeUpdate_Salir
End Sub

y me esta dando este error al mover el cursor despues de insertar el CIF:

José: ¿Hay algua razón para que cambies el Evento de BeforeUpdate a LostFocus?

El LostFocus carece del argumento Cancel. Tendría que ver como se comporta ese código.

Mis saludos >> Jacinto

Respuesta
2

En la tabla MAESTRO CLIENTE, en el campo DNI Le pones indexado sin duplicados

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas