Первая страница
Наша команда
Контакты
О нас

    Головна сторінка



Компоненти – набори даних

Компоненти – набори даних




Сторінка16/20
Дата конвертації10.03.2017
Розмір2.36 Mb.
ТипПротокол
1   ...   12   13   14   15   16   17   18   19   20

12. Компонентинабори даних




12.1. Поняття НД. Основні властивості, методи, події




12.1.1. Компоненти – набори даних

Під набором даних (НД) розуміється група записів з даними, узятими з однієї чи декількох таблиць. У програмах Delphi НД створюються за допомогою компонентів TTable і TQuery. Тому компоненти TTable і TQuery часто називають просто наборами даних.

Компонент TTable завжди представляє дані, узяті з однієї таблиці. Компонент TTable використовується звичайно при роботі з локальними БД.

Компонент TQuery являє собою НД, отриманий на основі SQL-запиту. Тому в ньому можуть представлятися дані, узяті з декількох таблиць. Компонент TQuery рекомендується використовувати при роботі з віддаленими БД в архітектурі “клієнт-сервер”.

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

12.1.2. Огляд найбільш важливих властивостей, методів і подій

Властивість State визначає поточний стан НД. Воно може приймати наступні значення:



dsInactivate – НД закритий, дані недоступні;

dsBrowse – дані можна переглядати, але не можна змінювати;

dsEdit – дані поточної запису можна редагувати;

dsInsert – може вставлятися новий запис;

dsSetKey – НД знаходиться в режимі пошуку записів;

dsCalcFields – виконується установка значень полів, що обчислюються, (по алгоритму, що заданий в оброблювачі події OnCalcFields);

dsFilter – НД знаходиться в режимі фільтрації записів (для поточного запису перевіряється умова фільтрації, що задана в оброблювачі події OnFilterRecord).
На Рис. 12.1 показана діаграма станів НД і можливих переходів між ними. Перехід з одного стану в інший відбувається при виклику тих чи інших методів.


Open, Close

Insert, Append


Post,

Edit, Cancel Post, Cancel




OnFilterRecord OnCalcFields
Рис. 12.1. Діаграма станів і переходів НД.
Це такі методи:

Open відкриває з'єднання НД із БД (властивість Active встановлюється в True). Властивість State встановлюється в значення dsBrowse;

Close – закриває з'єднання з БД (властивість Active встановлюється в False). Властивість State встановлюється в значення
dsInactivate;

Edit – НД переводиться в стан редагування. Властивість State встановлюється в значення dsEdit;

Insert – НД переводиться в стан вставки нового запису. Властивість State встановлюється в значення dsInsert;

Append те ж, що і Insert, але запис додається в кінець НД;

Post – виробляється пересилання даних поточного запису в БД.
Крім властивості State розглянемо ще такі властивості:

Active – при установці цієї властивості в True установлюється з'єднання з БД (викликається метод Open);

DataBaseName – псевдонім БД, з яким установлюється зв'язок даного НД. Значення вибирається зі списку, що випадає;

Bof – приймає значення True, якщо поточним є перший запис (курсор установлений на перший запис);

Eof - приймає значення True, якщо курсор змістився за останній запис.

12.1.3. Навігація по НД



Поточним записом називають той запис, дані якого в даний момент доступні в прикладної програмі. З поняттям поточного запису зв'язане поняття курсору НД. Курсор НД указує на поточний запис.

Під навігацією по НД розуміється переміщення курсору від одного запису до іншого.

Для навігації по НД використовуються методи:

First – переміщення курсору на перший запис;

Last – переміщення курсору на останній запис;

Next – переміщення курсору на наступний запис;

Prior – переміщення курсору на попередній запис;

MoveTo(i) - переміщення курсору на i записів.
Якщо НД знаходиться в стані редагування (dsEdit) чи вставки нового запису (dsInsert), то при переміщенні до нового запису автоматично викликається метод Post, що пересилає дані з поточного запису в БД, якщо у ньому були виконані зміни.

Розглянемо простий приклад навігації з програмного коду. Нехай, потрібно підрахувати кількість записів, що маються в НД. Це можна зробити шляхом послідовного “перегляду” усіх записів у НД. Фрагмент коду програми, у якому підраховується число записів у таблиці Table_Stud, має наступний вид:

. . . . . . . . .

n:=0;

Table_Stud.First;

while not Table_Stud.Eof do

Begin

n:=n 1;

Table_Stud.Next;

End;

. . . . . . . . . .

Label1.Caption:=IntToStr(n);

. . . . . . . . . . . . . . . . . .

Для підрахунку кількості записів тут використовується змінна n. Мітка Label1 використовується для відображення отриманого результату n. IntToStr – це функція, за допомогою якої виробляється перетворення цілого значення n у строковий тип даних. Отримане строкове представлення n привласнюється властивості строкового типу Caption.



12.1.4. Фільтрація записів у НД

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

Властивості, що використовуються для фільтрації, це наступні:

