Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода БД Delphi.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
834.05 Кб
Скачать

Завдання:

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

  2. Виконати фільтрацію з використанням індексів та без індексів.

Обов’язкові засоби: SetRange, Filter, Filtered, FindFirst, FindLast, FindNext, FindPrior.

Зміст звіту.

  1. Опис застосування з зазначенням встановлених значень властивостей компонентів.

  2. Лістинги розроблених процедур та їх аналіз.

  3. Висновки по роботі.

Порядок виконання роботи

Методи ApplyRange і SetRange.

Для фільтрації записів у ТБД компонент TTable має такі методи:

procedure SetRangeStart - встановлює нижню межу фільтра;

procedure EditRangeEnd - встановлює верхню межу фільтра;

procedure ApplyRange - здійснює фільтрацію записів у TTable; умови фільтрації визначаються методами SetRangeStart і EditRangeEnd;

procedure SetRange(const StartValues, EndValues: array of const) - дає той же ефект, що і послідовне виконання методів SetRangeStart, EditRangeEnd і ApplyRange. У якості параметрів використовуються масиви констант, які містять значення ключових полів. Методи ApplyRange / SetRange показують у НД тільки ті записи, індексні поля яких лежать у діапазоні [StartValues . . EndValues].

Фільтрація методами ApplyRange / SetRange проводиться по полю (полях) поточного індексу, обумовленого властивістю TTable.IndexName або TTable.IndexFieldNames. У випадку, якщо значення цих властивостей не встановлені, за замовчуванням використовується головний індекс ТБД. Тому, якщо потрібно використати індекс, відмінний від головного, необхідно явно перевстановити значення властивості TTable.IndexName (ім'я поточного індексу) або TTable.IndexFieldNames (список полів поточного індексу).

property Filtered:Boolean;

Властивість Filtered, встановлена в True, ініціює фільтрацію, умова якої записана або в обробнику події OnFilterRecord, або утримується як текстове значення у властивості Filter. Якщо встановлені різні умови фільтрації і у події OnFilterRecord, і у властивості Filter, то виконуються обидві.

Установка Filtered у False призведе до скасування фільтрації, умови якої зазначені в події OnFilterRecord або (і) у властивості Filter. При цьому фільтрація, накладена на НД методом SetRange або ApplyRange і йому супутніми методами, не порушується.

Властивості Filter і Filtered.

Властивість

property Filter:string;

дозволяє задати умови фільтрації. НД буде відфільтрований, як тільки його властивість Filtered стане рівною True.

При записі умови фільтрації можна застосовувати оператори відношення: <; >; >=; <=; =; <>; а також використовувати логічні оператори AND, NOT і OR.

Використання методів FindFirst, FindLast, FindNext, FindPrior.

Розглянемо НД, в якому визначені умови фільтрації, але сама фільтрація в даний момент не виконується. У цьому випадку можна забезпечити навігацію тільки між тими записами, які задовольняють умові фільтрації.

Для цього використовуються методи FindFirst, FindLast, FindNext, FindPrior.

Умову фільтрації можна зробити співпадаючою з умовою пошуку, зазначеною у параметрі KeyValues методу Locate. При цьому пошук за допомогою зазначених методів має перевагу перед пошуком за допомогою Locate: якщо у Locate можна вказувати тільки значення, то в умові фільтрації можна вказувати логічні умови.

У випадку, якщо запис знайдено, дані методи повертають True у протилежному випадку - False.

function FindFirst: Boolean; - переходить на перший запис, що задовольняє умові фільтрації;

function FindLast: Boolean; - переходить на останній запис, що задовольняє умові фільтрації;

function FindNext: Boolean; - переходить на наступний запис, що задовольняє умові фільтрації;

function FindPrior: Boolean; - переходить на попередній запис, що задовольняє умові фільтрації;

Приклад: Виконати фільтрацію у таблиці студент.

Початкова форма:

Результат:

ЗАГАЛЬНІ ЗАУВАЖЕННЯ ДО РОБОТИ З КОМПОНЕНТОМ TQuery

Компонент TQuery призначений для:

– виконання запитів до БД, які повертають НД, джерелом даних для якого можуть слугувати записи як однієї, так і декількох таблиць БД;

– виконання запитів до БД, які не повертають наборів даних (додавання, зміна, видалення записів в ТБД тощо).

Текст будь-якого запиту зберігається у властивості SQL компонента TQuery.

Таким чином, один компонент TQuery використовується для виконання таких різних запитів, як, наприклад, SELECT та INSERT.

Для з’єднання компонента TQuery з базою даних необхідно у властивості DatabaseName вказати:

– псевдонім БД, раніше визначений за допомогою утиліти BDE Adminastrator;

– перевизначений псевдонім із властивості DatabaseName явно визначеного компонента TDataBase, якщо він використовується.

Запити, що виконуються компонентом TQuery, можуть бути статичними або динамічними.

Статичний запит характеризується тим, що SQL-оператор, який його описує, не змінюється в процесі роботи застосування.

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

Для формування статичного запиту необхідно:

  1. Вибрати для існуючого компонента TQuery властивість SQL в інспекторі об’єктів і натиснути кнопку в правій частині рядка.

  2. У вікні текстового редактора набрати текст SQL-запиту та натиснути ОК.

  3. Встановити властивість Active компонента в True, якщо результуючий НД необхідно відкрити в момент початку роботи застосування, або залишити властивість Active у стані False, якщо відкриття НД буде виконуватися в програмі в деякий момент роботи застосування.

Умову вибору записів, що реалізована в статичному запиті, змінити не можна.

У випадку динамічного запиту під параметром розуміють ім’я, перед яким ставиться двокрапка, наприклад:

:Parameter1

Імена параметрів можуть бути довільними.

Для формування динамічного запиту необхідно:

  1. Вибрати для існуючого компонента TQuery в інспекторі об’єктів властивість SQL і натиснути кнопку текстового редактора.

  2. У вікні текстового редактора набрати текст SQL-оператора з параметрами.

  3. Вибрати в інспекторі об’єктів властивість Params і натиснути кнопку у рядку даної властивості. У вікні, що з’явиться, будуть показані імена всіх параметрів, введених у текст динамічного SQL-оператора на кроці 2. Список параметрів відслідковується автоматично щоразу при змінні складу властивості SQL.

  4. Кожному параметру необхідно поставити у відповідність деякий тип, а якщо потрібно, то й стартове значення в полі Value. Перемикач Null Value дозволяє вказувати в якості стартового значення NULL.

  5. Компонент TQuery можна зробити активним (встановити властивість Active=True) на стадії розробки застосування лише у тому випадку, коли для кожного з параметрів визначено стартове значення.

Якщо компонент TQuery не відкрито в момент створення форми, його можна відкрити в будь-який момент програмно.

У випадку використання оператора SELECT, після відкриття компонента TQuery повертається набір даних. Такий компонент TQuery необхідно відкривати:

– встановленням властивості Active в значення True, наприклад:

Query1.Active:=True;

– виконанням метода procedure Open, наприклад:

Query1.Open;

У випадку використання операторів INSERT, UPDATE, DELETE, набір даних не повертається. Такий компонент TQuery необхідно відкривати, виконуючи метод procedure ExecSQL, наприклад:

Query1.ExecSQL;

Закриття компонента TQuery здійснюється методом procedure Close або встановленням в False властивості Active, наприклад

Query1.Active:=False;

Виконання методу Close для компонента TQuery, який не повертає набір даних, не має ніяких наслідків, оскільки з компонентом не пов’язаний відкритий набір даних.

Для передачі значень параметрів може використовуватись властивість DataSource компонента TQuery. У цьому випадку явного надання значень параметрам динамічного запиту не виконується, тобто не кодуються оператори присвоєння типу

Query1.ParamByName(‘Ім’я Параметра’).Value:=Значення;

Застосування визначає, чи є посилання на будь-який компонент TDataSource у властивості DataSource компонента TQuery. Якщо такого посилання немає – відбувається збудження виключної ситуації; якщо є – в наборі даних, що пов’язаний з TDataSourse, відшукуються поля, які мають такі ж імена, як і параметри динамічного запиту. Якщо такі поля є, то їх поточні значення беруться в якості значень параметрів, якщо таких полів немає - відбувається збудження виключної ситуації.

Практична робота № 9

Тема: Організація статичних запитів за допомогою мови SQL

Мета: Набуття практичних навичок роботи з компонентом TQuery для організації статичних запитів.