Access - Selección múltiple criterio de consulta

   
Vista:

Selección múltiple criterio de consulta

Publicado por Conrrad69 (77 intervenciones) el 14/03/2012 20:31:32
Hola. Os expongo mi problema a ver si me pueden echar un cabo:

Una consulta, que uno de sus campos tiene como criterio un cuadro de lista de un formulario: "[Formularios]![F_Informe]![Departamento]" que almacena un id numérico

Ahora se me presenta la necesidad de hacer una selección múltiple en ese cuadro de lista y para ello me he creado otro cuadro de texto "DepartamentoSeleccion" donde, con el siguiente código, guardo los ítems seleccionados:

***************************************************
Dim i As Integer, _
strCadena As String
For i = 0 To Me.Departamento.ListCount - 1
If Me.Departamento.Selected(i) Then
strCadena = strCadena & Me.Departamento.Column(0, i) & " O "
End If
Next i
Me.DepartamentoSeleccion = Left(strCadena, Len(strCadena) - 3)
************************************************************
Por lo que en el nuevo cuadro de texto, seleccionando dos ítems, tendría algo como "1 O 4" sin las comillas.

Ahora el criterio de la consulta apunta a "[Formularios]![F_Informe]![DepartamentoSeleccion]"

Esto solo me funciona si tengo seleccionado un solo intems pero si tengo seleccionado mas de uno me dice que la expresión no está bien escrita o es muy compleja para evaluarse. Yo llegué a la conclusión, por lo que se ve errónea, de que tal cual me iba a funcionar porque si en la consulta sustituyo el criterio "[Formularios]![F_Informe]![DepartamentoSeleccion]" por el texto "1 O 4" sin las comillas, funciona perfectamente pero si apunto al formulario me dice que nanai.

¿Se os ocurre que es lo que estoy haciendo mal o algún método alternativo para poder resolverlo?
Gracias.
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
Imágen de perfil de Neckkito

Selección múltiple criterio de consulta

Publicado por Neckkito (1104 intervenciones) el 16/03/2012 13:48:57
Hola!

Te explico:

Cuando tú directamente escribes en la consulta y utilizas O Access entiende que ese O es un operador lógico, y por eso te funciona sin problemas.

Cuando tú "traes" un valor a una consulta ese valor es interpretado, en su totalidad, como texto (a no ser que sea un único número, en cuyo caso Access sobreentiende que es un valor numérico). Es decir, que Access intenta filtrar por

"1 O 4" -> Todo es un texto

en vez de

1 (valor) O (como operador lógico) 4 (valor)

Y lógicamente te da el error que comentas.

Hasta donde yo sé no es posible hacerlo directamente desde el objeto consulta, sino que debes hacerlo por programación.

Para indicarte cómo se hace necesitaría saber:
- El nombre de la consulta
- La estructura de la consulta

Para indicarme la estructura de la consulta haz una cosa: mete el filtro que no te funciona (el criterio que comentas en tu pregunta), pon la consulta en vista SQL y me la pegas aquí.

Ya me dirás.

Un saludo,

Neckkito (... http://neckkito.eu5.org ...)
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

Selección múltiple criterio de consulta

Publicado por Conrrad69 (77 intervenciones) el 16/03/2012 14:18:45
Hola Neckkito, por código se hacerlo pero no quería pasar por ahi, a pesar de que el 90% de mi programa está diseñado en VBA, porque la consulta es mucho mas compleja de lo que he puesto. Quiero decir que es una consulta intermedia, que se nutre de otras y al mismo tiempo sirve de origen para una última. Es un poco complicado, por ese motivo, me era mucho mas sencillo trabajarlo desde la vista diseño lo cual me facilita muchiiiiiiisimo las cosas, por lo menos en este caso.
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

Selección múltiple criterio de consulta

Publicado por Conrrad69 (77 intervenciones) el 16/03/2012 14:20:21
Bueno, cuando digo que se hacerlo me refiero a que sé abrir un informe y como origen darle la consulta por VBA y aplicarle los filtros utilizando variables.

Si te referías a otra cosa dímelo y te pego 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
Imágen de perfil de Neckkito

Selección múltiple criterio de consulta

Publicado por Neckkito (1104 intervenciones) el 16/03/2012 18:08:09
Hola!
Si, como dices, la cosa es tan complicada, pues... no sé. Cierto es que hay muchas probabilidades de que "algo" no funcione, pero, por probar... (en una copia de tu BD, por supuesto )
Si quieres pégame la SQL, y, según como sea, intentamos una cosa. No te olvides de ponerme el nombre de la consulta.
Ya me dirás.

Neckkito
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

Selección múltiple criterio de consulta

Publicado por Conrrad69 (77 intervenciones) el 16/03/2012 21:12:56
Bueno, como la consulta también la hice en el foro del Búho "http://www.mvp-access.com/foro/forum_posts.asp?TID=72685&PID=434982#434982" , allí he encontrado la respuesta. Pego aquí la solución que he tomado y que, a falta de hacer unas pruebas mas exhaustivas por si acaso, me está funcionando perfectamente.

"En el criterio de la consulta, del campo departamento, he puesto esto "EnCad([Formularios]![F_Informe]![DepartamentoSeleccion];[departamento])<>0" claro está, sin las comillas y nótese la diferencia entre la instrucción en ingles y la traducción que access me hace al español al usarla en vista diseño, así como la sustitución de la coma, por el punto y coma. De momento esto me funciona a la perfección. "

Gracias a todos.
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

Selección múltiple criterio de consulta

Publicado por Conrrad69 (77 intervenciones) el 17/03/2012 16:07:56
Y ahora os pongo toda la solución explicada detalladamente tal y como la he puesto en el otro foro:

"Bueno, ahora ya lo he comprendido. No era capaz de verlo porque la línea que he utilizado la puse en el criterio del campo departamento, reitero en vista diseño de la consulta y, por mas vueltas que le di, si la instrucción devuelve un nº de posición de una cadena de texto, ¿que tiene que ver ese nº con los id de mi campo "departamento"? indudablemente no lo vi el filtro por ningún lado.

Lo he visto claro en el momento que he guardado la consulta y al volver a abrirla en vista diseño, Access había hecho las correcciones correspondientes:

1- Al campo "departamento" le había quitado el criterio que he puesto.
2- El criterio que yo he puesto lo ha convertido en un nuevo campo calculado y, muy importante, como criterio de ese campo calculado, ha puesto el "<>0".

Y ahí es cuando lo he entendido todo, la función devuelve un nº que indica el número de caracteres desde el principio del texto hasta que aparece el número buscado, o sea el código del departamento del registro actual, en una cadena de texto colocada en un formulario, que puede tener uno, dos o cuarenta números, recordad que puedo hacer selección múltiple pero, si NO ENCUENTRA EL NUMERO BUSCADO en la cadena de caracteres, la función devuelve el Nº 0, y esa es la propiedad de la que nos aprovechamos en el campo calculado indicándole, como criterio, que solo muestre los registros donde este campo calculado sean distintos de cero. Voilá, y se hizo la magia de Access, hemos aprovechado una función y su peculiar forma de trabajar para hacer mi filtro, es como la navaja suiza.

Reexplico todo, para el que le pueda servir y no se líe siguiendo el hilo, mas de lo que me he liado yo ;).

El problema:

Una consulta que la trabajo EN VISTA DISEÑO sin VBA, con el campo idDepartamento, que lo filtra cogiendo el departamento desde un formulario donde tengo un CUADRO COMBINADO con los departamentos. Ahora se me pide, poder seleccionar mas de un departamento a la vez para filtrar la consulta.

Solución:

1- Cambio el CUADRO COMBINADO a CUADRO DE LISTA y activo su propiedad para permitir selección múltiple.

