Subformularios en Access
He visto muy buenas respuestas tuyas. Aquí va mi pregunta:
Tengo un formulario principal en el cual inserto 3 subformularios. Me queda muy saturada la ventana por tanto quiero poner botones que llamen a los subformularios. El problema que tengo es que al llamarlos con un botón con un openform no me da ( o pierdo) los beneficios de que el subform me traiga solo los registros relacionados y que cargue automáticamente los campos clave (aún teniendo bien armadas las relaciones). Algo hago mal... Si pudieras ayudarme.
Tengo un formulario principal en el cual inserto 3 subformularios. Me queda muy saturada la ventana por tanto quiero poner botones que llamen a los subformularios. El problema que tengo es que al llamarlos con un botón con un openform no me da ( o pierdo) los beneficios de que el subform me traiga solo los registros relacionados y que cargue automáticamente los campos clave (aún teniendo bien armadas las relaciones). Algo hago mal... Si pudieras ayudarme.
1 respuesta
Respuesta de manuelpacha
1
1
manuelpacha, Trabajo de diseñador de bases de datos en entorno access con un...
Supongo que el formulario principal tiene datos y los subformularios están relacionados con el principal, así por ejemplo tendríamos un formulario principal de datos de un trabajador y los subformularios serían partes de trabajo, pases de salida, etc.
En caso de que estén relacionados lo mejor es incorporar un control de ficha que está en el Cuadro de herramientas de access.
El control de fichas te genera un subformulario con unas pestañas, inicialmente creo que te genera 2 aunque con el botón derecho puedes agregar más. Pulsando en el botón de Subformulario del cuadro de herramientas y marcando dentro del formulario de las pestañas, te agrega a la pestaña activa un subformulario. Pulsando en la otra pestaña y haciendo la acción anterior puedes agregar los formularios que quieras. Para relacionar cada subformulario con el principal pulsamos sobre el subformulario con botón derecho y en propiedades Datos en Vincular campos secundarios ponemos el nombre del campo del subformulario y en Vincular campos principales el principal, lo que sí es que tienen que significar lo mismo por lo que si en el formulario principal el campo es NumeroEmpleado, este dato tiene que existir en el subformulario. En caso de querer relacionar más de un campo lo indicaríamos separados por un punto y coma.
En caso de que no estén relacionados los subformularios con el principal, una manera sería hacer visible o invisible los formularios. Es tan simple como poner los subformularios uno encima de otro, luego pulsamos en Botón de comando en el Cuadro de herramientas, dibujamos el botón en el formulario y cuando nos diga que acción queremos realizar le damos a cancelar. Pulsamos sobre el botón con el botón derecho>generar evento>generador de códigos> Aceptar y escribimos suponiendo que los nombres de los subformularios son SecundarioXX
Me.Secundario10.Visible = False
Me.Secundario11.Visible = False
Me.Secundario8.Visible = True
De esta manera hacemos invisible el 10 y el 11 y visible el 8.
Creando otros botones con el mismo procedimiento podríamos hacer visible o invisible los formularios a nuestro gusto.
Después de este rollazo espero haberte ayudado y si tal me vas comentando.
Una aperta desde Galicia.
En caso de que estén relacionados lo mejor es incorporar un control de ficha que está en el Cuadro de herramientas de access.
El control de fichas te genera un subformulario con unas pestañas, inicialmente creo que te genera 2 aunque con el botón derecho puedes agregar más. Pulsando en el botón de Subformulario del cuadro de herramientas y marcando dentro del formulario de las pestañas, te agrega a la pestaña activa un subformulario. Pulsando en la otra pestaña y haciendo la acción anterior puedes agregar los formularios que quieras. Para relacionar cada subformulario con el principal pulsamos sobre el subformulario con botón derecho y en propiedades Datos en Vincular campos secundarios ponemos el nombre del campo del subformulario y en Vincular campos principales el principal, lo que sí es que tienen que significar lo mismo por lo que si en el formulario principal el campo es NumeroEmpleado, este dato tiene que existir en el subformulario. En caso de querer relacionar más de un campo lo indicaríamos separados por un punto y coma.
En caso de que no estén relacionados los subformularios con el principal, una manera sería hacer visible o invisible los formularios. Es tan simple como poner los subformularios uno encima de otro, luego pulsamos en Botón de comando en el Cuadro de herramientas, dibujamos el botón en el formulario y cuando nos diga que acción queremos realizar le damos a cancelar. Pulsamos sobre el botón con el botón derecho>generar evento>generador de códigos> Aceptar y escribimos suponiendo que los nombres de los subformularios son SecundarioXX
Me.Secundario10.Visible = False
Me.Secundario11.Visible = False
Me.Secundario8.Visible = True
De esta manera hacemos invisible el 10 y el 11 y visible el 8.
Creando otros botones con el mismo procedimiento podríamos hacer visible o invisible los formularios a nuestro gusto.
Después de este rollazo espero haberte ayudado y si tal me vas comentando.
Una aperta desde Galicia.
Hola Manuel, te cuento...
Los subformularios está relacionados con el principal. Ya había intentado armar 3 fichas cada cual con un subformulario y tengo el siguiente problema:Dentro de la carga de datos del subform, accedo a otras tablas auxiliares(como tipo de producto y subtipo de producto) y necesité crear una macro que hace Nueva Consulta sobre subtipo para que no me queden datos viejos en la consulta.
Es decir cada una de las tres fichas tiene un subform hecho con una tabla princ. Que consulta tablas auxiliares.
Cuando quiero cerrar el formulario principal pareciera que le queda abierto solo la tabla de la ficha activa y entonces me dice que no hay ningún campo llamado "tal" en el registro que hace referencia la macro "cual". Siempre me da dos errores, la activa no me da...
¿Te hice mucho lio? Gracias por tu preocupación!
Virginia desde Balcarce, Argentina
Los subformularios está relacionados con el principal. Ya había intentado armar 3 fichas cada cual con un subformulario y tengo el siguiente problema:Dentro de la carga de datos del subform, accedo a otras tablas auxiliares(como tipo de producto y subtipo de producto) y necesité crear una macro que hace Nueva Consulta sobre subtipo para que no me queden datos viejos en la consulta.
Es decir cada una de las tres fichas tiene un subform hecho con una tabla princ. Que consulta tablas auxiliares.
Cuando quiero cerrar el formulario principal pareciera que le queda abierto solo la tabla de la ficha activa y entonces me dice que no hay ningún campo llamado "tal" en el registro que hace referencia la macro "cual". Siempre me da dos errores, la activa no me da...
¿Te hice mucho lio? Gracias por tu preocupación!
Virginia desde Balcarce, Argentina
No he entendido lo de que "cada una de las tres fichas tiene un subform hecho con una tabla princ. que consulta tablas auxiliares". No sé que quieres decir con que consulta tablas auxiliares. Se que es complicado exponer por escrito los problemas, pero a lo mejor si me dices algún ejemplo con datos y lo que cuelgan en los subformularios me ayudaría a entenderlo.
Una aperta.
Una aperta.
Trataré de explicarme ...
Formulario Principal con la tabla TAProyectos (se relaciona con los subformularios con el campo Proyecto)
Ficha 1 - Subformulario1 con la tabla TTerritoriosxProyecto
Ficha 2 - Subformulario2 con la tabla TProblemasxProyecto (campos:Proyecto-tipoProblema-SubtipoProblema), entonces...
Camposubform2.TipoProblema accede a tabla TTipoProblemas para obtener subform2.DescripciónTipoProblema
Camposubform2.SubtipoProblema accede a tabla TsubtipoProblemas para obtener subform2.DescripciónSubTipoProblema con CampotablaSubTipoProblema. TipoProblema = CampoFormularioTipoProblema
Ficha 3 - Subformulario3 con la tabla TPAProductosxProyecto
Te lo cuento solo para el Subform2, es ídem para el 1 y el 3.
El problema que tengo es que como te dije antes necesité una macro para que la consulta de la descripción del SubtipoProblema la haga nuevamente con el tipoProblema correspondiente. Porque sino, no refresca la consulta y siempre me muestra la misma (es decir cargo el campo tipoProb con 2 y me sigue mostrando la consulta del registro anterior con TipoProb 1).
Problema, cuando cierro el formprincipal no reconoce los campos de registros nombrados en la macro y me da error.
Estoy complicada!
Formulario Principal con la tabla TAProyectos (se relaciona con los subformularios con el campo Proyecto)
Ficha 1 - Subformulario1 con la tabla TTerritoriosxProyecto
Ficha 2 - Subformulario2 con la tabla TProblemasxProyecto (campos:Proyecto-tipoProblema-SubtipoProblema), entonces...
Camposubform2.TipoProblema accede a tabla TTipoProblemas para obtener subform2.DescripciónTipoProblema
Camposubform2.SubtipoProblema accede a tabla TsubtipoProblemas para obtener subform2.DescripciónSubTipoProblema con CampotablaSubTipoProblema. TipoProblema = CampoFormularioTipoProblema
Ficha 3 - Subformulario3 con la tabla TPAProductosxProyecto
Te lo cuento solo para el Subform2, es ídem para el 1 y el 3.
El problema que tengo es que como te dije antes necesité una macro para que la consulta de la descripción del SubtipoProblema la haga nuevamente con el tipoProblema correspondiente. Porque sino, no refresca la consulta y siempre me muestra la misma (es decir cargo el campo tipoProb con 2 y me sigue mostrando la consulta del registro anterior con TipoProb 1).
Problema, cuando cierro el formprincipal no reconoce los campos de registros nombrados en la macro y me da error.
Estoy complicada!
Entiendo que lo que tienes es una serie de cuadros combinados que al desplegarse buscan valores en una tabla o consulta, relacionado con el dato incorporado en el cuadro anterior. Así si ponemos en el cuadro combinado tipoProblema=XXX, y queremos que al abrir el cuadro combinado de subtipoproblema solo me salgan los relacionados con el tipo problema XXX. Entiendo que la tabla TsubtipoProblema tiene los campos SubtipoProblema/Descripcion/Tipoproblema.
Conservando los nombres de los campos que coinciden con los nombres de los cuadros combinados, en el cuadro de SubtipoProblema>Datos>Origen de la fila pondremos el codigo SQL SELECT TsubtipoProblema.Descripcion, TsubtipoProblema.TipoProblema FROM TsubtipoProblema WHERE (((TsubtipoProblema.TipoProblema)=Formularios!Principal!Subformulario2.Form!TipoProblema)); y en Eventos>Al entrar incorporamos la orden de visual Basic Me.SubtipoProblema.Requery que lo que hace es que cada vez que entremos en el cuadro combinado recalcula la consulta.
Ya me contarás si voy por el buen camino. Una aperta.
Conservando los nombres de los campos que coinciden con los nombres de los cuadros combinados, en el cuadro de SubtipoProblema>Datos>Origen de la fila pondremos el codigo SQL SELECT TsubtipoProblema.Descripcion, TsubtipoProblema.TipoProblema FROM TsubtipoProblema WHERE (((TsubtipoProblema.TipoProblema)=Formularios!Principal!Subformulario2.Form!TipoProblema)); y en Eventos>Al entrar incorporamos la orden de visual Basic Me.SubtipoProblema.Requery que lo que hace es que cada vez que entremos en el cuadro combinado recalcula la consulta.
Ya me contarás si voy por el buen camino. Una aperta.
PERFECTO! Me faltaba el Requery!. Buenísimo.
Ahora una consulta más sobre el mismo subformulario tengo
1.CodTipoProblema - DescTipoProbl - 2.CodSubtipoProb. - Desc.SubTipoProb
Como ya entendiste el cuadro1 busca la descripción en una tabla auxiliar y el cuadro2 en otra tabla auxiliar.
El tema es que me muestra ambas descripciones luego de ingresar los dos códigos y no se por qué...
Tu ayuda ha sido valiosísima!
¿Una cosa más me dices que quiere decir Una aperta? Aquí no lo sabemos... un saludo, Virginia
Ahora una consulta más sobre el mismo subformulario tengo
1.CodTipoProblema - DescTipoProbl - 2.CodSubtipoProb. - Desc.SubTipoProb
Como ya entendiste el cuadro1 busca la descripción en una tabla auxiliar y el cuadro2 en otra tabla auxiliar.
El tema es que me muestra ambas descripciones luego de ingresar los dos códigos y no se por qué...
Tu ayuda ha sido valiosísima!
¿Una cosa más me dices que quiere decir Una aperta? Aquí no lo sabemos... un saludo, Virginia
Los cuadros combinados pueden mostrar al abrirlos más de una columna si la consulta las tiene y si le indicamos en propiedades>Formato>Numero de columnas el numero de columnas que queremos. En Datos le indicamos que columna vamos a guardar en el campo a través de Columna Dependiente. Así a ti te puede interesar visualizar en el cuadro combinado las columnas de TipoProblema y su descripción, pero al marcar el dato puede que quieras solo el Tipo, con lo que pondrías 2 columnas, le podrías asignar el ancho de columnas en 2;7 para el Tipo;Descripción, y columna dependiente la 1 para que te inserte en el campo el Tipo.
Una aperta significa Un abrazo en Gallego (Galicia-España).
Una aperta significa Un abrazo en Gallego (Galicia-España).
Sí Manuel, todo eso lo hago pero... Te cuento: La descripción no la almaceno en la tabla solo el código. La descripción hago que se muestre en pantalla y el problema es que no lo hace inmediatamente de salir del cuadro combinado (tipoProb), sino luego de llenar el segundo cuadro combinado(subtipoprob). Recién ahí me completa ambas descripciones. La tabulación está bien. Las descripciones las traigo de las tablas auxiliares y lo hace bien pero al final...
Chau !!! unha aperta, Virginia
Chau !!! unha aperta, Virginia
No se como visualizas la descripción en pantalla, me imagino que el subfromulario lee de una consulta que cruza las tablas y así en el momento de incorporar un dato te relaciona con la descripción. La consulta del subfromulario relacionaría la TproblemasxProyecto con las tablas TsubtipoProblema(SubTipoProblema;Descripción;TipoProblema) y TTipoProblema(TipoProblema;Descripción), e incorporaremos todos los campos de TproblemasxProyecto y las campos de descripción de cada una de las tablas.
Sí, el tema es con alta de registros solamente, al actualizar lo hace bien. En el subformulario hay un cuadro combinado con codtipoProb (accede a la tbla tipoProb) y siguiendo el campo DescrTipoProblema(también campo de la la Tabla TipoProblema), siguiendo están (igualmente) subtipo y descsubtipo. El tema es que refleja ambas descripciones luego del segundo cuadro combinado. Sólo para ingrso del registro para actualización lo hace bien. También puedo dejarlo así ! No quiero molestarte tanto..., estoy muy agradecida por tu ayuda, una aperta, Virginia
- Compartir respuesta
- Anónimo
ahora mismo