Filter – властивість строкового типу, у якої задається умова фільтрації. Так само, як і в інструкції WHERE в операторі SELECT, умова фільтрації задається логічним виразом. Наприклад:
(Fam =‘F*’)AND(GodRogd>1983).

Filtered – властивість логічного типу, у якої можуть встановлюватися такі значення:

False – фільтрація виключена;

True – фільтрація включена.

FilterOptions – властивість множинного типу, у якої можна задати опції (додаткові умови) фільтрації. У властивості можуть бути задані такі константи:

foCaseInsensitive – не враховувати регістр символів;

foNoPartialCompare – перевірка на повний збіг.

Таким чином, для включення фільтра потрібно наступне:



  1. у властивості Filter задати умова фільтрації. Наприклад:

Table_Stud.Filter:=(Fam=‘F*’)AND(GodRogd > 1983);

  1. властивість Filtered установити в значення True. Наприклад:
    Table_Stud.Filtered:=True;

Зазначені дії по включенню і виключенню фільтра можна робити, наприклад, в оброблювачах події натискання відповідних кнопок (подія OnClick).

Для того, щоб задати умова фільтрації без обліку регістра символів, потрібно у властивості FilterOptions указати:



Table_Stud.FilterOptions:=[foCaseInsensitive];

12.2. Відмінні риси компонента TQuery

Як уже відзначалося, клас компонентів TQuery (як і TTable) породжений від класу TDataSet. Отже, усі розглянуті вище властивості і методи класу TDataSet рівною мірою доступні й у компонентах TQuery.

Основна відмінність компонента TQuery (це уже відзначалося) полягає в тому, що набір даних формується на основі оператора SELECT. Компонент TQuery рекомендується використовувати для доступу до віддалених БД, що працюють в архітектурі “клієнт-сервер”.

У палітрі компонентів Delphi компонент TQuery (так само, як і TTable) розташований на сторінці Data Access. Значок компонента має вид .

У компонента TQuery є властивість SQL – властивість текстового типу, у якої міститься текст SQL-запиту (оператора SELECT). Текст SQL-запиту можна ввести як за допомогою Інспектора Об'єктів, так і в програмі.

Розглянемо, як задати властивість SQL за допомогою Інспектора Об'єктів.

Помістити на форму компонент TQuery і у її властивості
DataBaseName установити псевдонім БД, з якої передбачається одержувати дані. Після цього у вікні Інспектора Об'єктів потрібно виділити властивість SQL. Рядок властивості має наступний вид: . У цьому рядку потрібно натиснути кнопку, у результаті чого відкриється вікно текстового редактора, у якому необхідно ввести текст SQL-запиту.

Текстовий редактор - комп'ютерна програма-застосунок, призначена для створення й зміни текстових файлів (вставки, видалення та копіювання тексту, заміни змісту, сортування рядків), а також їх перегляду на моніторі, виводу на друк, пошуку фрагментів тексту тощо.
Вид вікна цього редактору і приклад тексту SQL-запиту показаний на Рис. 12.2.

Цим запитом у компонент TQuery будуть поміщені всі записи з таблиці СТУДЕНТИ. Після введення тексту запиту натисніть кнопку ОК. Текст запиту буде збережений у властивості SQL. Вікно редактора закриється.



Рис. 12.2. Вікно редактора властивості SQL
Правильність тексту запиту перевіряється тільки при відкритті набору даних, тобто при установці властивості Active у значення True.

Якщо при спробі установити властивість Active у значення True з'явиться повідомлення про помилку, варто повернутися в редактор тексту SQL-запиту, виправити помилки і знову спробувати установити з'єднання з БД (властивість Active установити в True). В іншому робота з компонентом TQuery аналогічна роботі з компонентом TTable.



12.3. Створення зв'язків між НД типу “один до кількох”


Технологія зв'язування НД TTable і TQuery реалізується по різному. Розглянемо коротко суть кожної з них. Для конкретності будемо розглядати приклад створення зв'язку між таблицями ГРУПИ (головна) і СТУДЕНТИ (підлегла).

Відзначимо також одну обов’язкову вимогу – поля, що будуть використовуватися як ключі зв'язку, повинні бути індексованими. Це повинно бути зроблене раніше, при створенні таблиць у СУБД Access.



12.3.1. Створення зв'язку “один до кількох” між НД TTable

Методика створення зв'язку між НД TTable наступна:



    1. Закрити підлеглий НД (для цього властивість Active компонента
      Table_Stud установити в False);

    2. У властивості MasterSource підлеглого НД (Table_Stud) установити ім'я джерела даних, зв'язаного з НД, що повинен бути головним (у нашому прикладі це компонент DataSource_Grupp);

3) У властивості MasterFields установити поля, що повинні бути ключами зв'язку в створюваному зв'язку. Для цього можна використовувати Майстер зв'язування полів, який відкривається при натисканні кнопки у рядку властивості MasterFields: . Вікно Майстра зв'язування полів має вид, показаний на Рис. 12.3.

