Condición If compuesta mediante DLookup
Hola buenas,
tengo un formulario F donde se pueden insertar datos en los campos Apellidos, Nombre y DNI (clave principal), todos de tipo texto y asociados a la tabla Usuarios.
En F esos campos se llaman txtApellidos, txtNombre y txtDNI.
Por otro lado tengo una tabla C con los campos Apellidos, Nombre y DNI (aquí DNI no es clave principal).
Pongamos un ejemplo:
Tabla Usuarios
Apellidos Nombre DNI (clave principal)
Santana Pedro 1x
Lorenzo Juan 2x
Martin Luis 3x
Tabla C
Apellidos Nombre DNI (no es clave)
Santana Pedro 1x
Lorenzo Juan 2x
Objetivo:
Supongamos que, en un momento dado, se elimina el registro (Lorenzo, Juan, 2x) de la tabla Usuarios. Con posterioridad, desde F y con intención de agregar un nuevo usuario, se escribe en txtDNI el valor 2x. En ese momento, y aún sin haber guardado el registro en la tabla Usuarios, es decir, inmediatamente al posicionar el cursor fuera del txtDNI, deseo que, por ejemplo, al perder el foco de txtDNI (creo que es lo mejor) se evalúe una consulta:
Si el valor de txtDNI que se está introduciendo (en el ejemplo, 2x) NO está en la tabla Usuarios, pero SÍ que está en la tabla C, entonces un cuadro emergente advierte de la existencia del registro en la Tabla C:
"usuario con DNI=2x, Juan Lorenzo, ya existe; pulsar Sí para agregar o No para cancelar"
En caso de pulsar Sí, se debe agregar el registro en Usuarios. En caso contrario, borrar el contenido de txtDNI por si quiere introducir otro valor.
Solución:
el planteamiento que he realizado, de momento infructuosamente, es:
Private Sub txtDNI_LostFocus()
Dim Msg, Style, Response, MyString
Msg = "usuario con" ¿¿¿ DNI=2x, Juan Lorenzo???? "ya existe; pulsar Sí para agregar o No para cancelar"
Style = vbYesNo
If IsNull(DLookup("[DNI]", "[Usuarios]", "DNI='" & Form!txtDNI.Value & "'")) = True And _
IsNull(DLookup("[DNI]", "[C]", "DNI='" & Form!txtDNI.Value & "'") = False) Then
Response = MsgBox(Msg, Style)
If Response = vbYes Then
MyString ="Si"
' Agregar registro
DoCmd.GoToRecord , , acNewRec
End If
' Deshacer cambios
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
End If
End Sub
Espero que se haya entendido el planteamiento, seguro que tengo errores y agradecerles su ayuda.
Muchas gracias.