Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

План заняття. 1. Характеристика понять фільтрація та фільтр




1. Характеристика понять фільтрація та фільтр

2. Характеристика фільтрації по вираженню

3. Характеристика фільтрації по діапазону

 

 

С помощью фильтров устанавливаются ограничения для запи­сей, которые включаются в состав набора данных. Иными слова­ми, при наложении фильтра в набор данных будут входить не все записи, а только те, которые отвечают условиям фильтрации. Дру­гой способ ввода ограничений на включение записей в набор дан­ных - это использование SQL-запросов, что, вообще говоря, явля­ется более мощным средством, чем использование фильтров (о SQL-запросах речь пойдет в следующем разделе).

В Delphi предусмотрены два возможных типа фильтрации за­писей. Фильтрация может выполняться по выражению или по диапазону. По умолчанию фильтры не установлены, то есть набор данных получает все записи таблицы.

Фильтрация по выражению осуществляется путем установки необходимого значения свойству Filter (тип String) компо­нента Table. Выражение фильтра представляет собой строку, ко­торая может включать имена полей таблицы, литералы (числа, строки или символы), операции сравнения, арифметические опе­рации, а также круглые и квадратные скобки. Имена переменных в выражении фильтра использовать нельзя. Для того чтобы вклю­чить в фильтр значение переменной, его следует предварительно преобразовать в строковый тип.

Несколько примеров того, как могут выглядеть выражения фильтров, приведены ниже:

1) Fam = 'Сидоров' (выбираются все записи, у которых поле Fam имеет значение «Сидоров»);

2) Massa*Kolvo > 100 (будут выбраны записи, для кото­рых произведение значения поля Massa на значение поля Kolvo больше 100);

3) Date >= 03.05.87 and Date <= 03.05.97 (отби­раются те записи, для которых значение даты, содержащейся в-поле Date, находится в промежутке от 03.05.87 до 03.05.97);.

4) Price <= 500 and Tovar <> 'Диван' (выбираются записи, у которых значение поля Price меньше или равно 500 и при этом значение поля Tovar не равно «Диван»).

Если выражение фильтра имеет ошибки, то при попытке его выполнения возникает исключительная ситуация.

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

Для того чтобы активизировать фильтр, необходимо свойству Filtered присвоить значение True. По умолчанию данное свойство имеет значение False. При этом фильтрация не осуще­ствляется, а значение, содержащееся в свойстве Filter, игнори­руется.

Свойство FilterOptions (тип TFilterOptions) задает параметры фильтрации и представляет собой произвольную ком­бинацию таких двух значений:

■ Caselnsensitive - данная опция устанавливает, что регистр букв не будет учитываться при фильтрации, то есть большие и маленькие буквы не различаются. Например, ес­ли задано выражение фильтра Name='Иван' и установлен данный параметр, то будут отобраны записи, у которых со­держимое поля Name равно «Иван», «иван», «ИВАН», «ИвАн» и т.д. Все эти значения воспринимаются как оди­наковые; ■ foNoPartialCompare - эта опция обеспечивает проверку на полное соответствие значения, задаваемого в выражении фильтра, и содержимого поля. Если данный параметр не ис­пользуется, то осуществляется проверка на частичное со­ответствие. Например, выражение фильтра имеет вид Name= 'Иван', тогда для него будут выбраны записи, у ко­торых поле Name имеет значение 'Иванов', 'Иван', 'Иванчен­ко', 'Иванчихин' и т.д. Если же данный параметр установлен, то будут отобраны только записи, для которых значение поля Name равно непосредственно «Иван*». При фильтрации по выражению последовательно просматри­ваются все записи таблицы. Поэтому, если таблица имеет боль­шой объем либо код обработчика события OnFilterRecord слишком длинный, то наложение фильтра может вызывать опре­деленное замедление работы приложения.

Фильтрация по диапазону означает, что из таблицы будут вы­бираться только те записи, для которых значение указанного поля попадает в заданный диапазон. Этот способ фильтрации можно применять только для индексированных полей (причем индекс поля, по которому осуществляется фильтрация, должен быть ус­тановлен как текущий). В связи с использованием индексно-последовательного метода доступа, фильтрация по диапазону производится быстрее, чем фильтрация по выражению. Данный способ применим только для компонента Table.

Для включения фильтрации по диапазону используется метод ApplyRange, а для ее отключения - метод CancelRange. Пред­варительно для индексного поля, по которому выполняется фильтрация, устанавливается диапазон допустимых значений. Для этого используются методы SetRangeStart и SetRangeEnd, определяющие, соответственно, нижнюю и верхнюю границы диапазона. Эти методы переводят набор данных в режим dsSetKey, после чего с помощью оператора присваивания зада­ются необходимые значения границ диапазона.

Изменение границ диапазона выполняется при помощи мето­дов EditRangeStart и EditRangeEnd, действие которых аналогично действию методов SetRangeStart и SetRange­End.

Свойство KeyExclusive (тип Boolean) определяет, будут ли включены граничные значения в диапазон при его установке. Если данное свойство имеет значение False (по умолчанию), то граница включается в диапазон, если же свойству присвоено зна­чение True, то граница не входит в диапазон. Свойство KeyExclusive задается отдельно для верхней и нижней грани­цы сразу* же после вызова методов SetRangeStart и SetRangeEnd.

Для диапазона может быть установлена только одна граница. Если определена только нижняя граница диапазона, то будут вы­браны все записи, у которых фильтруемое поле имеет значение большее, чем граничное. Если же задана только верхняя граница, то отбираются записи, для которых значение фильтруемого поля меньше этого граничного значения.

Существует возможность установки фильтра по нескольким полям. В этом случае используется несколько операторов при­сваивания (для каждого фильтруемого поля), а предварительно должен быть создан индекс по этим полям и установлен в качест­ве текущего.

Пример фильтрации по диапазону показан ниже.

В результате выполнения данного кода будут отобраны все за­писи, для которых значение поля Rost находится в диапазоне от 150 до 170, а значение поля Ves - от 45 до 65.

Метод SetRange также позволяет осуществлять фильтрацию по диапазону. Этот метод имеет следующий синтаксис:

SetRange (const StartValues, EndValues: array of const.

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

Например, установка фильтра, который Позволяет осуществить описанную выше фильтрацию с помощью метода SetRange, вы­глядит следующим образом:

Tablel.SetRange([150, 45], [170, 65]);

При этом следует помнить, что предварительно обязательно должен быть установлен текущий индекс, построенный по полям

Rost и Ves.

Рассмотрим еще один характерный пример. Пусть требуется выбрать из таблицы всех владельцев автомобиля ВАЗ-2107, фа­милия которых начинается с буквы «Р». Задать фильтр для выбора таких записей можно следующим образом.

 

 

При выборе фамилий в качестве нижней границы задается «Р», а для установки верхней границы выбора фамилии к символу «Р» добавлена строка «яяя». Фамилии будут выбираться следующим образом. В соответствии с нижней границей будут отобраны все строки, у которых код первой буквы больше кода буквы «Р», т.е. фамилии, начинающиеся с букв Р, С, Т, У, Ф и т.д. Затем из полу­ченного множества значений выбираются те строки, коды первых символов которой меньше кодов букв строки «Ряяя», т.е. фами­лии, начинающиеся с букв «Ра...», «Рб...» и т.д., вплоть до «Ря-яю...» (где многоточие означает строку любой длины, состоящую из любых символов). Таким образом, длина фамилии не имеет значения, а выборка осуществляется только по соответствию пер­вых символов строки установленным границам. Другими словами, производится обычный отбор в алфавитном порядке, когда, на­пример, фамилия Рябко стоит в списке ниже, чем Решетников. Поскольку код буквы «я» больше, чем коды других букв, то в ре­зультате в набор данных будут включены все записи, поле Fam которых содержит значение, начинающееся с буквы «Р». Вероят­ность же того, что при осмысленном заполнении таблицы найдут­ся записи, содержащие поля, которые включают подстроку «яяя», бесконечно близка к нулю.

Метод CancelRange позволяет отменить фильтрацию, вы­полняемую с помощью методов ApplyRange или SetRange.

Кроме описанных способов фильтрации, существует также воз­можность навигации в неотфильтрованном наборе данных между записями, удовлетворяющими фильтру. Для этого служат методы FindFirst, FindLast, FindNext и FindPrior. Они обеспе­чивают, соответственно, поиск первой, последней, следующей и предыдущей записей, которые удовлетворяют критериям фильтра­ции, заданным в обработчике события OnFilterRecord или свойством Filter. При этом сам набор данных находится в неот­фильтрованном состоянии, то есть метод Filtered имеет значе­ние False. Действие перечисленных методов заключается в сле­дующем: они кратковременно переводят набор данных в отфильт­рованное состояние (Filtered=True) без визуализации этой фильтрации в DBGrid или другом подобном визуальном компо­ненте, находят соответствующую запись, устанавливают на. нее курсор и снова переводят набор данных в неотфильтрованное со­стояние (Filtered=False). Если искомая запись найдена, то методы возвращают значение True, в противном случае - False.

 

 

Контрольні питання

 

1. Надати характеристику поняттям фільтрація та фільтр

2. Надати характеристику фільтрації по вираженню

3. Надати характеристику фільтрації по діапазону


САМОСТІЙНА РОБОТА СТУДЕНТА

ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ

ТЕМА 6.6: ОСНОВИ БАЗ ДАНИХ

Самостійне заняття №42 – Модифікація набору даних




Поделиться с друзьями:


Дата добавления: 2014-12-25; Просмотров: 347; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.018 сек.