lunes, 16 de abril de 2007

Poner un filtro en una query abierta con DoCmd.OpenQuery en Access

Acabo de encontrarme con un problema estúpido. Tengo una base de datos en Access y quería hacer un botón que abriera una consulta, pero no todos los resultados de esa consulta, sino sólo los que correspondiesen al registro que estaba visualizando (lo que se llama filtrar los resultados).

Casualmente, DoCmd.OpenForm y DoCmd.OpenReport te dejan meter como parámetro una cláusula where para filtrar. Algo como:


DoCmd.OpenReport stDocName, acPreview, , "[revista]=" & Me![id_revista]

¿Cómo se hace eso con DoCmd.OpenQuery? OpenQuery no tiene ese parámetro, pero es posible hacer una chapuza (ya lo sé, siempre acabamos en lo mismo). Puedes hacer una query especial que filtre por el valor del campo seleccionado en tu formulario, y abrirla directamente. Siempre que la abras con ese formulario abierto se filtrará con ese valor. Más claramente:
  1. Haces una copia de tu query, y la llamas de otra forma ("query x filtrada", por ejemplo)

  2. La abres en vista diseño, te pones en el campo que quieres filtrar y en criterios, haces click derecho y seleccionas generar. En Formularios->formularios cargados->nombre_del_formulario->lista de campos y haces doble click en el campo. Luego le das a aceptar. (Si no te sale el formulario en la lista ábrelo antes de hacer ésto).


Ahora, el código para el botón es simplemente:
DoCmd.OpenQuery "query x filtrada", , acReadOnly

Yo encontré la solución aquí (en inglés).