Вы находитесь на странице: 1из 16

Filtros en Access 2007 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 aos, hemos ido aadiendo a nuestras aplicaciones para filtrar. Para muestra vale un botn (el de filtro):

Con slo posicionarnos en un campo de un formulario, en este caso de fecha, y pulsar el botn de Filtro que encontramos en la Cinta de Opciones, Access despliega una abrumadora relacin de opciones para filtrar el formulario por el campo en el que nos encontramos. Las opciones que se despliegan varan segn el campo por el que vamos a filtrar sea numrico, de texto o de fecha.

Varias maneras de acceder a las herramientas de filtro


Usando el men contextual Pulsando con el botn derecho del ratn sobre un control del formulario, se despliega un men contextual que, adems de las opciones de edicin y orden, muestra las de filtro. Son muy parecidas a las que hemos visto antes con el botn de filtro de la cinta de opciones, pero falta el combo multivalor y se aade la opcin de filtro por seleccin, es decir, el valor actual del control como opcin de filtro igual, distinto, mayor o menor.

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) posicionndonos el cualquier control y usando el cdigo:

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 slo tenemos el botn de filtro que veamos antes. Los botones Seleccin y Avanzadas despliegan una serie de opciones que ya existan en versiones anteriores de Access.

Las opciones de Seleccin ya existan en versiones anteriores, salvo la ltima, Entre, tambin disponible en el men contextual y en el botn de filtro, bastante novedosa y til: muestra un cuadro de dilogo con dos cuadros de texto para indicar los lmites de un rango por el que filtrar.

La imagen es para un rango de fechas, pero tambin existe para un rango de nmeros. No existe para texto, aunque para texto hay otras alternativas. Desplegando el botn 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 cuadrcula 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 botn 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 estn 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 ms complejo.
Alternar el filtrado

Al filtrar, se resalta en naranja un nuevo botn poniendo Filtrado en la barra de navegacin del formulario :

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

Pero an afina ms. 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 habamos filtrado y pulsar de nuevo el botn derecho del ratn, se mostrar entonces una opcin en el men desplegable para quitar ese criterio.

Filtros en hojas de datos Los mens de filtro tambin estn disponibles en las vistas de hojas de datos de tablas y consultas, sin necesidad de que se trata de un subformulario. Adems, estn directamente accesibles ambos mens de filtro, el contextual y el que veamos desde el Ribbon, para el primero usando el botn derecho del ratn y, para el segundo, pulsando sobre el pequeo tringulo con un vrtice hacia abajo que aparece junto al nombre de cada campo.

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

Y, si pulsamos en l se despliega el men de filtro con, entre otras, la opcin para quitar el filtro por ese campo.

Filtros en informes Algo sorprendente en Access 2007 es que los informes tambin pueden filtrarse dinmicamente de la misma manera que hacemos en un formulario. Como veamos en un artculo anterior, existen Nuevas vistas de informe en Access 2007 distintas de la Vista Preiliminar.

Si abrimos nuestro infrome como Vista Informe, se presenta de una forma peculiar, sin opciones de impresin o vista previa y sin saltos de pgina, 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 Botn de Office | Imprimir o pasar a laVista Preliminar desde la opcin Vistas del Ribbon.

Un poco de cdigo
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 cdigo: 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

El mismo botn sirve para filtrar en el formulario principal o en un subformulario. Slo es cuestin de posicionarse previamente en el campo por el que queremos filtrar

Aprender de Access Resulta un ejercicio interesante ver cmo los mens de filtro de Access construyen los criterios de filtro. Para ello, en un formulario para ensayos aadimos un cuadro de texto txtFiltro y el siguiente cdigo: 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.

(([Productos].[Categora]="Bebidas")) AND ([Productos].[Costo estndar]<=13.5) Observamos que, a medida que vamos filtrando, se van aadiendo cadenas de filtro unidas por AND, lo cual era perfectamente previsible. Claro, que slo cabe unir los distintos criterior con AND y a lo mejor nos interesa unir alguno con OR. Con un par de lneas ns de cdigo 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 cmo la sintxis va cambiando segn la cantidad y proporcin de elementos que vayamos seleccionando para filtrar en el desplegable multivalor del men de filtro.

Las distintas selecciones provocan distintos criterios de filtro segn se haya seleccionado un slo 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","Jess Cuesta")) ([Empleados ampliados].[Apellidos]<>"Chaves" Or [Empleados ampliados].[Apellidos] IS Null) ([Empleados ampliados].[Apellidos] Not In ("Chaves","Jess Cuesta") Or [Empleados ampliados].[Apellidos] IS Null) Filtrando campos multivalor Nada de todo esto nos resulta novedoso, as que vamos a ver cmo se generan los filtros con campos multivalor, especficos de Access 2007.

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].[Compaa]="Proveedor D" AND [Lookup_Supplier IDs].[Compaa]="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 opcin correspondiente en el Ribbon

O bien aadimos un botn que llame a la herramienta mediante cdigo: Private Sub FiltroAvanzado_Click() DoCmd.RunCommand acCmdAdvancedFilterSort End Sub De cualquiera de las dos maneras el resultado ser que se muestre el diseador grfico de consultas con el filtro actual

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 bsqueda de Id de Proveedores. Recordemos que, para que un campo sea Multivalor, en el diseo de la tabla, en la pestaa Bsqueda debemos usar un cuadro combinado con un origen vlido y Permitir varios valores.

Por lo tanto, el filtro con Lookup se usa en los campos multivalor porque son cuadros combinados. La sintxis, si queremos crear nuestro propios criterios con Lookup_ , sera 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, aadindole 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 ningn otro lado. Todo lo que he encontrado, y con ayuda de Emilio Sancha, es este enlace de Allenbrowne que lo usa, para bsquedas, en una aplicacin 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 sintxis 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 aadido un parmetro ControlName y, probando, nos encontramos con que slo es vlido el nombre de un control de subformulario o subinforme, por lo que es fcil 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 botn con el siguiente cdigo. Private Sub Mibotn_Click() DoCmd.ApplyFilter , "Transaccin='Compra'", "child22" End Sub Tenindolo 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 slo aadiendo un parmetro, el filtro se puede aplicar a un subformulario, la macro se simplifica notablemente.

Вам также может понравиться