Access - Crear consulta a partir de selección de campos mediante formulario

 
Vista:

Crear consulta a partir de selección de campos mediante formulario

Publicado por Ezel (50 intervenciones) el 22/05/2021 00:07:39
Un saludo a todos! El pasado 11 de mayo publiqué un tema titulado "Integrar informe a partir de selección de campos por el usuario", recabando ayuda en un empeño que aun no he logrado, que consiste en que el usuario pueda "armar" un informe, a su gusto, seleccionando campos desde un formulario, en una extensa lista mediante casillas de verificación. Recientemente un amigo me sugirió no emplear un informe (por la rigidez de su diseño) y hacerlo mediante una consulta para exportarla luego a Excel, con lo cual estoy de acuerdo.
El problema: En el diseño de la consulta estoy empleando para cada campo la funcion SiInm en algo así:
Campo1: SiInm([Formularios]![Formulario1]![Opcion1]=-1,[NombredelCampo],Nulo)
Pero cuando el valor no es -1 ME MUESTRA EL CAMPO CON VALORES NULOS y MI INTENCIÓN ES QUE NO LO MUESTRE, es decir que solo cargue los campos equivalentes a las opciones seleccionadas.
Por eso me disculpo e insisto en su valiosa ayuda. Gracias de antemano!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Crear consulta a partir de selección de campos mediante formulario

Publicado por Anonimo (3316 intervenciones) el 22/05/2021 09:47:12
Nulo no representa a ningún valor, es un dato que no existe y que hay que tratar de evitar.

El IIF (silnm) se espera una cadena de texto con el nombre si la opción es verdadero (-1 solo es un valor que no es cero = false) , la construcción tendria mas logica asi:

1
2
3
4
'original
Campo1: SiInm([Formularios]![Formulario1]![Opcion1]=-1,[NombredelCampo],Nulo)
'alternativa
Campo1: SiInm([Formularios]![Formulario1]![Opcion1]<>0 ,[NombredelCampo],"")

Pero creo que lo que se intenta debería ir en la línea de recorrer los objetos del formulario y generar una lista separada con comas con los campos seleccionados para crear la SQL.

Todo dependerá de la estructura de esos datos, si todos ellos pertenecen a una tabla no habría mayor problema, pero si se tiene que generar dependencias o relaciones en tiempo de ejecucion, habra que trabajar bastante mas.

Una vez creada esa consulta, nada impide su exportacion o asignarsela a un informe, ya en el informe y con ese origen de datos, a los objetos del informe habra que asignarle su correspondiente origen de datos (que estaran en la cadena de texto que se utilizo para generar la SQL).

Todo ello requiere un cierto dominio de VBA y del esqueleto de Access para poder obtener lo que se desea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Ezel
Val: 62
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Crear consulta a partir de selección de campos mediante formulario

Publicado por Ezel (24 intervenciones) el 22/05/2021 14:31:52
Gracias Anónimo. Voy a intentar generar una cadena de textos separados por comas, que sería la SQL. Esto pienso que puedo hacerlo en un cuadro de texto en el mismo formulario. Necesitaré ayuda luego en cómo emplearla para generar la consulta, es decir, en cómo referenciar esa cadena desde el diseño de una consulta o en generarla la consulta desde VBA. Te mantendré al tanto. Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ezel
Val: 62
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Crear consulta a partir de selección de campos mediante formulario

Publicado por Ezel (24 intervenciones) el 22/05/2021 18:16:48
Hola nuevamente Anónimo! Ya logré un cuadro de texto en el Formulario que me genere una cadena con la expresión SQL que necesito para hacer la consulta, desde el SELECT pasando por todos los campos en dependencia de la elección hasta el FROM. Llamemos a este objeto Texto29. Ahora cuál sería el camino? Existe algún comando de VBA de crearla y referenciar el objeto del Formulario? Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear consulta a partir de selección de campos mediante formulario

Publicado por Anonimo (3316 intervenciones) el 23/05/2021 22:38:58
Una consulta de selección se compone de un mínimo de dos partes, una lista de campos y el origen de los mismos, se puede complicar mucho mas, por ejemplo añadiendo condiciones, generando relaciones o imponiendo orden ....

Desconociendo el dominio del entorno será difícil poder dar indicaciones sencillas para lograr algo que es complejo, no solo consiste en llenar cuadros de texto e imprimirlos, hay que darle formato (ubicación y tamaño por lo menos) y todos esos detalles que diferencian un listado neutro de un informe que de información rápida y elegante.