Рис. 12.3. Майстер зв'язування полів (вибір полів зв'язку)

У списках полів підлеглого НД (ліворуч) і головного НД (праворуч) виділити (мишею) поля, по яких повинен встановлюватися зв'язок між НД. У розглянутому прикладі це однойменні поля КодГр. Після їх виділення натисніть кнопку Add. В області Joined Fields (зв'язані поля) з'явиться зображення створюваного зв'язку, як це показано на Рис. 12.4.


Рис. 12.4. Майстер зв'язування полів (поля зв'язку обрані)
У вікні Інспектора Об'єктів у властивості MasterFields з'явиться ім'я поля зв'язку головного НД КодГр. Одночасно у властивості IndexFieldNames з'явиться ім'я індексованого поля підлеглого НД (у нашому прикладі – це так само КодГр);

4) Відновити з'єднання підлеглого НД із БД (властивість Active підлеглого НД Table_Stud установити в True).


Зв'язок між НД Table_Grupp (головний) і НД Table_Stud (підлеглий) створений.

Тепер можна перевірити роботу створеного зв'язку в такий спосіб. При виборі якого-небудь запису в сітці DBGrid_Grupp, що зв'язана з головним НД, у сітці DBGrid_Stud, яка зв'язана з підлеглим НД Table_Stud, будуть відображатися тільки ті записи, що відносяться до обраної групи.



12.3.2. Створення зв'язку “один до кількох” між НД TQuery

Так само будемо розглядати приклад, коли є створені на основі компонентів TQuery НД Query_Grupp і Query_Stud, у яких представлена інформація відповідно з таблиць ГРУПИ і СТУДЕНТИ. Створення зв'язку “головний-підлеглий” між цими НД у цьому випадку виробляється в наступній послідовності:



  1. Закрити підлеглий НД (властивість Active компонента Query_Stud установити в False);

  2. Викликати текстовий редактор SQL-запиту (так само, як розглянуто вище) і ввести такий текст:

SELECT *

FROM СТУДЕНТИ

WHERE КодГр =: КодГр

Додана інструкція WHERE, у якій задана умова добору по рівності значень поля КодГр і значення параметра, що заданий ім'ям після двокрапки (після “=:”). Як параметр необхідно задати ім'я поля – ключа зв'язку головного НД. Задаємо – КодГр.



  1. У властивості DataSource необхідно установити ім'я джерела даних, з якого повинні виходити поточні значення параметра. У нашому прикладі у властивості DataSource установимо значення DataSource_Grupp – ім’я компонента – джерела даних, що зв’язаний з головним НД. Завдяки цьому як параметр у SQL-запит буде передаватися значення поля КодГр із НД Query_Grupp, що відповідає значенню зі поточного запису (обраного в сітці BGrid_Grupp).

  2. Відкрити підлеглий НД Query_Stud (його властивість Active установити в значення True).

Зв'язок “головний-підлеглий” між НД Query_Grupp і Query_Stud встановлено.

Переконатися в “роботі” зв'язку можна так само, як і раніше: у сітці DBGrid_Stud повинні відображатися тільки ті дані, що відповідають поточній групі, обраної в даний момент у сітці головного НД DBGrid_Grupp.



12.4. Об'єкти-поля в наборах даних




12.4.1. Клас об'єктів-полів TField

Набір даних (НД) складається з записів, а записи складаються з полів. Окремі поля представляються об'єктами, породженими від класу TField.

Клас TField є абстрактним і безпосередньо не використовується. Використовуються його типізовані нащадки. На Рис. 15.1 показаний фрагмент ієрархії класів і деякі з типізованих класів-полів.

TComponent





Каталог: uploads
uploads -> Ііі міжнародний економічний саміт «Україна І світ. Новий діалог»
uploads -> Інформація про роботодавців Одеси (перелік відсортований за розміром штату співробітників у місті) Компанія Проекти і технології
uploads -> Методичні вказівки до лабораторних робіт з дисципліни: " Програмування мобільних пристроїв " для студентів напряму підготовки
uploads -> Оголошення про тендер (rfq) Номер rfq: ucbi-062-с дата оголошення: 13 листопада 2015 Кінцевий термін подання: 20 листопада 2015 Опис: Постачання it обладнання для зони митного оформлення в Одесі
uploads -> О. К. Юдін, директор Інституту комп’ютерних інформаційних технологій, д-р техн наук, професор
1   ...   12   13   14   15   16   17   18   19   20



  • 12.1.2. Огляд найбільш важливих властивостей, методів і подій
  • 12.1.3. Навігація по НД
  • 12.1.4. Фільтрація записів у НД
  • 12.2. Відмінні риси компонента TQuery
  • 12.3. Створення звязків між НД типу “один до кількох”
  • 12.3.1. Створення звязку “один до кількох” між НД TTable
  • 12.3.2. Створення звязку “один до кількох” між НД TQuery
  • 12.4. Обєкти-поля в наборах даних