Access
  • Home

Filtros en Access 2007

  • By chea
  • Feb-2-2009
  • Sin categoría
  • 12 Comments.

Access 2007 incorpora importantes herramientas para facilitar que el usuario pueda realizar filtros complejos sobre formularios, incluso sobre informes, de una manera manera muy sencilla, tanto que uno se pregunta si merece la pena continuar con los procedimientos que, durante años, hemos ido añadiendo a nuestras aplicaciones para filtrar.

Para muestra vale un botón (el de filtro): 

image

image

Con sólo posicionarnos en un campo de un formulario, en este caso de fecha, y pulsar el botón de Filtro que encontramos en la Cinta de Opciones, Access despliega una abrumadora relación de opciones para filtrar el formulario por el campo en el que nos encontramos.

Las opciones que se despliegan varían según el campo por el que vamos a filtrar sea numérico, de texto o de fecha.

 

Varias maneras de acceder a las herramientas de filtro

Usando el menú contextual

Pulsando con el botón derecho del ratón sobre un control del formulario, se despliega un menú contextual que, además de las opciones de edición y orden, muestra las de filtro. Son muy parecidas a las que hemos visto antes con el botón de filtro de la cinta de opciones, pero falta el combo multivalor y se añade la opción de filtro por selección, es decir, el valor actual del control como opción de filtro igual, distinto, mayor o menor.

image

Dos posibilidades de herramientas de filtro casi iguales, pero distintas. El caso es que el menú contextual no está disponible con la runtime de Access y el Ribbon no es accesible en los formularios emergentes 🙁

Sin embargo, podemos invocar el menú de filtro (el del Ribbon) posicionándonos el cualquier control y usando el código:

DoCmd.RunCommand acCmdFilterMenu

Y, si lo queremos que se mueste es el menú contextual, podemos usar:

CommandBars("Column Filter").ShowPopup

Usando el Ribbon

En el grupo de la Cinta de Opciones Ordenar y Filtrar, no sólo tenemos el botón de filtro que veíamos antes. Los botones Selección y Avanzadas despliegan una serie de opciones que ya existían en versiones anteriores de Access.

imageimageimage

  • Las opciones de Selección ya existían en versiones anteriores, salvo la última, Entre…, también disponible en el menú contextual y en el botón de filtro, bastante novedosa y útil: muestra un cuadro de diálogo con dos cuadros de texto para indicar los límites de un rango por el que filtrar.

image

La imagen es para un rango de fechas, pero también existe para un rango de números. No existe para texto, aunque para texto hay otras alternativas.

  • Desplegando el botón Avanzadas encontramos Filtro por formulario y Filtro avanzado/Ordenar. Son viejos conocidos de versiones anteriores; el primero presenta el formulario en una vista especial para introducir criterios y el segungo muestra la cuadrícula QBE para editar el text SQL correspondiente al filtro.

Son herramientas mas complicadas de usar que las nuevas de 2007, pero siguen siendo necesarias si queremos manejar cierta complejidad.

Mediante las herramientas del botón de Filtro del Ribbon o del menú contextual, los distintos criterios de filtro se van concatenando con AND sin opciones de usar OR y sin mostrar una vista conjunta de los distintos criterios que se están aplicando. No es necesario elegir entre una y otras, pues se pueden ir complemantando: el filtro que hayamos creado con el menú desplegable podemos editarlo con Filtro por formulario o con Filtro avanzado/Ordenar para hacerlo más complejo.

Alternar el filtrado

Al filtrar, se resalta en naranja un nuevo botón poniendo “Filtrado” en la barra de navegación del formulario :

image

Pulsando sobre él, se desactiva el filtro y cambia el texto del botón a “Sin filtrar”. Si volvemos a pulsar, se vuelve a activar el filtro y a cambiar el texto. Es decir, el botón sirve para alternar la propiedad FilterOn del formulario.

image

Pero aún afina más. Como hemos visto, los criterios de filtro se van acumulando con AND, de manera que un formulario puede estar filtrado por varios criterios; pues bien, ir eliminando selectivamente esos criterios es tan sencillo, como volver a posicionarse sobre el control con el que habíamos filtrado y pulsar de nuevo el botón derecho del ratón, se mostrará entonces una opción en el menú desplegable para quitar ese criterio.

clip_image001[1]

 

Filtros en hojas de datos

Los menús de filtro también están disponibles en las vistas de hojas de datos de tablas y consultas, sin necesidad de que se trata de un subformulario. Además, están directamente accesibles ambos menús de filtro, el contextual y el que veíamos desde el Ribbon, para el primero usando el botón derecho del ratón y, para el segundo, pulsando sobre el pequeño triángulo con un vértice hacia abajo que aparece junto al nombre de cada campo.

imageimage

Al aplicar el filtro, junto nombre del campo que hemos usado aparece un minúsculo icono de filtro

image

Y, si pulsamos en él se despliega el menú de filtro con, entre otras, la opción para quitar el filtro por ese campo.

image

Filtros en informes

Algo sorprendente en Access 2007 es que los informes también pueden filtrarse dinámicamente de la misma manera que hacemos en un formulario. Como veíamos en un artículo anterior, existen Nuevas vistas de informe en Access 2007 distintas de la Vista Preiliminar.

 image image

Si abrimos nuestro infrome como Vista Informe, se presenta de una forma peculiar, sin opciones de impresión o vista previa y sin saltos de página, pero con algunas opciones propias de los formularios, como la posibilidad de seleccionar y copiar texto, etiquetas inteligentes o las opciones de filtro, todas las que hemos visto antes para filtrar informe. Una vez filtrado, podemos imprimirlo directamente utilizando Botón de Office | Imprimir o pasar a la Vista Preliminar desde la opción Vistas del Ribbon.

 

Un poco de código

Menú de filtro en formularios emergentes

La cinta de opciones no está disponible si estamos utilizando un formulario emergente, por lo tanto, no podemos usar el menú de filtro propio de esa cinta, salvo que lo hagamos por código:

Private Sub Filtro_Click()
Dim ctrl As Control
   On Error GoTo Filtro_Click_Error

Set ctrl = Screen.PreviousControl
ctrl.SetFocus
DoCmd.RunCommand acCmdFilterMenu

   On Error GoTo 0
   Exit Sub

Filtro_Click_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Filtro_Click of Documento VBA Form_Detalles de empleados"

End Sub

 

clip_image001image

El mismo botón sirve para filtrar en el formulario principal o en un subformulario. Sólo es cuestión de posicionarse previamente en el campo por el que queremos filtrar

 

Aprender de Access

Resulta un ejercicio interesante ver cómo los menús de filtro de Access construyen los criterios de filtro. Para ello, en un formulario para ensayos añadimos un cuadro de texto txtFiltro y el siguiente código:

Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
Me.txtFiltro = Me.Filter
End Sub

De esta manera, cada vez que apliquemos un filtro, veremos el criterio que se ha generado.

image

(([Productos].[Categoría]="Bebidas")) 
AND ([Productos].[Costo estándar]<=13.5)

 

Observamos que, a medida que vamos filtrando, se van añadiendo cadenas de filtro unidas por AND, lo cual era perfectamente previsible. Claro, que sólo cabe unir los distintos criterior con AND y a lo mejor nos interesa unir alguno con OR. Con un par de líneas nás de código podemos hacer que, si editamos el texto que nos muestra el filtro, éste se convierta en el nuevo filtro de nuestro formulario.

Private Sub txtFiltro_AfterUpdate()
Me.Filter = Me.txtFiltro
Me.FilterOn = True
End Sub

 

Desplegable Multivalor para filtrar

Resulta curioso observar cómo la sintáxis va cambiando según la cantidad y proporción de elementos que vayamos seleccionando para filtrar en el desplegable multivalor del menú de filtro.

image image image image

Las distintas selecciones provocan distintos criterios de filtro según se haya seleccionado un sólo elemento o unos pocos, o todos menos uno o todos menus unos pocos. Los criterios generados son las siguientes.

 

([Empleados ampliados].[Apellidos]="Acevedo")
([Empleados ampliados].[Apellidos] In ("Acevedo","Bonifaz","Jesús Cuesta"))
([Empleados ampliados].[Apellidos]<>"Chaves" Or [Empleados ampliados].[Apellidos] IS Null)
([Empleados ampliados].[Apellidos] Not In ("Chaves","Jesús Cuesta") Or [Empleados ampliados].[Apellidos] IS Null)
 
Filtrando campos multivalor

Nada de todo esto nos resulta novedoso, así que vamos a ver cómo se generan los filtros con campos multivalor, específicos de Access 2007.

image

En el menú contextual de filtro elegimos el valor actual de nuestro campo multivalor: “Contiene Proveedor D; Proveedor F”. Filtramos y vemos que el filtro generado es el siguiente:

([Lookup_Supplier IDs].[Compañía]="Proveedor D" 
AND [Lookup_Supplier IDs].[Compañía]="Proveedor F")

 

LookUP

Es decir, que ha concantenado con AND los distintos valores de nuestro campo multivalor, algo previsible. Sin embargo, si nos fijamos, nuestro campo se llama [Supplier IDs] mientras que el nombre que aparece es [Lookup_Suplier IDs], o sea, lo mismo pero con un “LookUp_” delante. Eso me suena de versiones anteriores utilizando “Filtro por formulario”…

Utilizando la herramienta de filtro “Avanzadas | Filtro avanzado/Ordenar…” vamos a verlo por dentro.

Esa herramienta se encuentra en el Ribbon y, como estamos en un formulario emergente, no podemos acceder a ella, de manera que, o bien quitamos la propiedad Emergente al formulario y seleccionamos la opción correspondiente en el Ribbon…

image

O bien añadimos un botón que llame a la herramienta mediante código:

Private Sub FiltroAvanzado_Click()
DoCmd.RunCommand acCmdAdvancedFilterSort
End Sub

De cualquiera de las dos maneras el resultado será que se muestre el diseñador gráfico de consultas con el filtro actual

image

Observamos que a la tabla origen de nuestro formulario, Productos, se le ha relacionado una tabla o consulta llamada Lookup_Supplier IDs y que coinciden con los campos que se encuentran en el Origen de la Fila del cuadro combinado que usamos para la búsqueda de Id de Proveedores. Recordemos que, para que un campo sea Multivalor, en el diseño de la tabla, en la pestaña “Búsqueda” debemos usar un cuadro combinado con un origen válido y Permitir varios valores.

Por lo tanto, el filtro con Lookup se usa en los campos multivalor porque son cuadros combinados. La sintáxis, si queremos crear nuestro propios criterios con Lookup_ , sería algo así:

([Lookup_NombreControl].[NombreColumnaMostrada]="Criterio filtro")
 
Usando el operador "=" no deja de ser una chorradita, pues para eso podemos buscar directamente por el campo dependiente. Pero si usamos "Like" o cualquier otro operador en su lugar, la cosa cambia, pues el filtro se hace por la columna mostrada que no está en el origen de datos del formulario filtrado. Evidentemente, esto es una gran ventaja a la hora de construir un filtro.
 
Si utilizamos esa sintaxis al montar nuestra propia cadena de filtro, funciona perfectamente, añadiéndole potencia de una forma muy sencilla.
 
En resumen, que es una herramiento muy maja y que funciona muy bien y, sin embargo, no he encontrado nada en la ayuda ni en ningún otro lado. Todo lo que he encontrado, y con ayuda de Emilio Sancha, es este enlace de Allenbrowne que lo usa, para búsquedas, en una aplicación de ejemplo: http://www.allenbrowne.com/AppFindAsUType.html. Prometo que profundizaré en el asunto y publicaré los resultados, aunque todo el mundos sabe ya que, para estas cosas, soy hombre de poca palabra 😉
 
 

ApplyFilter

Entre las novedades en Access 2007 se cita la nueva sintáxis de AppliFilter

Sintaxis anterior

VOID ApplyFilter (OPTIONAL VARIANT FilterName, OPTIONAL VARIANT WhereCondition)

Sintaxis nueva

VOID ApplyFilter (OPTIONAL VARIANT FilterName, OPTIONAL VARIANT WhereCondition, OPTIONAL VARIANT ControlName)

Sencillamente se le ha añadido un parámetro ControlName y, probando, nos encontramos con que sólo es válido el nombre de un control de subformulario o subinforme, por lo que es fácil deducir que sirve para filtrar directamente el subformulario o subinforme desde el principal.

Por ejemplo, si queremos filtrar el subformulario Child22, podemos poner en el formulario principal un botón con el siguiente código.

Private Sub Mibotón_Click()
DoCmd.ApplyFilter , "Transacción='Compra'", "child22"
End Sub

Teniéndolo en mente, esto puede facilitar un poco las cosas en determinadas ocasiones, pero no pasa de ser una insignificancia ¿Para qué se han tomado la molestia? Me imagino que será para facilitar el uso de macros. Las macros ejecutan comandos y, si sólo añadiendo un parámetro, el filtro se puede aplicar a un subformulario, la macro se simplifica notablemente.

Comments

12 Responsesso far

  1. anonymous dice:
    2 febrero, 2009 a las 8:16 pm

    Felicitaciones por el artículo, y aprovechando este espacio os quería comentar un problemilla, desconocimiento o no sé que tengo con Access 07 y no son filtros:

    Cuando en las ‘Opciones de Access’/’Base de datos actual’ quito el check ‘Mostrar panel de exploración’ y además quito los checks ‘Permitir el uso de menús no restringidos’ y ‘Permitir el uso de menús contextuales predeterminados’, el Ribbon cambia y sólo permite usar algunas opciones de las que se presentan, el tema es que las de exportación aparecen ‘disabled’ y no puedo usarlas, he intentado con el Ribbon XML añadir una personalizada a la tabla USysRibbons, etc, etc, y todo funciona bien (está ‘enabled’) hasta que quito las marcas de los permisos de los menús y no sé como conseguir que impidiendo acceder a determinadas partes de los elementos del Ribbon se pueda habilitar la parte de exportación de informes, ya que hay algunas que sí funcionan; si pudiérais echarme alguna idea os lo agradecería.
    Saludos

    Responder
  2. chea dice:
    2 febrero, 2009 a las 8:46 pm

    Aunque el sitio más adecuado para comentarlo sería un foro o un grupo de noticias…

    Creo que lo más sencillo sería crear tu propio Ribbon personalizado que no incluyera las opciones que no deseas. Para que el Ribbon no incluya los valores predeterminados debes poner la línea:


    Responder
  3. anonymous dice:
    4 febrero, 2009 a las 1:45 am

    Una vez mas sobresaliente, chico como te lo curras.
    Saludos.

    Responder
  4. anonymous dice:
    20 mayo, 2009 a las 11:17 pm

    No me había fijado en la potencia de los filtros.
    Es verdad que es impresionante.
    Un saludo.

    Responder
  5. anonymous dice:
    2 julio, 2009 a las 9:43 pm

    El texto brindado es muy bueno, muchas gracias, me ayudo a solucionar elegantemente la suma de un filtrado, un mínimo aporte por parte mia en el item APRENDER DE ACCESS

    Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
    ‘*** Actualizar filtro de datos
    Dim Filtro_Form_SQL As String
    Dim strSQL As String

    Filtro_Form_SQL = Me.Filter
    ‘ *** Se reemplaza el caracter [ » ] chr(34) por el [ ‘ ] chr(39) para poder utilizar la consulta
    ‘ *** generada por el formulario en porjemplo una suma de campo
    Filtro_Form_SQL = Replace(Filtro_Form_SQL, Chr(34), Chr(39))
    ‘ *** para el caso que necesitemos concadenar con otro tipo de parcialización de la consulta
    If Filtro_Form_SQL = «» Then
    sumaConsulta = «»
    Else
    sumaConsulta = «and »
    End If
    ‘ *** Asignar la suma de de un campo del formulario a una text box
    [Form_FormularioXXX].TextBox123.value= DSum(«Cantidad», «Tabla_Ejemplo», Filtro_Form_SQL & sumaConsulta & «[Sexo] = ‘M'»)
    [Form_F Reportes].TexBox34.Value = DSum(«Total», «C Resumen Costo Scrap Tipo Proceso», Filtro_Form_SQL)

    End Sub

    Responder
  6. anonymous dice:
    2 septiembre, 2009 a las 10:36 pm

    hicieron un buen trabajo

    Responder
  7. anonymous dice:
    27 octubre, 2009 a las 1:48 pm

    ¿como se puede evitar que en la vista hoja de datos de un formulario apaezca tanto la opción de filtrar como la de ordenar? Que no aparezca ni siquiera la flecha que despiega dicho menu, vamos.

    Gracias

    Responder
  8. anonymous dice:
    4 noviembre, 2009 a las 1:05 am

    jajajaja no sirve thu pag es

    una chafa

    Responder
  9. anonymous dice:
    20 agosto, 2010 a las 9:41 pm

    Excelente tutorial para hacer filtros…
    gracias

    Responder
  10. anonymous dice:
    14 diciembre, 2010 a las 3:39 am

    Amigos

    Tengo una consulta.
    Lo que pasa es que estoy trabajndo con una base de datos y necesito filtrar un informe mediante rangos de fechas de ingreso de un producto y tb por rango de itemes ( n° que identifica a cada producto ). La idea es que filtre y luego muestre el resultado de este filtro en un informe. ( filtre por fechas y/o por itemes )

    ej.

    Fecha inf Fecha sup

    Item Inf Item Sup

    Agradecido de antemano

    Responder
  11. anonymous dice:
    19 abril, 2011 a las 1:23 pm

    Hola amigos. Los filtros son muy buenos. Yo los utilizo con el menu contextual, pero ¿como puedo hacer para que cuando se pincha fuera del control (en la seccion o en el encabezado del formulario) se desactive la opcion de entrar en modo diseño?
    Muchas gracias

    Responder
  12. anonymous dice:
    23 agosto, 2011 a las 12:28 am

    Hola a todos mi pregunta es la siguiente si creo un formulario con tres campos de seleccion y con un boton para ejecutar la consulta dependiendo los valores que esten en los tres campos, como realizo el filtro para que si en la primera opcion introducen un valor y en el segundo campo ni en el tercero no introducen valor la consulta se ejecute o si en el segundo campo pero en el tercero y el primero no introducen valor la consulta se ejecute, es que la consulta unicamente se ejecuta si estan los tres valores declarados pero si no existe un solo valor pero los otros dos no la consulta no se ejecuta

    Responder

Deja un comentario Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

← Previous Post Next Post →

Categories

  • Sin categoría

Search:

Archives

  • mayo 2016
  • abril 2016
  • marzo 2016
  • enero 2016
  • diciembre 2015
  • julio 2015
  • junio 2015
  • mayo 2015
  • abril 2015
  • marzo 2015
  • febrero 2015
  • enero 2015
  • diciembre 2014
  • noviembre 2014
  • septiembre 2014
  • agosto 2014
  • junio 2014
  • mayo 2014
  • abril 2014
  • febrero 2013
  • mayo 2011
  • octubre 2010
  • enero 2010
  • junio 2009
  • mayo 2009
  • febrero 2009
  • enero 2009
  • diciembre 2008
  • noviembre 2008
  • octubre 2008
  • agosto 2008
  • junio 2008
  • mayo 2008
  • abril 2008
  • marzo 2008
  • enero 2008
  • octubre 2007
  • septiembre 2007
  • julio 2007
  • junio 2007
  • mayo 2007
  • abril 2007
About This Site

A cras tincidunt, ut tellus et. Gravida scel ipsum sed iaculis, nunc non nam. Placerat sed phase llus, purus purus elit.

Archives Widget
  • January 2010
  • December 2009
  • November 2009
  • October 2009
Categories
  • Entertainment
  • Technology
  • Sports & Recreation
  • Jobs & Lifestyle
Search

Powered by WordPress  |  Business Directory by InkThemes.

This site uses cookies: Find out more.