Un punto a considerar:
Una cosa es lo que se muestre en el formulario (de forma clara para que la selección sea fiable y ergonómica) y otra esa misma información preparada para generar una SQL o (con otro nombre) una consulta de selección de datos,

Creo que falta mucho por definir y concretar, de momento solo existe la intención de crear una aplicación que permita a usuarios poco expertos genera informes complicados.

Lo mas habitual consiste en tener predefinidos unos informes y utilizar unos u otros en función del destino (limitando el contenido con condiciones que el usuario final puede utilizar).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Ezel
Val: 62
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Crear consulta a partir de selección de campos mediante formulario

Publicado por Ezel (24 intervenciones) el 24/05/2021 00:55:49
Gracias amigo, por tu atención y tu paciencia. Trataré de hacerme entender mejor. Descarté emplear un informe y lo que necesito es una CONSULTA que se alimente de la SQL generada en un Cuadro de Texto. Este cuadro de texto tiene una expresión que "arma" la sentencia SQL que alimentaría la consulta, en dependencia de la selección que haga el usuario mediante casillas de verificación. Las propiedades de formato, tamaño y demás están definidas en la tabla origen (Personas).
Existe posibilidad de generar esa consulta mediante un código VBA?
He intentado subirles una imagen pero mi dispositivo no le permite ahora. Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear consulta a partir de selección de campos mediante formulario

Publicado por Anonimo (3316 intervenciones) el 24/05/2021 02:54:22
Una consulta clásica en formato SQL-
1
Select Nombre, Apellido, Direccion, Telefono From Agenda

Siendo 'Nombre, apellido, dirección, teléfono' el contenido del cuadro de texto en el formulario, la expresión se escribiría así:
1
MiSQL = "Select " & Forms.[el formulario].[El cuadro de texto] & " From Agenda"

La variable 'MiSQL' contendrá un origen de datos valido para un Recordset y con un punto y coma al final se puede crear una consulta y añadirla al conjunto de consultas guardadas (como si hubiera sido creada con el generador grafico que incorpora Access).

Espero que sea de utilidad para esa necesidad

Nota:
El generador de consultas grafico que incorpora Access trabaja en las dos direcciones, se genera una consulta de forma grafica y 'el' genera la SQL correspondiente o bien se crea la SQL y 'el' genera la consulta grafica equivalente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Ezel
Val: 62
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Crear consulta a partir de selección de campos mediante formulario

Publicado por Ezel (24 intervenciones) el 24/05/2021 03:19:56
Amigo creo que comenzamos a vislumbrar la idea. En el formulario ubiqué un botón de comando que necesito para abrir dicha consulta. En el evento Click introduje el código que me brindaste y me resulta un mensaje de error diciendo "No se ha definido la variable". Otra duda es sobre el punto y coma, debo reflejarlo al final, antes de las comillas de cierre? Gracias nuevamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ezel
Val: 62
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Crear consulta a partir de selección de campos mediante formulario

Publicado por Ezel (24 intervenciones) el 24/05/2021 06:11:45
También he probado la expresión en la vista SQL de la consulta y al ejecutarla me da un mensaje de error Instrucción SQL no válida; se esperaba 'DELETE', 'INSERT', 'PROCEDURE', SELECT' o 'UPDATE'. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear consulta a partir de selección de campos mediante formulario

Publicado por Anonimo (3316 intervenciones) el 24/05/2021 12:59:38
Copiar y utilizar un contexto sin conocer el entorno y sus reglas es un gran inconveniente para llegar a un destino.

Generar una consulta (en su 'vista SQL') copiando de forma literal datos -que probablemente no existan- en ese entorno, es una perdida de tiempo para ambas partes, tanto para el que busca la solución como para el que proporciona ideas (no un copiar/pegar).

Nada que comentar sobre los problemas encontrados, asumo que no se conoce lo elemental del VBA ni se curioseo como genera Access la SQL de sus consultas graficas -algo de teoría es imprescindible- y conocida la teoría es fácil adaptarla a la practica.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
Imágen de perfil de Ezel
Val: 62
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Crear consulta a partir de selección de campos mediante formulario

