
- •Палітра Компонентів Delphi
- •Редактор Коду Delphi
- •Конструктор Форм
- •Інспектор Об’єктів. Принцип візуальної розробки програм
- •Завершення роботи з проектом та створення нового проекту
- •Збереження проекту
- •Відкриття існуючого проекту
- •Робота з Delphi-програмою Структура Delphi-програм
- •Виконання Delphi-програми
- •Завершення виконання Delphi-програми
- •Лабораторна робота №1
- •Завдання
- •Теоретичні відомості
- •Лабораторна робота №2
- •Розробка проекту «Діалог»
- •Мал. Діалог Аналіз проекту
- •Хід роботи
- •Завдання для самостійного виконання
- •Лабораторна робота №3
- •Завдання
- •Теоретичні відомості
- •Лабораторна робота №4
- •Розробка проекту «Ваша вага»
- •Хід роботи
- •Розробка проекту «Обмін валюти»
- •Хід роботи
- •Лабораторна робота №5
- •Завдання
- •Хід роботи
- •Теоретичні відомості Оператори if і case мови Паскаль
- •Кнопки-перемикачі в Delphi|
- •Лабораторна робота №6
- •Завдання
- •Хід роботи
- •Теоретичні відомості Типи даних для роботи з|із| рядками Короткі рядки типу|типа| ShortString| і String|[n]
- •Довгий рядок типу|типа| String|
- •Компонент tComboBox|
- •Компонент tBitBtn|
- •Обробка подій
- •Лабораторна робота №7
- •Розробка проекту «Гороскоп»
- •Хід роботи
- •Розробка проекту «Фізичний конвектор»
- •Хід роботи
- •Лабораторна робота №8
- •Розробка проекту «Рейтинг країн за результатами олімпійських змагань»
- •Хід роботи
- •Лабораторна робота №9
- •Розробка проекту «Журнал олімпіади»
- •Хід роботи
- •Лабораторна робота №10
- •Завдання
- •Хід роботи
- •2. Установка
- •3. Тестування створеної компоненти
- •Лабораторна робота №11
- •Розробка проекту «Побудова графіка функції»
- •Хід роботи
- •Лабораторна робота №12
- •Розробка проекту «Графічний конструктор»
- •Хід роботи
- •Лабораторна робота №13
- •Розробка проекту «Чат для локальної та глобальної мережі»
- •Хід роботи
- •Розробка форми на настройок
- •Розробка програмного коду
- •Лабораторна робота №14.
- •Завдання
- •Хід роботи
- •Теоретичні відомості
- •Етапи створення баз даних в Delphi.
- •Компонент тТаblе
- •Модуль даних
- •Лабораторна робота №15
- •Завдання
- •Хід роботи
- •Теоретичні відомості
- •Лабораторна робота №16
- •Завдання
- •Хід роботи
- •Теоретичні відомості
- •Лабораторна робота №17
- •Завдання
- •Хід роботи
- •Теоретичні відомості
- •Лабораторна робота №18
- •Завдання
- •Хід роботи
- •Теоретичні відомості
- •Список літератури
Лабораторна робота №17
Тема: Робота з фільтрами в базах даних Delphi.
Мета роботи: Навчити вибирати набори даних за допомогою фільтрів.
Завдання
Створити програму для фільтрації даних.
Хід роботи
1. Відкрийте попередній проект і доповніть інтерфейс ще однієї формою і пунктом меню Фільтр, який робить видимою цю форму. На новій формі розмістіть компоненти, як показано на рисунку.
3. В ролі компонентів, що висвітлюють Прізвище, Код Покупця, Товар та Код товару використовуються компоненти TDBText, компоненти TBDNavigation приєднуються до наборів даних Покупець та Товар.
4. Запишіть коди для обробників натискування на обидві кнопки Фільтація, за допомогою яких здійснюється фільтрація набору Замовлення за заданими значеннями Код Покупця або Код товару.
5. Перевірте роботу програми.
6. Запишіть код для обробки натискування на кнопку Відміна, який дозволяє ліквідувати заданe фільтрацію.
7. Реалізуйте обробник події OnFilterRecord для таблиці Замовлення, який дозволить відфільтрувати всі записи, в яких покупки здійснювалися після 1.01.2003 в кількості більше 5 (Властивість Filtered при цьому повинна бути встановлена в True).
8. Перевірте роботу програми.
9. Запишіть проект на диск.
Теоретичні відомості
Найбільш ефективним способом відбору записів до набору даних (особливо з великих таблиць) є створення і виконання відповідного запиту SQL. Але для цього необхідно використовувати компоненти TQuery. Якщо ж набір даних функціонує на базі компонента TТable, використовується вбудований в набір даних механізм фільтрації даних. Використання фільтру базується всього на двох основних властивостях і одній допоміжній. Текст фільтру повинен міститися у властивості Filter, a властивість Filtered включає і відключає фільтр. Параметри фільтру визначаються властивістю FilterOptions. При використанні фільтра його текст транслюється BDE в синтаксис SQL і передається для виконання на сервер або через відповідний драйвер в локальну СУБД.
Фільтри можна створювати двома способами:
за допомогою властивості Filter створюються досить прості фільтри, для яких досить надаваного механізмом фільтрації синтаксису;
для створення більш складних фільтрів з використанням всіх можливих засобів мови програмування використовується метод-обробник набору даних OnFiiterRecord.
Фільтри можна поділити на статичні і динамічні. Статичні фільтри створюються під час розробки програми и можуть використовувати як властивість Filter, так і метод OnFiiterRecord. Динамічні фільтри можна створювати і редагувати під час виконання програми, для них використовується лише властивість Filter. При створенні тексту фільтра для властивості Filter використовуються імена полів відповідної таблиці БД, а для завдання відношень використовуються всі оператори порівняння (>, >=, <, <=, =, <>) і логічні оператора AND, OR, NOT: (Fieldl>100) AND (Field2=20)
Порівнювати між собою два поля не можна. Такий фільтр викличе помилку при спробі використання: (ItemCount – Balance) AND (InputPrice>OutputPrice)
При створенні динамічних фільтрів можна змінювати як вираз фільтра цілком, так і його частини. Наприклад, обмежуюче значення для поля можна задавати за допомогою елементів керування форми, що дозволяє користувачу програми керувати фільтрацією набору даних:
procedure TFormI.EditlChange(Sender: TObject);
begin with Tablel do begin
Filtered := False;
Filter := 'Fieldl>=' + (Sender as TEdit).Text;
Filtered := True;
end;
end;
В фільтрах можна проводити відбір по частинам рядків для рядкових полів, для цього використовується символ зірочки (*): ItemName = 'A*'
Фільтр починає працювати лише після того, як властивості Filtered присвоюється істинне значення. Перед зміною тексту динамічного фільтра або для відключення фільтра властивості Filtered присвоюється значення False.
Параметри фільтра визначаються властивістю FilterOptions:
property FilterOptions: TFilterOptions;
TFilterOption – (foCaseInsensitive, foNoPartialCompare);
TFilterOptions = set of TFilterOption;
Параметр foCaseInsensitive, будучи включеним, відключає порівняння рядкових значень з урахуванням регістра символів. Параметр foNoPartialCompare відключає відбір строкових значень по частині рядка.
Метод-обробник ОnFilterRecord має таку декларацію:
type TFilterRecordEvent = procedure(DataSet: TDataSet; var Accept: Boolean) of object;
property OnFilterRecord: TFilterRecordEvent;
Якщо цей метод створений для набору даних, то він викликається для кожного його запису. Програмний код методу повинен присвоювати параметру Accept істинне або хибне значення. В результаті запис передається в набір даних або відсікається:
procedure TFormI.TablelFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := ArchOrdersArchDat.AsString >= DateEditI.Text;
end;
Важлива перевага методу OnFilterRecord в порівнянні із властивістю Filter в тому, що в цьому методі-обробнику можна порівнювати поля і здійснювати обчислення над їх значеннями. Недоліком методу є недостатня гнучкість, хоча такий фільтр можна модифікувати шляхом присвоєння методу процедурної змінної, що містить посилання на новий метод.
Обробник подій доповнює, а не заміщує властивість Filter, тобто якщо включено фільтрацію (Filtered := True) і властивість фільтр містить значення фільтра, то дія в обробнику подій і фільтр пов’язані логічним відношенням "AND".
Питання для самоконтролю:
Що таке фільтрація даних?
Які методи можна використати для фільтрації даних?
Яка властивість визначає параметри фільтру?