Поделиться через


Свойство Filter

Указывает фильтр для данных в наборе записей.

Параметры и возвращаемые значения

Задает или возвращает значение Variant , которое может содержать один из следующих элементов:

  • Строка условий: Строка, составленная из одного или нескольких отдельных предложений, объединенных с операторами AND или OR .

  • Массив закладок: Массив уникальных значений закладок, указывающих на записи в объекте Recordset .

  • Значение FilterGroupEnum .

Комментарии

Используйте свойство Filter для выборочного отэкрана записей в объекте Recordset . Отфильтрованный набор записей становится текущим курсором. Это влияет на другие свойства, возвращающие значения на основе текущего курсора, например AbsolutePosition Property (ADO),AbsolutePage Property (ADO),RecordCount Property (ADO) и PageCount Property (ADO). Присвоив свойству Filter определенное новое значение, текущая запись перемещается в первую запись, удовлетворяющую новому значению.

Строка условия состоит из предложений в формате FieldName-Operator-Value (например, "LastName = 'Smith'"). Составные предложения можно создавать, сцепляя отдельные предложения с and (например, "LastName = 'Smith' AND FirstName = 'John'") или OR (например, "LastName = 'Smith' OR LastName = 'Jones'"). Для строк условий используйте следующие рекомендации.

  • FieldName должно быть допустимым именем поля из набора записей. Если имя поля содержит пробелы, необходимо заключить имя в квадратные скобки.

  • Оператор должен быть одним из следующих: <, >, <=, >=, <>, = или LIKE.

  • Value — это значение, с которым вы будете сравнивать значения полей (например, "Smith", #8/24/95#, 12,345 или $50,00). Используйте одинарные кавычки со строками и знаки фунта (#) с датами. Для чисел можно использовать десятичные знаки, знаки доллара и научные нотации. Если оператор имеет значение LIKE, значение может использовать подстановочные знаки. Допустимы только подстановочные знаки звездочки (*) и знака процента (%) и они должны быть последним символом в строке. значение не может быть равно NULL.

Примечание

Чтобы включить одинарные кавычки (') в значение фильтра, используйте две одинарные кавычки для представления одной из них. Например, для фильтрации по O'Malley строка условия должна быть "col1 = 'O''Malley'". Чтобы включить одинарные кавычки в начале и конце значения фильтра, заключите строку знаками фунта (#). Например, чтобы выполнить фильтрацию по значению "1", строка условия должна быть "col1 = #'1'#".

  • Между AND и OR нет приоритета. Предложения можно сгруппировать в круглые скобки. Однако нельзя сгруппировать предложения, присоединенные с помощью OR, а затем присоединить группу к другому предложению с помощью И, как показано в следующем фрагменте кода:
    (LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

  • Вместо этого можно создать этот фильтр как
    (LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')

  • В предложении LIKE можно использовать подстановочный знак в начале и конце шаблона. Например, вы можете использовать LastName Like '*mit*'. Или в like можно использовать подстановочный знак только в конце шаблона. Например, LastName Like 'Smit*'.

Константы фильтра упрощают разрешение конфликтов отдельных записей в режиме пакетного обновления, позволяя просматривать, например, только те записи, которые были затронуты во время последнего вызова метода UpdateBatch Method .

Установка самого свойства Filter может завершиться ошибкой из-за конфликта с базовыми данными. Например, этот сбой может произойти, если запись уже удалена другим пользователем. В этом случае поставщик возвращает предупреждения в коллекцию Errors Collection (ADO), но не останавливает выполнение программы. Ошибка во время выполнения возникает только при наличии конфликтов во всех запрошенных записях. Используйте свойство Status Property (ADO Recordset) для поиска записей с конфликтами.

Установка для свойства Filter значения нулевой длины строки ("") имеет тот же эффект, что и при использовании константы adFilterNone .

Каждый раз, когда задано свойство Filter , текущая позиция записи перемещается к первой записи в отфильтрованном подмножестве записей в наборе записей. Аналогичным образом при очистке свойства Filter текущая позиция записи перемещается в первую запись в наборе записей.

Предположим, что набор записей фильтруется на основе поля какого-то типа варианта, например типа sql_variant. Ошибка (DISP_E_TYPEMISMATCH или 80020005) возникает, если подтипы поля и значения фильтра, используемые в строке условия, не совпадают. Например, предположим, что:

  • Объект Recordset (rs) содержит столбец (C) типа sql_variant.
  • А полю этого столбца присвоено значение 1 типа I4. В поле для строки условия задано значение rs.Filter = "C='A'" .

Эта конфигурация создает ошибку во время выполнения. Однако применение rs.Filter = "C=2" к одному и тому же полю не приведет к ошибке. Поле отфильтровывается из текущего набора записей.

Описание значений закладок, на основе которых можно создать массив для использования со свойством Filter, см. в описании свойства Bookmark Property (ADO).

Только фильтры в виде строк условий влияют на содержимое сохраненного набора записей. Примером строки условия является OrderDate > '12/31/1999'. Фильтры, созданные с массивом закладок или используя значение из FilterGroupEnum, не влияют на содержимое сохраненного набора записей. Эти правила применяются к наборам записей, созданным с помощью курсоров на стороне клиента или сервера.

Примечание

При применении флага adFilterPendingRecords к отфильтрованным и измененным Recordset в режиме пакетного обновления результирующий набор записей пуст, если фильтрация была основана на ключевом поле таблицы с одним ключом и изменение было внесено в значения ключевого поля. Результирующий набор записей будет непустым, если выполняется одна из следующих инструкций:

  • Фильтрация была основана на неключевых полях в таблице с одним ключом.

  • Фильтрация была основана на любых полях в таблице с несколькими ключами.

  • Изменения были внесены в поля без ключа в таблице с одним ключом.

  • Изменения были внесены в любые поля в таблице с несколькими ключами.

В следующей таблице перечислены эффекты adFilterPendingRecords в различных сочетаниях фильтров и изменений. В левом столбце показаны возможные изменения. Изменения могут быть внесены в любое из полей без ключей, в поле ключа в таблице с одним ключом или в любом из ключевых полей в таблице с несколькими ключами. В верхней строке показан критерий фильтрации. Фильтрация может основываться на любом из полей без ключа, ключевого поля в таблице с одним ключом или любого из ключевых полей в таблице с несколькими ключами. Результаты отображаются в пересекающихся ячейках. Знак + "плюс" означает, что применение adFilterPendingRecords приводит к непустой записи. Знак - "минус" означает пустой набор записей.

Комбинации Без ключей Один ключ Несколько ключей
Без ключей + + +
Один ключ + - Н/Д
Несколько ключей + Н/Д +

Применение

Объект Recordset (ADO)

См. также:

Filter and RecordCount Properties Example (VB)Filter and RecordCount Properties Example (VC++)Clear Method (ADO)Optimize Property-Dynamic (ADO)