Publicado por Ezel (24 intervenciones) el 24/05/2021 14:50:40
Con tu respuesta me has hecho sentir mal y disminuido. La asumo como una evasiva pero de todos modos te doy las gracias. Te aclaro que llevo 20 años trabajando en Access y 'curioseando' cómo se genera la SQL a partir del diseño gráfico y viceversa, pero poco tiempo empleando VBA, algo que he dicho en este Foro varias veces con la mayor humildad, a expensas de actitudes autoritarias que disminuyen al que no sabe y pregunta buscando ayuda. Tampoco copié y pegué literalmente, de dónde sacas eso? Te aclaro también que no soy programador de profesión, algo que te repito no me avergüenza, recurro a la programación como herramienta para mi desempeño como Psicólogo; desempeño que me ayuda a entender la infelicidad que hay tras actitudes autoritarias y prepotentes que se proyectan al escribir. Te agradezco las ayudas anteriores y me disculpo por haberte hecho perder tiempo (como mencionas). Antes de largarme de aquí te doy un consejo: Aprende tú lo elemental de humildad y de tolerancia ante el desconocimiento de otros, porque en algún momento también fue tu desconocimiento. Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear consulta a partir de selección de campos mediante formulario

Publicado por Anonimo (3316 intervenciones) el 24/05/2021 17:00:04
A los veinte años de curiosidad las respuestas que devuelves los convierten en minutos y hacen creer que solo el que responde tiene interés en llegar a una solución.

Para intentar llegar a esa solución se han plantado varias alternativas y las respuestas han sido confusas y dispares entremezclando alternativas y sin indicar que se ha utilizado y donde.

El foro es libre, eso si, cada vez abusa mas de la publicidad, lo que lo hace menos atractivo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ezel
Val: 62
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Crear consulta a partir de selección de campos mediante formulario

Publicado por Ezel (24 intervenciones) el 05/06/2021 05:03:23
Lo he logrado, desde hace varios días; y me disculpo por no haber compartido antes la solución con ustedes, pero como soy solo un aficionado, puede que hasta me cueste trabajo explicar. Pude incluso retomar la idea inicial de generar directamente una especie de informe dinámico, a partir de activar o no varios CheckBox ubicados en un formulario.
Trataré de ir a lo esencial:
El informe a obtener es una relación de personas y varios de sus datos (estas serían las opciones) con apariencia de tabla. Al activar cada CheckBox se hace visible un TextBox contiguo con un valor numérico, que será el ancho de cada columna en el informe. Si el correspondiente CheckBox no está marcado, el TextBox asume el valor de cero (0), ello mediante algo como esto:
1
2
3
4
5
6
7
8
9
Private Sub Opc1_Click ()
If .Opc1 <> 0 Then
    .Opc1Ancho.Visible = True
    .Opc1Ancho = 1.4 'Este valor varía en para cada campo
    Else
    .Opc1Ancho.Visible = False
    .Opc1Ancho = 0
End If
End Sub
Cada uno de estos TextBox tienen la opción de modificar su valor, para aumentar o disminuir el ancho de cada columna en el informe. A este procedimiento de aumentar o disminuir le incluí unos botones que establecen +0.1 ó -0.1 (según el caso) en el TextBox (no ahondaré en esta parte para no aburrirlos).
Una vez definido esto pasamos al informe, en el evento Format de cada una de sus secciones donde hay campos (Encabezados de Grupo y Detalle) paso a definir, en las propiedades de cada campo, su ancho y su posición izquierda, de esta manera:
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Detalle_Format(Cancel As Integer, FormatCount As Integer)
.Campo1.Width = Forms!Formulario1!Opc1Ancho * 567
.Campo2.Width = Forms!Formulario1!Opc2Ancho * 567
.Campo3.Width = Forms!Formulario1!Opc3Ancho * 567
.Campo4.Width = Forms!Formulario1!Opc4Ancho * 567
……
'Multiplico por 567 para convertir cm a twips
'Para definir la posición izquierda de cada campo, asumo que es la suma del ancho de los campos que le anteceden a la izquierda, de esta manera sería:
.Campo2.Left = .Campo1.Width
.Campo3.Left = .Campo1.Width + .Campo2.Width
.Campo4.Left = .Campo1.Width + .Campo2.Width + .Campo3.Width
End Sub

Le he incluido al formulario un mecanismo que alerta cuando la suma de todos los "anchos" de columna supera las dimensiones de la página, ello en el evento AfterUpdate de cada TextBox y en los eventos Click de los CheckBox, en todos los casos compara la suma de todos los TextBox con las dimensiones de la hoja (previamente calculadas y declaradas) y si dicha suma es superior al tamaño de la hoja, muestra un texto e inhabilita el comando de abrir el informe.
Con esto obtengo lo que necesito. Estoy seguro de que existen otras formas más novedosas pero esta fue la que logré aplicando mis escasos conocimientos y me place compartir con ustedes. Atento a sus sugerencias u observaciones. Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar