D7.32

(ejercicio) Formulario de alta de datos laborales en Access

D7.35

(ejercicio) Formulario optimizado de consulta, actualización y altas

D7.36

(ejercicio) Subformulario de empleados por ciudades en Access

D7.39

(ejercicio) Subformulario comisión vendedores en Access

D7.41

(ejercicio) Subformularios de productos en Access

Páginas:
(ejercicio) Formulario optimizado de consulta, actualización y altas

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

(ejercicio) Formulario optimizado de consulta, actualización y altas







Sesión:
registrar en twiiter
Inicie sesión ...


Editores de contenidos

No es un Editor...



Títulos


Tweets aulapc.es:





 eduardo@aulapc.es Granada (España)