Динамическая
фильтрация данных
Предположим,
у нас есть форма, содержащая подчиненную форму, в которой отображается много
записей, и вы хотели бы интерактивно задать в главной форме какое-нибудь условие
для отбора интересующих записей в подчиненной форме, чтобы упростить их визуальный
анализ.
Это несложно
сделать с помощью применения фильтра для источника данных формы (в данном случае
— подчиненной). Фильтр можно применить двумя способами:
Первый способ
применения фильтра в форме во многом аналогичен подобным действиям в режиме
Таблицы, которые были рассмотрены
в разд. "Фильтрация данных" гл.
2.
Здесь мы рассмотрим второй способ.
В этом случае
применяются свойства формы
Фильтр
(Filter) и
Фильтр включен
(Filter
On). Свойство
Фильтр
(Filter) содержит строковое значение — предложение
WHERE на языке SQL (без ключевого слова WHERE). Свойство
Фильтр включен
(Filter
On) определяет, применен ли фильтр, указанный в свойстве
Фильтр
(Filter),
к форме. В отличие от свойства
Фильтр включен
(Filter On), свойство
Фильтр
(Filter) можно задать и в режиме Конструктора, в окне свойств формы, чтобы
фильтр применился в момент загрузки формы. Но нам нужно изменять фильтр динамически
— в процессе работы с формой в режиме Формы. Мы реализуем это с помощью процедуры
VBA.
:
.
И хоть данная
глава не предназначена для описания программирования на VBA, мы приведем пример
соответствующей процедуры VBA, поскольку он обеспечивает несложное решение довольно
типичной задачи.
Рассмотрим
решение этой проблемы на примере формы "Типы" (Categories), содержащей
подчиненную форму "Список товаров" (Product List). Организуем отбор
товаров в подчиненной форме в зависимости от наличия их поставок:
Таблица
9.1.
Свойства фильтрующего элемента
Свойство
|
Значение
|
||
Тип источника строк (Row Source Type) |
Список значений (Value List) |
||
Количество столбцов (Column Count) | 2 | ||
Ширина столбцов (Column Widths) | Ост; 2, 5cm | ||
Данные (ControlSource) | оставьте поле свойства пустым | ||
Имя (Name) | Отбор | ||
Присоединенный столбец (Bound Column) | 1 | ||
Источник строк (Row Source) | 0; "Поставки выполняются";— 1 ; "Поставки прекращены" ; 2 ; "Все товары" |
Замечание
Обратите внимание на значения созданного элемента в свойстве Источник строк — 0, -1 и 2. Первые два значения выбраны в соответствии с возможными вариантами значений поля "ПоставкиПрекращены" (Discontinued) таблицы "Товары" (Products), которая является источником данных для подчиненной формы в настоящем примере. По этому полю и будет проводиться фильтрация данных в подчиненной форме.
Private Sub
Отбор_А£terUpdate() If Me!Отбор = 2 Then
[Список товаров].form.Filter
= ""
[Список товаров].form.FilterOn
= False Else
? [Список
товаров].form.Filter = _
"[ПоставкиПрекращены]
= " & Me!Отбор
[Список товаров].form.FilterOn
= True End If
End Sub
В английской
версии "Борей" вместо русских названий подчиненной формы
[Список товаров]
и поля [ПоставкиПрекращены] используйте их английские
аналоги:
[Product List] и [Discontinued].
Откройте форму "Типы" (Categories) в режиме Формы. Попробуйте выбирать в созданном списке разные значения и переходить от записи к записи. Вы увидите, что в соответствии с выбранным в списке значением, в подчиненной форме отображаются только товары с выполняющимися поставками, только товары с прекращенными поставками или все товары (см. также разд. "Синхронизация данных в связанных формах" гл. 13).