¿Cómo se puede añadir subformularios a Access?

He creado a través del asistente de formularios de Access un formulario principal con dos subformularios,

Pero requiero añadir más subformulario y el asistente no lo permite, he intentado añadirlo pero el problema es que no funcionan de la misma forma. Es decir el primer subformulario depende del formulario principal y el segundo subformulario depende del primer subformulario.

Entonces necesitaría añadir subforms que fueran dependientes en escala. Que cuando pulse una opción de subformulario 2 el 3 filtre según esa opción.

4 respuestas

Respuesta
2

Primero, bendito tú que en la pantalla te caben un formulario con dos subformularios. Mi ordenador es un portátil y ya bastante que entre un formulario con un subformulario.

Segundo, te voy a poner un ejemplo. Ya es difícil para un padre pelear en casa con sus hijos( y las nueras, no nos olvidemos de ellas), como para tener que pelear con nietos, bisnietos, etc. ¿No sería más sencillo hacer un formulario con un subformulario y en cualquier evento del subformulario decirle que abra, en vista diálogo, "filtrado" el subsubformulario, y en el subsubformulario lo mismo, y así hasta...?. Equivaldría a que el nieto se pelee con sus hijos, el hijo con los suyos y el padre con los hijos.

Te adjunto una imagen de las relaciones de que tengo del Access y tengo la necesidad de que el usuario en el formulario pueda visualizar y acceder a cada uno de los apartados. La verdad que no se  como generarlo al 100 % si tienes alguna alternativa te lo agradeceré.

muchas gracias

Vamos a suponer que tengo una tabla Paises, otra tabla Ciudades, otra tabla Empresas y otra tabla Contactos, de forma que un país puede tener varias ciudades, una ciudad varias empresas, una empresa varios contactos...

Con la tabla Paises y la tabla Ciudades hago un formulario con subformulario

Si hago clic en Idciudad( pero podría ser en cualquier otro evento)

Me abre, en vista diálogo, el formulario Empresas para que anote(o compruebe) las empresas que hay en Berlín.

Si hago clic en idempresa

Me abre el formulario Contactos, en vista diálogo, y superpuesto al anterior, de esa empresa para anotar o comprobar.

En el evento Al hacer clic( pero podría ser en cualquier otro evento) del control Idciudad del subformulario Ciudades le digo

DoCmd.OpenForm "empresas", , , "idciudad=" & Me.IdCiudad & "", , acDialog

En el evento Al hacer clic del control Idempresa del subsubformulario Empresas le digo

DoCmd.OpenForm "contactos", , , "idempresa=" & Me.IdEmpresa & "", , acDialog

Y así hasta...

Respuesta
2

Aunque Icue ya te respondió satisfactoriamente, permíteme indicarte una forma en la que puedes hacer subformularios en cascada con este ejemplo: http://www.filebig.net/files/GmeiUbF5wq

La BD es muy simple, con esta estructura:

El formulario TPaises tiene un subformulario dependiente (TRegiones). Si te fijas en sus propiedades, verás que está relacionado con el formulario principal por los campos IDPais (de TPaises,) como campo principal y Pais (de TRegiones) como campo secundario.

El formulario TPaises tiene a su vez otro subformulario (TCiudades) que dependerá del valor seleccionado en el subformulario TRegiones. En este caso los campos relacionados son IDRegion (del subformulario TRegiones) como principal y Region (de TCiudades) como secundario.

Fíjate en la notación del primero: [TRegiones]!Form![IDRegion], es decir, el nombre del subformulario (TRegiones), la palabra Form, para indicar que se trata de un formulario, y el nombre del Campo (IDRegion)

Además, para que el "invento" funcione, en el evento "al activar registro" del subformulario TRegiones, hay que programar un pequeño código:

Private Sub Form_Current()
On Error Resume Next
Me.Parent![TCiudades].Requery
End Sub

que no hace otra cosa que decirle al subformulario TCiudades que se recargue para mostrar las ciudades correspondientes a la región seleccionada.

Y siguiendo este esquema tan simple (relacionando los campos de un subformulario con los del anterior y programando ese evento), podrías añadir a tu formulario los subformularios en cascada que necesites.

Un saludo.


Víctor, en el ejemplo verás que el código es diferente al que indico en mi respuesta, eso es porque el ejemplo es de hace bastantes años y lo hice de otra forma, pero si lo dejas tal cual indico en la respuesta funciona perfectamente.

Respuesta

Ese evento se produce ANTES DE INSERTAR, como su nombre indica... :D no puedes Asignar valores a un registro que TODAVÍA NO EXISTE.
Por eso te sugería la posibilidad de usar el "valor predeterminado".
Haz una cosa. Deja solo el predeterminado, y prueba a poner un = delante, así:
=forms![BDGrupos1]![Consecutivo_grupo]
A ver que tal rula y me lo cuentas...

https://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/super mario bros

Respuesta

Unfortunately the Access wizard limits how many layered interdependent subforms you can create. The functionality you are looking for, with cascading filter effects from main form to multiple subforms, takes some custom VBA coding. I would suggest abandoning the wizard-generated forms, and instead build your forms from scratch. That way you have full control to add event procedures that link filtering and navigation between all levels of your forms. Focus on getting the table relationships correctly set up first, then create the main form and add the first subform. After that is working properly, keep adding additional subforms one by one, using VBA code to sync the filtering and navigation between them. This takes more work up front but gives you the flexibility to create those interdependent multi-level forms. Let me know if you need any help with the VBA syntax to connect it all! The latest feature of Blue WhatsApp. Free download from any search engine. Hide you online, reading, typing, and seeing status.

Blue WhatsApp has emerged as one of the most popular messaging apps. It stands out for allowing users to operate two WhatsApp accounts from the same phone. This dual account feature makes it convenient to separate personal and professional communication.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas