Trabajando con formularios los ID no se cargan automáticamente.

Tengo una BD en Access que desde las tablas se trabaja bien. Cuando a mi tabla 1 CLIENTES le lleno un registro con nombres y apellidos de los clientes, como es normal me muestra el registro de la tabla 2 CONTACTOS y automáticamente carga bien el ID de la relación correspondiente a la tabla 2 como se ve en la imagen siguiente:

Cuando hago el formulario CLIENTES le pongo un botón Contactos para vincularlo al subformulario CONTACTO vinculado de IDcliente a IDcontacto

Me carga el subformulario contactos pero el ID tengo que ponerlo a mano, no lo carga automáticamente como en las tablas. Por ejemplo mirar el último registro, ya le puse nombre y no se carga. ¿Qué puede ser la causa?

1 respuesta

Respuesta
1

Alexis, no dices como le cargas el idcliente en la tabla contactos, pero te garantizo que si, por ejemplo, en ese botón que dices, le pones algo como

Docmd.setwarnings False

docmd.runsql"inseert into Contactos(idcliente)values(Idcliente)

Cuando pulses es botón te habrá insertado en la tabla Contactos el idcliente que hay en ese momento en el formulario.

Lo de docmd. Setwarnings es para que no aparezca la dichosa ventanita de Va a agregar...

Cuando voy a hoja de Propiedades del botón/Eventos/Al hacer clic ya existe un procedimiento de eventos para este botón y mira su contenido:

Option Compare Database
Sub Form_Current()
On Error GoTo Form_Current_Err
    If ChildFormIsOpen() Then FilterChildForm
Form_Current_Exit:
    Exit Sub
Form_Current_Err:
    MsgBox Error$
    Resume Form_Current_Exit
End Sub
Sub AlternarVínculo_Click()
On Error GoTo AlternarVínculo_Click_Err
    If ChildFormIsOpen() Then
        CloseChildForm
    Else
        OpenChildForm
        FilterChildForm
    End If
AlternarVínculo_Click_Exit:
    Exit Sub
AlternarVínculo_Click_Err:
    MsgBox Error$
    Resume AlternarVínculo_Click_Exit
End Sub
Private Sub FilterChildForm()
    If Me.NewRecord Then
        Forms![Contactos].DataEntry = True
    Else
        Forms![Contactos].Filter = "[Idcliente] = " & Me.[Idcliente]
        Forms![Contactos].FilterOn = True
    End If
End Sub
Private Sub OpenChildForm()
    DoCmd.OpenForm "Contactos"
    If Not Me.[AlternarVínculo] Then Me![AlternarVínculo] = True
End Sub
Private Sub CloseChildForm()
    DoCmd.Close acForm, "Contactos"
    If Me![AlternarVínculo] Then Me![AlternarVínculo] = False
End Sub
Private Function ChildFormIsOpen()
    ChildFormIsOpen = (SysCmd(acSysCmdGetObjectState, acForm, "Contactos") And acObjStateOpen) <> False
End Function

¿dónde pongo lo que has enviado? Mira la tabla Contactos y la descripción de las propiedades del Idcliente.

Nunca se me había enrredado tanto una cosa tan sencilla como esta. Hasta he vuelto a hacer los formularios y sigue dando el mismo problema. No se si sea debido al trabajo anterior que hicimos con la tabla Tipología.

Si tengo una tabla Clientes

Y otra tabla Contactos, con el Idcontacto numérico

Construyo el formulario Clientes y el formulario Contactos y pongo el de Contactos como subformulario

En las propiedades del subformulario contactos le digo que vincule el campo Principal Idcliente con el campo secundario Idcontacto. Te dejo a la vista, aunque no sería necesario que estuvieran, los controles IdCliente e Idcontacto. En el momento que abro el formulario, o activara algún registro del subformulario me pone

Si escribo un nombre, automáticamente en el siguiente registro me repite el Idcliente.

Pero si cerrara el formulario, y por ende, el subformulario, no te guardaría ese registro en que el nombre del contacto está vacío, ya que ese registro es una imagen virtual.

Por cierto, en el evento Al hacer clic del botón que citas, lo que le estás diciendo es que filtre el subformulario, pero todas esas líneas que tiene, que personalmente opino que son un disparate, se solucionan con una sola

me.contactos.form.recordsource="select * from contactos where idcontacto=" & me.idcliente & ""

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas