texto propiedad informe formulario filtros filtro filtrar filtrado datos con acces abrir ms-access vba access-vba

ms-access - propiedad - me filter access



Formulario carga y filtro pregunta (4)

Creo que respondiste tu propia pregunta allí. La cláusula where filtrará la consulta en el servidor SQL.

Acceda a SQL: cláusula WHERE

Estoy haciendo un formulario de búsqueda. En la parte superior, hay varios cuadros combinados para que los usuarios elijan una combinación de criterios. Luego construyo una cadena Where para filtrar una subforma que muestra los resultados.

Me.sub.SourceObject = "subResultType_1" Me.sub.Form.Filter = strWhere Me.sub.Form.FilterOn = True

Este código está en el evento de clic del botón "Buscar".

El problema es que cuando se Me.sub.SourceObject = "subResultType_1" , el subformulario mostrará todos los registros. Luego se filtra. Pero lo que quiero es que el subformulario no muestre nada hasta que se filtre. Esto se debe a que mi programa se utilizará como front / back end en la red más bien lenta.

PD: Creo que cuando una cláusula de SQL con la parte DONDE, o un formulario con filtro, se filtra en la parte de atrás. Por lo tanto, solo se transmitirá una pequeña cantidad de datos en la red al frente. Si estoy equivocado en esto, dime ...


Si desea obligar a los usuarios a filtrar el formulario antes de mostrar los resultados, no vincule el Subformulario a la consulta (deje el Formulario RecordSource vacío) y hágalo en código: puede simplemente configurarlo en el evento de clic del botón Buscar:

Me.Sub.RecordSource = "subResultType_1"

Aún más bonito, haga invisible el Subform (establezca su propiedad Visible = No propiedad en modo Diseño) y muéstrelo una vez que el usuario haya hecho clic en Buscar:

Private Sub btSearch_Click() Me.Sub.RecordSource = "subResultType_1" Me.Sub.Visible = True End Sub

Si desea hacer filtros más complejos, también puede hacer algo como:

Private Sub btSearch_Click() Me.Sub.RecordSource = "SELECT * FROM subResultType_1 WHERE " + strWhere Me.Sub.Visible = True End Sub

Algo como esto le permitiría construir consultas WHERE complejas desde el código en función de una gran cantidad de información del usuario.
Por ejemplo, puede tener múltiples cuadros de texto donde el usuario puede ingresar información relativa a campos particulares para reducir la búsqueda.

A continuación, construye la cláusula WHERE a partir del contenido de estos cuadros de texto, como este:

Eso se convierte en esto una vez que el usuario ha ingresado algunos criterios de filtrado:


Una alternativa es una que uso a menudo, que es guardar el subformulario con un recordsource que produce un registro en blanco, no editable. El SQL que suelo usar es algo como esto:

SELECT TOP 1 Null As Field1, Null As Field2, 0 As Field3 FROM MyTable;

Esto muestra un registro en blanco con nulos para algunos campos, 0 para otros (según corresponda). Me parece estéticamente más atractivo que la alternativa.

Cuando estoy listo para mostrar un conjunto filtrado, cambio el Recordsource en lugar de establecer un filtro.


Usted dijo " mi programa se usará como front / back end en la red más bien lenta ".

¿Cuál es su base de datos de almacenamiento de back-end? ¿Es un archivo de base de datos Access (Jet / ACE)?

En caso afirmativo, debe tener en cuenta que las bases de datos de acceso en red realmente solo son adecuadas para una LAN rápida, confiable y cableada. Si alguna de las siguientes condiciones es verdadera, debe cambiar su almacenamiento de datos a otro que no sea Access.

  1. red de área amplia (WAN)
  2. conexión de red inalámbrica
  3. conexión por cable a una red de área local no confiable (LAN)

El riesgo común en esas situaciones es que una conexión caída puede dañar su base de datos de Access. Puede que no ocurra en cada conexión que se caiga, pero eventualmente corromperá su base de datos de Access.