Описание
Задает или возвращает значение, определяющее записи, которые будут включены в открываемый объект Recordset (только в рабочей области Microsoft Jet).
Значение
Задаваемое или возвращаемое значение данного свойства имеет тип String и содержит предложение WHERE инструкции SQL без зарезервированного слова WHERE.
Замечания
Свойство Filter позволяет применить фильтр к объекту Recordset типа динамического набора записей, статического набора записей или статического набора записей с последовательным доступом.
Свойство Filter позволяет определить условие отбора записей, которые будут выведены в новом объекте Recordset, открытом на базе существующего объекта Recordset.
Во многих случае можно быстрее открыть новый объект Recordset с помощью инструкции SQL, содержащей предложение WHERE.
При отборе записей по значениям полей даты следует использовать американский формат даты (месяц-день-год), даже при использовании локализованной версии ядра базы данных Microsoft Jet(в последнем случае следует собирать значения даты путем слияния строк, например, strМесяц & "-" & strДень & "-" & strГод). В противном случае могут возникнуть непредсказуемые результаты.
Если значение свойства задается путем слияния строки с нецелым числом, а в системной настройке задано использование десятичного разделителя, отличного от десятичной точки (например, запятой, как в следующем примере: strFilter = "ЦЕНА > " & lngPrice, где lngPrice = 125,50), то при попытке открыть следующий объект Recordset возникнет ошибка. Причина заключается в том, что при слиянии строк число преобразуется в строковое значение с использованием текущего системного десятичного разделителя, а в языке Microsoft Jet SQL распознается только американский символ десятичного разделителя (точка).
Пример
Следующая программа использует свойство Filter для создания нового объекта Recordset на основе существующего объекта Recordset и применения определенного условия. Для выполнения данной процедуры требуется функция FilterField.
Sub FilterX() Dim dbsNorthwind As Database Dim rstOrders As Recordset Dim intOrders As Integer Dim strCountry As String Dim rstOrdersCountry As Recordset Dim strMessage As String Set dbsNorthwind = OpenDatabase("Борей.mdb") Set rstOrders = dbsNorthwind.OpenRecordset("Заказы", dbOpenSnapshot) ' Заполняет объект Recordset. rstOrders.MoveLast intOrders = rstOrders.RecordCount ' Принимает данные от пользователя. strCountry = Trim(InputBox( "Введите название страны:")) If strCountry <> "" Then ' Открывает отобранный объект Recordset. Set rstOrdersCountry = FilterField(rstOrders, "СтранаПолучателя", strCountry) With rstOrdersCountry ' Проверяет свойство RecordCount перед заполнением объекта; ' Recordset, чтобы не возникла ошибка. If .RecordCount <> 0 Then .MoveLast ' Печатает число записей в исходном объекте ' и в объекте Recordset после отбора. strMessage = "Заказы в исходном наборе записей: " & vbCr & intOrders & vbCr & _ "Заказы в отобранном наборе записей (Страна = '" & strCountry & "'): " & vbCr & .RecordCount MsgBox strMessage .Close End With End If rstOrders.Close dbsNorthwind.Close End Sub Function FilterField(rstTemp As Recordset, strField As String, strFilter As String) As Recordset ' Устанавливает фильтр для указанного объекта Recordset ' и открывает новый объект Recordset. rstTemp.Filter = strField & " = '" & strFilter & "'" Set FilterField = rstTemp.OpenRecordset End Function