Un mismo Formulario para varias Consultas o una Consulta Variable

A ver si me podéis echar una mano, puede que sea de parvulitos pero no consigo resolverlo.
Desde unos botones en un formulario de inicio, se invoca a un mismo formulario (una misma presentación) pero con distintas consultas (selección de registros de la misma tabla) que además presentan uno de los campos Agrupado (dependiendo de la consulta es uno u otro) y los otros como PrimeroDe.
Solo sé hacerlo de la manera básica, poniendo en el formulario en Origen del Registro el nombre de la Consulta, con lo cual es única, he probado a pasarle "variaciones" con variables globales al código SQL de la Consulta, pero no me funciona...
Me gustaría tener una única consulta con esas posibilidades de seleccionar y Agrupar diferentes y si no fuera posible, al menos un único Formulario que pudiera invocar a distintas Consultas...

Respuesta
2

Si el problema de tu consulta no es tan solo una cuestión de filtros, para lo que la respuesta de Icue es perfecta, sino que es sobre cómo usar distintas consultas como base del formulario, según lo que yo interpreto, te comento opciones:

1º/ La más sencilla sería hacer todas las consultas que vayas a necesitar y las guardes en la BD como consultas. Luego en cada botón, se la asignas al formulario:

DoCmd. OpenForm "NombreFormulario"
Forms("NombreFormulario").Recordsource="ConsultaX"
Forms("NombreFormulario"). Requery

2º/ En vez de tener guardadas las consultas, aplicas en el código de los botones las SQLs correspondientes:

DoCmd. OpenForm "NombreFormulario"
Forms("NombreFormulario").Recordsource="SELECT ....."
Forms("NombreFormulario"). Requery

Se me ocurren otras formas, pero son algo más enrevesadas y no aportan mayores ventajas que las dos que te menciono.

En cualquier caso, has de tener en cuenta que los campos de las consultas deben tener idénticos nombres para que te funcione directamente.

Si por lo que sea los campos de las consultas se llaman diferente, aún puedes seguir usando estos dos sistemas, pero añadiendo más cosas, porque debes asignar a cada uno de los controles del formulario los campos de la consulta. Y para eso, debes abrir el formulario en vista diseño (oculto o no), ir asignando a cada control un campo en su propiedad ControlSource, cerrar el formulario guardando los cambios y abrir de nuevo el formulario normalmente.

Es decir, una cosa así:

DoCmd. OpenForm "NombreFormulario", acDesign,,,, acHidden
Forms("NombreFormulario").Recordsource="ConsultaX"   'O un "SELECT...."
Forms("NombreFormulario").Control1.ControlSource="Campo1"
Forms("NombreFormulario").Control2.ControlSource="Campo2"
Forms("NombreFormulario").Control3.ControlSource="Campo3"
...
Forms("NombreFormulario").ControlX.ControlSource="CampoX"
DoCmd. Close acForm, "NombreFormulario", acSaveYes
DoCmd. OpenForm "NombreFormulario"

Hola Sveinbjorn El Rojo,  no he podido ver tu respuesta hasta hoy,  pero efectivamente es esa la idea que busco, lo pruebo y te digo, muchas gracias!!!

1 respuesta más de otro experto

Respuesta
2

Así, en principio podías poner en el evento Al hacer clic de cada botón, que dices que tienes.

docmd.openform"clientes",,,"pais=""Alemania"" and ciudad=""Berlin"""

La ventaja de esto es que le puedes poner hasta 99 condiciones AND o OR,

ó, por ejemplo

Docmd.openform"Clientes",,"fechaventa between [Escriba una fecha inicial] and [Escriba una fecha Final]"

Es decir, en esa parte de la instrucción puedes ponerle los criterios que quieres para que el formulario se abra con unos datos o con otros.

... perdona no he podido verla hasta hoy.... muchas gracias, pero lo que busco va más en la línea de la respuesta de Sveinbjorn El Rojo....

En cualquier caso, gracias por tu ayuda...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas