Шаг 98 - Свойство Filter

Описание
Задает или возвращает значение, определяющее записи, которые будут включены в открываемый объект 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

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 19.03.2002