EMPLEADO_PERSONAL y EMPLEADO_LABORAL son dos entidades con una relación de uno a uno. EMPLEADO_PERSONAL es una entidad fuerte cuyos registros no dependen de la existencia de otros en otras tablas. EMPLEADO_LABORAL es una entidad débil cuyos registros dependen de la existencia de registros relacionados en la entidad fuerte. No podemos asignar un salario, una fecha de alta, etc. si no hay un registro (una persona) que se relacionen con esos atributos...
EMPLEADO_PERSONAL es la tabla principal en la relación 1 a 1 con cardinalidad mínima 0 y máxima 1. EMPLEADO_LABORAL es la tabla relacionada con cardinalidad mínima y máxima 1. Lo que queremos decir es que puede producirse una situación como la que indica la imagen: EMPLEADO_PERSONAL siempre tendrá un número de registros > o = que EMPLEADO_LABORAL.
¿Qué ocurre si en los formularios de consulta o actualización tratamos de acceder a un registro de EMPLEADO_LABORAL que aún no se ha creado? ¡Se producirá un error...
Una posible solución sería un [Procedimiento de evento] asociado al botón de comando Ver datos laborales
Antes de cargar (DoCmd.OpenForm) un formulario de consulta o de actualización de datos laborales, tenemos que comprobar si el registro (N_EMPLE) que queremos ver o actualizar existe (DLookup)
Si no existe IsNull(varX) entonces no podemos abrir los formularios de consulta o actualización. En este caso cerramos el formulario actual y abrimos el formulario de altas B-ALTAS-EMPLEADOS-LABORAL para crear el registro relacionado.
Si existe podemos ir al formulario de consulta o actualización sin ningún problema...
Private Sub micomando_Click()
On Error GoTo Err_micomando_Click
Dim varX As Variant
Dim fdestino, cartero, elnombre, elapellido As String
Dim elregistro As Long
mimodulo.elregistro = [N_EMPLE]
mimodulo.elnombre = [Nombre]
mimodulo.elapellido = [Apellido]
Rem comprobar si N_EMPLE existe en la tabla empleado_laboral...
varX = DLookup("[N_EMPLE]", "empleado_laboral", "[N_EMPLE] = " & [N_EMPLE])
Rem si N_EMPLE IsNull debemos ir al formulario de altas labora...
If IsNull(varX) Then
DoCmd.Close
DoCmd.OpenForm "B-ALTAS-EMPLEADOS-LABORAL", acNormal, "", "", acAdd, acNormal
Else
fdestino = "A-CONSULTA-EMPLEADOS-LABORAL"
cartero = "N_emple =" & mimodulo.elregistro
Rem DoCmd.RunCommand acCmdSaveRecord
DoCmd.Close
DoCmd.OpenForm fdestino, , , cartero
End If
Exit_micomando_Click:
Exit Sub
Err_micomando_Click:
MsgBox Err.Description
Resume Exit_micomando_Click
End Sub