2- Al hacer eso, el CUADRO DE LISTA ya no sirve como origen de la consulta, puesto que al seleccionar mas de un departamento, el cuadro de lista se comporta de forma distinta y la consulta no reconoce la selección.

3- La solución es crear un CUADRO DE TEXTO junto al cuadro de lista y mediante código, hacer que se copien en él los distintos números que se van seleccionando en el cuadro de lista. El código es el siguiente:

Private Sub DepartamentoCuadroLista_Click()
Dim i As Integer, _
strCadena As String

For i = 0 To Me.DepartamentoCuadroLista.ListCount - 1
If Me.DepartamentoCuadroLista.Selected(i) Then
strCadena = strCadena & "(" & Me.DepartamentoCuadroLista.Column(0, i) & ")"
End If
Next i
Me.CuadroTextoZona = Left(strCadena, Len(strCadena))
End Sub

Este código, si en el cuadro de lista selecciono, por ejemplo los departamentos 3 y 6 al mismo tiempo, en el cuadro de texto me pone (3)(6).

4 - Ahora la consulta, debe filtrar (3)(6) sobre un campo numérico "departamento" por lo que es complicado poner el criterio sobre el mismo campo.

5 - Creamos, en la consulta, un CAMPO CALCULADO utilizando la función "Encad" de la siguiente manera:

EnCad([Formularios]![F_Informe]![CuadroTextoZona];"(" & [IdZona] & ")")

este campo calculado, si el registro en el que está, como departamento es el 6, buscará dentro del cuadro de texto el "texto" (6) y si lo encuentra devolverá un nº (QUE NOS ES INDIFERENTE) y si no lo encuentra devuelve el 0.

6 - Como criterio de ese campo calculado hemos puesto <>0, de forma que si el numero buscado no está y la función devuelve 0 ese registro no me lo muestra.


Como observación final diré que los números, tanto en el campo calculado de la consulta, como en el cuadro de texto los he encerrado entre paréntesis, que podía haber sido cualquier otra cosa, por si el IdDepartamento pasa del 9, imagínaos que quiero buscar el departamento 1 y el 10, si no los distingo, en el cuadro de texto tendría 110 y no haría su función correctamente, de esta manera busca el (1) o el (10) con todos sus caracteres.

Lo que, a priori, se me había vuelto un problema de dimensiones incalculables, resulta que tenía una solución de lo mas ingeniosa y sencilla que era lo que andaba buscando.

Mis agradecimientos a todos."
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

Selección múltiple criterio de consulta

Publicado por Conrrad69 (77 intervenciones) el 17/03/2012 19:00:13
Recopio para corregir un par de erratas:

Y ahora os pongo toda la solución explicada detalladamente tal y como la he puesto en el otro foro:

"Bueno, ahora ya lo he comprendido. No era capaz de verlo porque la línea que he utilizado la puse en el criterio del campo departamento, reitero en vista diseño de la consulta y, por mas vueltas que le di, si la instrucción devuelve un nº de posición de una cadena de texto, ¿que tiene que ver ese nº con los id de mi campo "departamento"? indudablemente no lo vi el filtro por ningún lado.

Lo he visto claro en el momento que he guardado la consulta y al volver a abrirla en vista diseño, Access había hecho las correcciones correspondientes:

1- Al campo "departamento" le había quitado el criterio que he puesto.
2- El criterio que yo he puesto lo ha convertido en un nuevo campo calculado y, muy importante, como criterio de ese campo calculado, ha puesto el "<>0".

Y ahí es cuando lo he entendido todo, la función devuelve un nº que indica el número de caracteres desde el principio del texto hasta que aparece el número buscado, o sea el código del departamento del registro actual, en una cadena de texto colocada en un formulario, que puede tener uno, dos o cuarenta números, recordad que puedo hacer selección múltiple pero, si NO ENCUENTRA EL NUMERO BUSCADO en la cadena de caracteres, la función devuelve el Nº 0, y esa es la propiedad de la que nos aprovechamos en el campo calculado indicándole, como criterio, que solo muestre los registros donde este campo calculado sean distintos de cero. Voilá, y se hizo la magia de Access, hemos aprovechado una función y su peculiar forma de trabajar para hacer mi filtro, es como la navaja suiza.

