Access - Seleccion multiple en cuadro de lista

 
Vista:

Seleccion multiple en cuadro de lista

Publicado por Nasic (38 intervenciones) el 24/05/2022 12:48:12
Hola a todos,

tengo un cuadro de lista cuyo contenido me lo saca de una consulta, y al seleccionar la opcion deseada, me filtra otra consulta mas general y me refleja los resultados en un formulario principal.

Hasta aqui bien, siempre que el cuadro de lista tenga seleccion multiple en "ninguna"

En el momento en el que cambio ese cuadro de lista a "seleccion multiple simple", la consulta general del formulario como que ya no me funciona, no me ejecuta la consulta y por lo tanto no arroja resultados, mientras que simplemente cambiandolo a "ninguna seleccion multiple", el formulario ya me funciona correctamente...

Tengo que hacer algo mas?

Gracias por vuestra ayuda :)
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

Seleccion multiple en cuadro de lista

Publicado por Anonimo (3316 intervenciones) el 24/05/2022 16:59:13
Sin selección múltiple, al seleccionar uno de los elementos del cuadro de lista, Access 'sabe' cual es.

Con selección múltiple hay mas de un elemento seleccionado (independiente de que solo se seleccione uno) por lo que Access no sabe que hacer y hay que programar la solución..

Los cuadros de lista con la selección múltiple activada 'marcan' los elementos activando individualmente su propiedad 'Seleccionado'.
Se utiliza esa propiedad para crear una lista de elementos (los seleccionados) y hay que modificar la consulta para que utilice la lista en lugar de la opción de un único elemento.

Básicamente es cambiar:
.- Único elemento ==> ABC = xxxx
.- Mas de un elemento ==> ABC In ( LISTA_DE_ELEMENTOS )

Hay otra opción, repetir el filtro por cada elemento:

... Abc = xxx OR Abc = yyyy OR Abc = zzz
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

Seleccion multiple en cuadro de lista

Publicado por Nasic (38 intervenciones) el 24/05/2022 19:19:24
Gracias por la respuesta, pero me vas a disculpar... porque no me he enterado de mucho. Mis pinitos con access son escasos y muy de cuando en cuando, por lo que algunos conceptos se me enfrian..

te refieres a poner algun criterio en la consulta?

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

Seleccion multiple en cuadro de lista

Publicado por Anonimo (3316 intervenciones) el 24/05/2022 20:35:33
Tras leer nuevamente el post inicial, no me queda claro que es lo que se pregunta.

Si la pregunta es que se debe hacer cuando se obtienen estos resultados:
A.- Funciona correctamente si el cuadro de lista tiene la opción de selección múltiple desactivada
B.- Deja de funcionar si el cuadro de lista tiene la opción de selección múltiple activada

Creo que se responde sola ....
------------------------

Digamos que para utilizar la 'selección múltiple' se requiere A + B:
A.- Tener la necesidad imperiosa de utilizar esa opción
B.- Conocer como obtener el contenido seleccionado en el cuadro de lista.

Una vez aclarado este punto, seria el momento de plantearse como utilizar lo obtenido tras procesar el cuadro de lista.

Por cierto, si todo funciona como se desea con la selección múltiple desactivada ¿para que complicar lo sencillo?
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

Seleccion multiple en cuadro de lista

Publicado por Nasic (38 intervenciones) el 25/05/2022 08:48:09
Buenas

A ver si me explico.

Tengo un cuadro de lista 1 con una serie de opciones, Y luego un cuadro de lista 2 que en base a lo que seleccione en el cuadro 1, me muestra lo correspondiente a través de una consulta.

Por ejemplo, si selecciono “bancada fija” en el cuadro 1, el cuadro 2 me muestra las opciones “BS, BM, etc”. Por otro lado si selecciono “montante móvil” en el cuadro 1, el cuadro 2 me muestra las opciones “MM, ML, etc”.

Todo esto con la selección multiple del cuadro 1 desactivada.

Si activo la selección multiple “simple” del cuadro 1, me permite seleccionar varias opciones, pero el cuadro 2 no me muestra nada, y mi intención es que me muestre la suma de ambas opciones. Es decir, si en el cuadro 1 selecciono “bancada fija” y “montante movil”, que el cuadro 2 me muestre “BS, BM…. MM… ML, etc”.

Pero no se como hacerlo. Creo que podria hacerlo con otro sistema diferente al de los cuadros de lista (como checkboxes o algo asi), pero me gusta mas el formato de los cuadros de lista.

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

