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

3

3 Respuestas

445.250 pts.

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

528.450 pts. Si no valoras las respuestas, no esperes que te...

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.

7.475 pts. Ayer ya ha pasado

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