Reexplico todo, para el que le pueda servir y no se líe siguiendo el hilo, mas de lo que me he liado yo ;).

El problema:

Una consulta que la trabajo EN VISTA DISEÑO sin VBA, con el campo idDepartamento, que lo filtra cogiendo el departamento desde un formulario donde tengo un CUADRO COMBINADO con los departamentos. Ahora se me pide, poder seleccionar mas de un departamento a la vez para filtrar la consulta.

Solución:

1- Cambio el CUADRO COMBINADO a CUADRO DE LISTA y activo su propiedad para permitir selección múltiple.

2- Al hacer eso, el CUADRO DE LISTA ya no sirve como origen de la consulta, puesto que al seleccionar mas de un departamento, el cuadro de lista se comporta de forma distinta y la consulta no reconoce la selección.

3- La solución es crear un CUADRO DE TEXTO junto al cuadro de lista y mediante código, hacer que se copien en él los distintos números que se van seleccionando en el cuadro de lista. El código es el siguiente:

Private Sub DepartamentoCuadroLista_Click()
Dim i As Integer, _
strCadena As String

For i = 0 To Me.DepartamentoCuadroLista.ListCount - 1
If Me.DepartamentoCuadroLista.Selected(i) Then
strCadena = strCadena & "(" & Me.DepartamentoCuadroLista.Column(0, i) & ")"
End If
Next i
Me.CuadroTextoDepartamento = Left(strCadena, Len(strCadena))
End Sub

Este código, si en el cuadro de lista selecciono, por ejemplo los departamentos 3 y 6 al mismo tiempo, en el cuadro de texto me pone (3)(6).

4 - Ahora la consulta, debe filtrar (3)(6) sobre un campo numérico "departamento" por lo que es complicado poner el criterio sobre el mismo campo.

5 - Creamos, en la consulta, un CAMPO CALCULADO utilizando la función "Encad" de la siguiente manera:

EnCad([Formularios]![F_Informe]![CuadroTextoDepartamento];"(" & [IdDepartamento] & ")")

este campo calculado, si el registro en el que está, como departamento es el 6, buscará dentro del cuadro de texto el "texto" (6) y si lo encuentra devolverá un nº (QUE NOS ES INDIFERENTE) y si no lo encuentra devuelve el 0.

6 - Como criterio de ese campo calculado hemos puesto <>0, de forma que si el numero buscado no está y la función devuelve 0 ese registro no me lo muestra.


Como observación final diré que los números, tanto en el campo calculado de la consulta, como en el cuadro de texto los he encerrado entre paréntesis, que podía haber sido cualquier otra cosa, por si el IdDepartamento pasa del 9, imagínaos que quiero buscar el departamento 1 y el 10, si no los distingo, en el cuadro de texto tendría 110 y no haría su función correctamente, de esta manera busca el (1) o el (10) con todos sus caracteres.

Lo que, a priori, se me había vuelto un problema de dimensiones incalculables, resulta que tenía una solución de lo mas ingeniosa y sencilla que era lo que andaba buscando.

Mis agradecimientos a todos."
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

Selección múltiple criterio de consulta

Publicado por Me1000 (1 intervención) el 15/01/2016 10:26:37
A Conrrad69. Se me había ocurrido lo de la caja de texto y ya había hecho un código pero utilicé tu código porque es buena idea lo de poner paréntesis a cada id, el resto me ha sido muy útil, así que mil gracias a ti.
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

Selección múltiple criterio de consulta

Publicado por memo (1 intervención) el 01/12/2016 21:24:03
Me registre para darte las gracias. La respuesta más sencilla de mi búsqueda en la Web.
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