Seleccion multiple en cuadro de lista

Publicado por Anonimo (3316 intervenciones) el 25/05/2022 22:08:54
Lo que se esta planteando (en su formato selección múltiple = false) se le conoce como 'combos en cascada'.

Si se activa la selección múltiple en el cuadro_1, el objeto (el cuadro de lista o la referencia al mismo) no devolverá nada (no puede decidir cual).

Para obtener el conjunto de elementos seleccionados hay que utilizar código y se necesita conocer la referencia (si es numérica o alfanumérica), por ser imprescindible para generar el conjunto de datos que condicionaran el contenido del cuadro_2.

Obtengamos los elementos seleccionados del cuadro_1:
(Aplico el código en el evento Exit del objeto)

1
2
3
4
5
6
7
8
9
Private Sub cuadro_1_Exit(Cancel As Integer)
Dim NN, Datos$
For Each NN In Me.Lista_1.ItemsSelected
    If Datos <> "" Then Datos = Datos & ","
    Datos = Datos & "'" & Me.cuadro_1.ItemData(NN) & "'"  ' si el dato es alfanumérico
    Datos = Datos & Me.cuadro_1.ItemData(NN)   ' si el dato es numérico
    Next NN
Me.cuadro_2.RowSource = "Select Campo1, Campo2, Campo3 From TABLA_1 Where REFERENTE In(" & Datos & ")"
End Sub

Se renueva el contenido del otro cuadro de lista (NOTA: la SQL es de libre creación), lo interesante esta en que se sustituye la supuesta condición:

1
...... Where Referente = Me.cuadro_1  (opción selección múltiple OFF)
Por
1
......  Where REFERENTE In(" & Datos & ")"  (opción selección múltiple ON)
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

Seleccion multiple en cuadro de lista

Publicado por Nasic (38 intervenciones) el 26/05/2022 08:45:05
Me vas a disculpar pero no consigo nada.

No se donde tengo que colocar algunas partes de ese codigo. La primera parte en la parte del evento exit, si. pero no se que tengo que modificar para adaptarlo a mi caso.

Por un lado, en la primera parte del código, cuando haces referencia a "Lista_1, cuadro_1 y TABLA_1" no se si en realidad haces referencia a lo mismo...

Y por otro lado, la parte de abajo, el "Where REFERENCE...." no se donde tengo que colocarlo.

Si te sirve de ayuda, el nombre de mi primer cuadro es "TIPO_MAQUINA", y el nombre del segundo cuadro se llama "MODELO". Y son datos alfanumericos, entiendo yo, porque son palabras sin numeros.

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

Seleccion multiple en cuadro de lista

Publicado por Anonimo (3316 intervenciones) el 26/05/2022 10:17:50
Para poder llegar a un destino se necesitan datos concretos y aclarar puntos.

Numérico = tipo de dato que representa un valor único (independiente de la cantidad de caracteres con los que se representa) esto es un NUMERO

Alfanumérico = Tipo de dato que admite caracteres alfabéticos, numéricos y símbolos que se interpretan como conjuntos, vulgarmente se le conoce como 'texto'.

Lista_1 ==> "TIPO_MAQUINA"
Lista_2 ==> "MODELO"

Campo1, ...Campo3 + Tabla1 ==> Se supone que es el origen de datos para 'Modelo' por eso la acotación: (NOTA: la SQL es de libre creación)

Para generar código que funcione es necesario (imprescindible) conocer todos los detalles, en VBA no hay asistente que ayude si algo no esta bien diseñado, si las ordenes son correctas (Access las entiende) las ejecutara aunque la orden sea tirarse desde la terraza a la piscina (y este vacía).

.- Cuantas columnas hay en TIPO_MAQUINA, nombres y contenido para poder utilizar la que nos interese (si el origen es una consulta, se entra en modo diseño, se la pone en su 'Vista SQL' y se copia/pega el contenido ...)

.- Lo mismo con el cuadro de lista MODELO ya que se tiene que regenerar con cada modificación que se haga en TIPO_MAQUINA.

.- Añadir cualquier información/detalle que sea interesante para llegar al destino por el camino mas corto.

Un comentario adicional, si se van a 'juntar' elementos dispares (de “bancada fija” y “montante movil”) en una misma lista que sean compatibles y no de lugar a darle unos zapatos a quien necesita un sombrero.
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

Seleccion multiple en cuadro de lista

Publicado por Nasic (38 intervenciones) el 26/05/2022 13:51:24
Hola.

El cuadro_1 (Nombre: TIPO_MAQUINA) me muestra los datos de una consulta realizada a una tabla general. En esa consulta que se llama “TIPO_MAQUINA_Consulta”, me aparecen dos columnas (Orden y TIPO_MAQUINA (coincide el nombre de la columna con el nombre del Cuadro_1).

El cuadro_2 (Nombre: MODELO), me muestra los datos de una consulta realizada sobre una tabla general, pero incluyendo como criterio la opción elegida en el cuadro_1. En esta consulta (que se llama MODELO_Consulta) tengo 3 columnas, (Orden, MODELO (coincide el nombre de la columna con el nombre del Cuadro_2) y TIPO MAQUINA).

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

Seleccion multiple en cuadro de lista

Publicado por Anonimo (3316 intervenciones) el 26/05/2022 14:38:28
Vamos a trabajar en VBA y SQL, esto es: de forma oculta, solo se utilizaran los formularios y sus objetos para presentar resultados y si es necesario interactuar con ellos.

Proporciona más información la consulta en su 'vista SQL' que su descripción física.

De los objetos cuadro de lista(Tipo_Maquina + Modelo) a los que se le asignan las consultas como origen de datos solo interesan detalles:

.- Cuantas columnas tiene (en sus propiedades pestaña FORMATO)
.- Cual de ellas es la dependiente (en sus propiedades pestaña DATOS)
(su orden será el que venga impuesto por la consulta aplicada como origen de datos).

Para ver la consulta en el formato que la interpretara Access (formato SQL) basta que en modo diseño se seleccione en la barra de menú el icono 'Vista' y en el 'Vista SQL'.

Se abrirá una ventana con texto, se selecciona todo el, se copia y se publica (esta es la verdadera consulta, lo otro es el asistente para crearlas en modo grafico fácil, cómodo y fiel pero no indispensable).
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

Seleccion multiple en cuadro de lista

Publicado por Nasic (38 intervenciones) el 26/05/2022 14:45:59
Por partes,

La consulta "TIPO MAQUINA Consulta" en formato SQL

SELECT Min(INDICE.Orden) AS MínDeOrden, INDICE.TIPO_MAQUINA
FROM INDICE
GROUP BY INDICE.TIPO_MAQUINA
ORDER BY Min(INDICE.Orden);

La Consulta "MODELO Consulta" en formato SQL

SELECT INDICE.MODELO, INDICE.Orden
FROM INDICE
WHERE (((INDICE.TIPO_MAQUINA)=[Formularios]![INDEX]![TIPO MAQUINA]))
ORDER BY INDICE.Orden;


En cuanto al numero de columnas de los cuadros en el formulario, en ambos cuadros el numero de columnas es 1, y en ambos casos las columnas dependientes tambien son 1.

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

Seleccion multiple en cuadro de lista

Publicado por Anonimo (3316 intervenciones) el 26/05/2022 18:40:28
Hay detalles que necesitarían aclaraciones como el numero de columnas en los cuadros de lista y sus orígenes de datos.

Propongo lo siguiente en base a los datos aportados

En el cuadro de lista Tipo_Maquina en sus propiedades, pestaña datos y como 'origen de la fila' copiar y pegar lo siguiente:
1
SELECT DISTINCT TIPO_MAQUINA FROM INDICE ORDER BY TIPO_MAQUINA;

Con eso se obtiene un subconjunto de valores 'tipo de maquina' sin repeticiones como origen para el cuadro de lista.

En las propiedades de Tipo_Maquina en su pestaña EVENTOS seleccionar 'Al perder el enfoque' y seleccionar en el desplegable [procedimiento de evento], tras ello clikc en los puntitos y se abre la ventana de programación mostrando esto:

1
2
3
4
5
6
Private Sub Tipo_Maquina_LostFocus()
 
 
 
 
End Sub

Copiar lo que viene a continuación y pegarlo como contenido:

1
2
3
4
5
6
7
Dim NN, Datos$
If Me.Tipo_Maquina.ItemsSelected.Count = 0 Then MsgBox "Seleccione un Tipo de maquina": Exit Sub
For Each NN In Me.Tipo_Maquina.ItemsSelected
    If Datos <> "" Then Datos = Datos & ","
    Datos = Datos & "'" & Me.Tipo_Maquina.ItemData(NN) & "'"
    Next NN
Me.Modelo.RowSource = "Select modelo From Indice Where tipo_maquina In(" & Datos & ")"


Deberá quedar algo así:

1
2
3
4
5
6
7
8
9
Private Sub Tipo_Maquina_LostFocus()
Dim NN, Datos$
If Me.Tipo_Maquina.ItemsSelected.Count = 0 Then MsgBox "Seleccione un Tipo de maquina": Exit Sub
For Each NN In Me.Tipo_Maquina.ItemsSelected
    If Datos <> "" Then Datos = Datos & ","
    Datos = Datos & "'" & Me.Tipo_Maquina.ItemData(NN) & "'"
    Next NN
Me.Modelo.RowSource = "Select modelo From Indice Where tipo_maquina In(" & Datos & ")"
End Sub

En la ventana de VBA, en su parte superior click en 'DEPURACION' y después en 'COMPILAR DATABASE'

No deberá dar ningún error así que se guarda y se verifica si es lo que se desea obtener

Se ha partido de los supuestos:
Existe una tabla de nombre 'INDICE'
En ella los campos ORDEN + TIPO_MAQUINA + MODELO

En el formulario dos objetos 'Cuadro de lista' con los nombres TIPO_MAQUINA + MODELO
TIPO_MAQUINA solo tiene una columna y activada su propiedad selección múltiple con la opción SIMPLE, como origen de la fila la SQL arriba descrita.
Modelo solo tiene una columna, no tiene origen de la fila porque se le aplica dinámicamente tras salir de TIPO_MAQUINA

Espero que esto cumpla las espectativas o al menos avance un paso para lograrlo.
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

Seleccion multiple en cuadro de lista

Publicado por Nasic (38 intervenciones) el 27/05/2022 09:51:50
De verdad que es acojonante lo vuestro… :P

Mil gracias. El proceso funciona correctamente.

Ahora viene el segundo paso…

En el cuadro 2, también me gustaría poder hacer una selección múltiple y que el formulario principal me mostrase las entradas en lista de las diferentes opciones que elija en el cuadro 2.

He intentado “copiar” el proceso para ese cuadro 2, pero no doy con la tecla….

Alguna idea?

Muchas 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

Seleccion multiple en cuadro de lista

Publicado por Anonimo (3316 intervenciones) el 27/05/2022 10:35:38
En principio no veo inconveniente en aplicar el método en MODELO, lo que no veo claro es lo que se pretende obtener.

Para aplicarlo en MODELO lo que variara es lo marcado en negrita


Dim NN, Datos$
If Me.Tipo_Maquina.ItemsSelected.Count = 0 Then MsgBox "Seleccione un Tipo de maquina": Exit Sub
For Each NN In Me.Tipo_Maquina.ItemsSelected
If Datos <> "" Then Datos = Datos & ","
Datos = Datos & "'" & Me.Tipo_Maquina.ItemData(NN) & "'"
Next NN
¿Qué hacemos con la variable 'Datos' y su contenido?, al salir de la subfunción se destruirá (dejara de existir, su ámbito es la función)
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

Seleccion multiple en cuadro de lista

Publicado por Nasic (38 intervenciones) el 27/05/2022 11:14:59
Si, es practicamente lo que habia hecho..

Pero me surgen algunas dudas,

- NO se si en "Origen de la fila" del Cuadro 2, tengo que poner algo similar a la primera parte, o dejarlo en vacio.

- por otro lado, el formulario principal me muestra una serie de entradas basada en una consulta que se llama "GLOBAL", si sirve de ayuda...

Graciasss
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

Seleccion multiple en cuadro de lista

Publicado por Anonimo (3316 intervenciones) el 27/05/2022 11:45:55
El origen de la fila para el cuadro 2 (alias MODELO) se le asigna en el evento perder el foco de cuadro 1 (alias Tipo_Maquina) y si funciona ¿qué sentido tiene cambiarlo?.

Si se desea añadir alguna columna se necesita modificar el diseño del cuadro de lista para que admita mas de una columna y poder asignarle datos.

Lo que tiene que encontrar su 'destino' es la lista que se crea y guarda en la variable DATOS sin perder de vsta que esa variable y su contenido 'desaparecerá' cuando se finalice el proceso SUB en el que se la declara.

En Tipo_Maquina se utiliza para recrear el contenido de MODELO, lo que se tiene que aclarar es que hacer (mientras la variable DATOS 'este viva') con la variable, cuyo contenido son los elementos seleccionados en MODELO.
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