КАТЕГОРИИ: Архитектура-(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 и SetRangeEnd. Свойство 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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |