Propiedad Filter

Indica un filtro para los datos de un objeto Recordset.

Configuración y valores devueltos

Establece o devuelve un valor Variant, que puede contener uno de los siguientes elementos:

  • Cadena de criterios: cadena formada por una o varias cláusulas individuales concatenadas con operadores AND u OR.

  • Matriz de marcadores: matriz de valores de marcador únicos que apuntan a registros en el objeto Recordset.

  • Un valor FilterGroupEnum.

Comentarios

Utilice la propiedad Filter para filtrar de forma selectiva los registros de un objeto Recordset. El objeto Recordset filtrado se convierte en el cursor actual. Otras propiedades que devuelven valores basados en el cursor actual se ven afectadas, como la propiedad AbsolutePosition (ADO), la propiedad AbsolutePage (ADO), la propiedad RecordCount (ADO) y la propiedad PageCount (ADO). Al establecer la propiedad Filter en un valor específico nuevo, el registro actual se mueve al primer registro que tiene el nuevo valor.

La cadena de criterios consta de cláusulas con el formato FieldName Operator Value (por ejemplo, "LastName = 'Smith'"). Puede crear cláusulas compuestas mediante la concatenación de cláusulas individuales con AND (por ejemplo, "LastName = 'Smith' AND FirstName = 'John'") u OR (por ejemplo, "LastName = 'Smith' OR LastName = 'Jones'"). Para las cadenas de criterios, use las siguientes instrucciones:

  • FieldName debe ser un nombre de campo válido del objeto Recordset. Si el nombre del modelo de minería de datos contiene espacios, debe escribirse entre corchetes.

  • El operador debe ser uno de los siguientes: <, >, <=, >=, <>, = o LIKE.

  • Value es el valor con el que se compararán los valores de campo (por ejemplo, "Smith", #8/24/95#, 12.345 o $50.00). Utilice comillas simples (') con cadenas y signos de libra (#) con fechas. En el caso de los números, puede usar puntos decimales, signos de dólar y notación científica. Si Operator es LIKE, Value puede usar caracteres comodín. Solo se permiten los caracteres comodín de asterisco (*) y porcentaje (%), y deben ser el último carácter de la cadena. Value cannot be null.

Nota

Para incluir comillas simples (') en el valor del filtro, use dos comillas simples para representar una. Por ejemplo, para filtrar por O'Malley, la cadena de criterios debe ser "col1 = 'O''Malley'". Para incluir comillas simples al principio y al final del valor del filtro, escriba la cadena entre signos de libra (#). Por ejemplo, para filtrar por "1", la cadena de criterios debe ser "col1 = #'1'#".

  • No hay prioridad entre AND y OR. Las cláusulas se pueden agrupar entre paréntesis. Sin embargo, no se pueden agrupar cláusulas unidas por un operador OR y, a continuación, unir el grupo a otra cláusula con AND, como se indica en el siguiente fragmento de código:
    (LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

  • En su lugar, construiría este filtro de la siguiente manera:
    (LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')

  • En una cláusula LIKE, puede usar un carácter comodín al principio y al final del patrón. Por ejemplo, puede usar LastName Like '*mit*'. O con LIKE, solo puede usar un carácter comodín al final del patrón. Por ejemplo, LastName Like 'Smit*'.

Las constantes de filtro facilitan la resolución de conflictos de registros individuales durante el modo de actualización por lotes al permitirle ver, por ejemplo, solo los registros afectados durante la última llamada de método UpdateBatch.

Es posible que se produzca un error al establecer la propia propiedad Filter debido a un conflicto con los datos subyacentes. Por ejemplo, este error puede producirse cuando otro usuario ya ha eliminado un registro. En tal caso, el proveedor devuelve advertencias a la colección Errors (ADO), pero no detiene la ejecución del programa. Un error en tiempo de ejecución solo se produce si hay conflictos en todos los registros solicitados. Utilice la propiedad Status (Recordset de ADO) para buscar registros con conflictos.

Establecer la propiedad Filter en una cadena de longitud cero ("") tiene el mismo efecto que el uso de la constante adFilterNone.

Cada vez que se establece la propiedad Filter, la posición del registro actual se mueve al primer registro del subconjunto filtrado de registros del objeto Recordset. Del mismo modo, cuando se borra la propiedad Filter, la posición del registro actual se mueve al primer registro del objeto Recordset.

Supongamos que un objeto Recordset se filtra en función de un campo de algún tipo de variante, como el tipo sql_variant. Se produce un error (DISP_E_TYPEMISMATCH o 80020005) cuando los subtipos del campo y los valores de filtro usados en la cadena de criterios no coinciden. Por ejemplo, supongamos que:

  • Un objeto Recordset (rs) contiene una columna (C) del tipo sql_variant.
  • Y a un campo de esta columna se le ha asignado un valor de 1 del tipo I4. La cadena de criterios se establece en rs.Filter = "C='A'" en el campo.

Esta configuración genera el error durante el tiempo de ejecución. Sin embargo, rs.Filter = "C=2" aplicado en el mismo campo no producirá ningún error. Y el campo se filtra fuera del conjunto de registros actual.

Vea la propiedad Bookmark (ADO) para obtener una explicación de los valores de marcador desde los que puede crear una matriz para usarla con la propiedad Filter.

Solo los filtros en forma de cadenas de criterios afectan al contenido de un objeto Recordset persistente. Un ejemplo de una cadena de criterios es OrderDate > '12/31/1999'. Los filtros creados con una matriz de marcadores o con un valor de FilterGroupEnum no afectarán al contenido del objeto Recordset persistente. Estas reglas se aplican a los objetos Recordset creados con cursores del lado cliente o del lado servidor.

Nota

Al aplicar la marca adFilterPendingRecords a un objeto Recordset filtrado y modificado en el modo de actualización por lotes, el objeto Recordset resultante está vacío si el filtrado se basaba en el campo de clave de una tabla con clave única y se realizó la modificación en los valores de los campos de clave. El objeto Recordset resultante no estará vacío si se cumple una de las siguientes instrucciones:

  • El filtrado se basaba en campos que no son de clave en una tabla con clave única.

  • El filtrado se basaba en todos los campos de una tabla con varias claves.

  • Las modificaciones se realizaron en campos sin clave en una tabla con clave única.

  • Las modificaciones se realizaron en todos los campos de una tabla con varias claves.

En la tabla siguiente se resumen los efectos de adFilterPendingRecords en diferentes combinaciones de filtrado y modificaciones. En la columna izquierda se muestran las posibles modificaciones. Las modificaciones se pueden realizar en cualquiera de los campos sin clave, en el campo de clave de una tabla con clave única o en cualquiera de los campos de clave de una tabla con varias claves. La fila superior muestra el criterio de filtrado. El filtrado puede basarse en cualquiera de los campos sin clave, en el campo de clave de una tabla con clave única o en cualquiera de los campos de clave de una tabla con varias claves. Las celdas que se cruzan muestran los resultados. Un signo más + significa que aplicar adFilterPendingRecords da como resultado un objeto Recordset no vacío. Un signo menos - significa un objeto Recordset vacío.

Combinaciones Sin claves Clave única Varias claves
Sin claves + + +
Clave única + - N/D
Varias claves + N/D +

Se aplica a

Objeto de conjunto de registros (ADO)

Consulte también

Ejemplo de propiedades Filter y RecordCount (VB)Ejemplo de propiedades Filter y RecordCount (VC++)Método Clear (ADO)Propiedad dinámica Optimize (ADO)