Relacionar dos formularios independientes en Access

Necesito seleccionar un registro de un formulario tipo hoja de datos y que al seleccionarlos muestre los datos correspondientes a este en otro formulario que esta a la par.. Los dos formulario comparten un id en común.. Los dos formulario están dentro de un formulario llamado Formulario1 .

Y el primer formulario llamado Expedientes es en forma de hoja de datos y el segundo formulario es llamado Detalle. Ambos comparten un campo llamado id..

Al ir bajando de registro en registro que el formulario DETALLE.. Se actualice con los datos correspondientes- Pienso que puede ser que al recibir enfoque el id de Expedientes actualice los datos en el otro formulario.. Pero no tengo ni idea.

Gracias..

3 respuestas

Respuesta
2

No sé si lo he entendido bien. Quieres que al ir bajando por el formulario Expedientes, en el formulario Detalle te muestra el registro correspondiente al mismo Id que el del formulario Expedientes. Vamos a suponer que ambos subformularios dependen de las tablas con el mismo nombre Expedientes y Detalle. En el evento Al activar registro del formulario Expedientes puedes crear un procedimiento de evento y poner

forms!formulario1.detalle.form.recordsource="select * from detalle where id=" & me.id & ""

Me explico. Le estás diciendo que el origen de registros del subformulario Detalle sean aquellos registros de la tabla Detalle en que su id coincida con el Id que figura en ese momento en el subformulario Expedientes

Gracias.. Si es tal como describe es que lo necesito.. al ir bajando y posicionándome en cada registro que muestre en el otro formulario lo correspondiente al id..    lo he puesto tal y como dijiste.. he creado un procedimiento de evento en el formulario Expedientes en "Al activar registro" pero me da error de depuración.

los formulario y tablas son:

Formulario1  --- independiente

Formulario Expedientes procede de la tabla Expedientes

Formulario Detalle procede de la tabla Detalle

campo id es el común

Llamas a un subformulario Detalle y es precisamente una de las palabras prohibidas de VB. El sistema entiende que te refieres a la sección Detalle del formulario. Si quieres, repito, si quieres, mándame un mensaje( sólo el mensaje) a [email protected] y te mando un ejemplo, que es como se ve mejor.

Si lo haces, en el asunto del mensaje pon tu alias Gabriel Pavon, ya que si no sé quien me escribe ni los abro.

Respuesta
2

Puede hacerlo de 2 formas: Filtrando y cambiando el origen de datos del subformulario

Si hago clic en el idcliente del subformulario de la izquierda obtengo el mismo idcliente en el formulario de la derecha, igualmente si me desplazo de un registro a otro.

Código del formulario frmSub01

Sub sincroniza()
 On Error Resume Next
 If Not Me.NewRecord Then
' FORMA 1
     Me.Parent.Form.[frmSub02].Form.Filter = "idcliente=" & Str(Nz(Screen.ActiveControl, 0))
     Me.Parent.Form.[frmSub02].Form.FilterOn = True
 ' FORMA 2
  '  Forms!Formulario3.Form.[frmSub02].Form.Filter = "idcliente=" & Str(Nz(Screen.ActiveControl, 0))
  '  Forms!Formulario3.Form.[frmSub02].Form.FilterOn = True
  ' FORMA 3
 '  Forms![Formulario3]![frmSub02].Form.RecordSource = "SELECT * FROM tblclientes WHERE idcliente=" & Str(Nz(Screen.ActiveControl, 0))
  End If
End Sub
Private Sub Form_Current()
  Call sincroniza
End Sub
Private Sub idcliente_Click()
 Call sincroniza
End Sub

Le dejo 3 formas de sincronizar los formularios.

Gracias.. Una pregunta.. y donde pongo el código..

Todo el código va en el formulario frmSub01 (en mi ejemplo), usted debe hacerlo en el formulario Expediente y para simplificar adicione este código en el evento Al activar registro.

 On Error Resume Next
  If Not Me.NewRecord Then
' FORMA 1
      Me.Parent.Form.[frmSub02].Form.Filter = "idcliente=" & Me.idcliente
      Me.Parent.Form.[frmSub02].Form.FilterOn = True
 ' FORMA 2
  '   Forms!Formulario3.Form.[frmSub02].Form.Filter = "idcliente=" & Me.idcliente
  '   Forms!Formulario3.Form.[frmSub02].Form.FilterOn = True
  ' FORMA 3
 '  Forms![Formulario3]![frmSub02].Form.RecordSource = "SELECT * FROM tblclientes WHERE idcliente=" & Me.idcliente)
  End If

Cambie los nombres de los formularios por los suyos e idcliente por su id. Descarte el procedimiento realmente sobra.

No tengo idea porque no funciona... puse los mismos nombres a los formularios.. y puse el procedimiento en el frmSub01  en "activar registro"  lo único diferente es que mi id  se llama nada mas "id"  (idcliente) .

No se si el error esta en que los dos formularios proceden de la misma tabla.. no se si esto es.

Si quiere envíeme su base de datos a [email protected] y la reviso o le suministro el ejemplo.

Le envíe el ejemplo a su correo

Respuesta
1

Los subformularios pueden depender de un campo del formulario principal, utilizaremos esta opción.

.- Crear un cuadro de texto (Le llamare 'BC') en el formulario 'A' (el principal) como origen de datos el campo de 'B' que tenga el ID o campo a sincronizar con 'C' podía se algo como esto:

= [B]!Formulario![campo de sincronía]

En el formulario 'C' (seleccionar el formulario) y en su pestaña datos:

Vincular campos principales  ==> [BC]

Vincular campos secundarios ==> [El campo de relación con 'B']

El cuadro de texto 'BC' debería mostrar el mismo valor que se seleccione del formulario 'B', se puede minimizar y ocultar (solo necesita existir para hacer el eco del dato)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas