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

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



Ярцев в. П. Створення та обробка баз даних на пеом

Ярцев в. П. Створення та обробка баз даних на пеом




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

11. Проект Delphi. Структура програми БД

11.1. Проект Delphi і його компіляція

11.1.1. Склад проекту

Додаток може містити довільне число форм і використовувати будь-як інтерфейс (MDI або SDI). Звичайно одна форма відповідає за виконання групи однорідних операцій, об'єднаних загальним призначенням. В основі будь-якого додатка баз даних лежать набори даних, що являють собою групи записів (їхній зручно представити у виді таблиць у пам'яті), переданих з бази даних у додаток для перегляду і редагування.

Створювана в середовищі Delphi програма складається з декількох елементів (файлів), що поєднуються в один проект. До складу проекту входять наступні файли:


  • файл проекту (розширення .dpr) – текстовий файл, що містить інформацію про склад проекту й оператори ініціалізації і запуску програми на виконання;

  • файл форми (розширення .dfm) – текстовий файл, що містить опис форми (склад форми, властивості форми і розміщених у ній компонент і ін.);

  • файл модуля (розширення .pas) – текстовий файл, що містить код (текст програми мовою Object Pascal). Файл модуля завжди створюється для кожної форми. Також може бути створений окремий файл модуля, не зв'язаний з формою.

  • файл параметрів проекту (розширення .dof)текстовий файл, що містить поточні установки параметрів проекту (параметри компіляції, компонування і т.п.);

  • файл конфігурації проекту (розширення .cfg) – текстовий файл, призначений для збереження параметрів середовища Delphi;

  • файл ресурсів проекту (розширення .res) – двоичный файл, що містить піктограму проекту й інші ресурси, використовувані в проекті (курсори й ін.)

При запуску Delphi автоматично створюється проект з ім'ям за замовчуванням Project1. Цей проект має у своєму складі одну форму з ім'ям Form1.

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



Для збереження проекту потрібно виконати команду меню FileSave Project as. При цьому послідовно будуть відкриватися два вікна:

  1. У першому вікні (Save Unit1 as) потрібно установити папку, у якій будуть зберігатися усі файли проекту, і ввести ім'я файлу модуля форми. За замовчуванням пропонується ім'я Unit1.pas. Ви введіть - Lab6_Un1.pas (для лабораторної роботи 6) і натисніть кнопку Зберегти. Після цього відкриється друге вікно для збереження файлу проекту.

  2. В другому вікні (Save Project1 as) потрібно ввести ім'я файлу проекту. За замовчуванням пропонується ім'я Project1.dpr. Ви введіть - Lab6.dpr і знов натисніть кнопку Зберегти.

Після виконання цих подій проект буде збережений.

У майбутньому, на практичних заняттях вам потрібно створити окремі папки: Lab6, Lab7,…, призначені для збереження проектів для кожної з лабораторних робот. Ці папки створюються у “вашій” папці, у якої ви зберігаєте учбову БД Access. Структура створюваних папок повинна відповідати Рис. 11.1.

Типова помилка, що допускають студенти при виконанні лабораторних робіт – це збереження файлів проекту і модулів у різних папках. Щоб уникнути цієї помилки рекомендується закрити проект (не закриваючи середовище), перевірити наявність усіх файлів у папці, а потім знову відкрити проект через Головне меню: FileOpen Project...


С:\




L


СОБД
ab6.dpr

L
АД-21


ab6_Un1.pas

L


Lab6
ab6_Un1.dfm

Lab6.dof

L
Lab7
ab6.res

Lab6.cfg


Lab8

Lab9



Рис. 11.1 Структура папок для проектів




11.1.2. Компіляція і виконання проекту

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

Процес створення exe-файлу схематично зображений на Рис. 11.2.

Після першої компіляції і зборки в папці проекту повинні з'явитися ще такі файли:



  • відкомпільований файл модуля (.dcu) – створюється для кожного вихідного файлу модуля (.pas);

  • файл, що виконується, (.exe) - файл прикладної програми, що може виконуватися під керуванням ОС Windows без середовища Delphi.

Для тільки компіляції проекту необхідно виконати команду меню ProjectCompile Project чи натиснути комбінацію клавіш «Ctrl F9».

Для компіляції і виконання проекту потрібно виконати команду меню RunRun чи натиснути клавішу «F9».

Для покрокового виконання програми, що буває необхідно під час її налагоджування, варто натиснути клавішу «F8».

Для примусового завершення програми потрібно натиснути комбінацію клавіш «Ctrl F2».
Ф
.dcu
орма


.dfm

.dcu

.pas

.exe

.dcu

. . . . . . . .

Модуль


.pas


.dof

.res

Рис. 11.2. Схема процесу створення exe-файлу




11.1.3. Схема взаємодії програми Delphi із БД

Прикладна програма БД, створена в Delphi (і не тільки в Delphi), взаємодіє з БД через посередника – процесор БД BDE (Borland DataBase Endgine). BDE реалізує всі операції безпосереднього доступу до даних і керування даними. BDE являє собою набір DLL-бібліотек, що містять процедури і функції низькорівневого доступу до даних. На Рис. 11.3 зображена узагальнена схема взаємодії прикладної програми з локальними і віддаленими БД.

Коли програмі Delphi потрібно зв'язатися з БД, вона звертається до BDE і повідомляє йому псевдонім (зареєстроване ім'я) БД і ім'я потрібної таблиці. Псевдонім крім імені БД містить також інформацію про тип драйвера, що повинний використовуватися з цієї БД. Драйвер – це допоміжна програма, що реалізує операції доступу до даних конкретної СУБД, вона як би “знає”, як звертатися до інформації БД цього типу. У BDE маються власні драйвери для найбільш розповсюджених СУБД: Paradox, dBase, FoxPro, Access.

Якщо в BDE є власний драйвер для даної СУБД, BDE відразу використовуючи його зв'язується з БД і потрібною таблицею в ній, обробляє запит користувача, і повертає в прикладну програму результати обробки.

Якщо в BDE власного драйвера для потрібної СУБД немає, то можна використовувати драйвери ODBC (Open DataBase Connectivity – відкритий інтерфейс підключення до БД). ODBC – це також бібліотека DLL, по функціях подібна BDE, але розроблена MicroSoft. У ODBC MicroSoft включила драйвери для доступу практично до будь-яких відомих у даний час СУБД (SyBase, MS SQL Server, Oracle, InterBase і ін.). Завдяки цьому і програми Delphi можуть працювати з БД цих СУБД через драйвери ODBC.

У Delphi 7 і наступних версіях введені альтернативні BDE можливості роботи з БД – це технологія ADO (Active Data Objects). ADO надає інтерфейс користувача до будь-яких типів даних, включаючи реляційні і не реляційні БД, електронну пошту, системні, текстові і графічні дані. Зв'язок з даними здійснюється за допомогою технології OLE DB.

У Delphi 6 альтернативні можливості доступу до БД розширені за рахунок технології dbExpress. Це набір драйверів, що забезпечують доступ до серверів SQL на основі єдиного інтерфейсу.

Однак, зараз використання BDE поки все-таки залишається основним і найбільш розповсюдженим засобом для доступу прикладних програм до БД.

Разом з BDE поставляється спеціальна програма-утиліта BDE Administrator, за допомогою якої можна переглядати, редагувати і створювати нові псевдоніми БД.

Звичайно програма BDE Administrator включається в папку “Панель керування”


Програма БД Delphi





DBD

BDE Administrator






Драйвери локальных БД:

Paradox,

dBase,

FoxPro,

Access.

Драйвери ODBC



Мережні протоколи TCP/IP,…








SQL-сервер:

Sybase,

MS SQL,

Oracle,

InterBase








Рис. 11.3. Загальна схема взаємодії програми Delphi з БД




11.2. Основні компоненти Delphi для роботи з БД

Як ми вже знаємо, будь-яка прикладна програма Delphi будується на основі використання тих чи інших компонентів. Програма БД використовує спеціальні компоненти, призначені для роботи з БД. Серед них є як не візуальні, так і візуальні компоненти. Не візуальні компоненти призначені для забезпечення доступу до даних і витягу з БД інформації, що потім може оброблятися прикладною програмою і відображатися у візуальних компонентах.

О
TObject
сновні не візуальні компоненти включені в загальну ієрархію класів Delphi. Фрагмент цієї ієрархії з найбільш важливими компонентами зображений на Рис. 11.4.

TComponent







TDataSource



TDataSet

TDataBase

TSession


TBDEDataSet



TField


TDBDataSet



TStringField





TNumericField


TTable



TQuery

TDateTimeField

Рис.


11.4. Компоненти Delphi для роботи з БД
Розглянемо призначення найбільш важливих класів компонентів, призначених для роботи з БД.

Модуль даних. Для розміщення компонентів доступу до даних у додатку баз даних бажано використовувати спеціальну "форму" — модуль даних (клас TDataModule).

Модуль даних не має нічого загального зі звичайною формою додатка, адже його безпосереднім предком є клас TComponent.

У модулі даних можна розміщати тільки невізуальні компоненти. Модуль даних доступний розроблювачеві, як і будь-який інший модуль проекту, на етапі розробки. Користувач додатка не може побачити модуль даних під час виконання.

Для створення модуля даних можна скористатися палітрою об'єктів або головним меню Delphi. Значок модуля даних Data Module розташований на сторінці New.

Модуль даних має мало загального зі стандартною формою, хоча б тому, що клас TDataModule відбувається безпосередньо від класу TComponent. У нього майже цілком відсутні властивості і методи-оброблювачі подій, адже від платформи для інших невізуальних компонентів майже нічого не потрібно, хоча нащадки модуля даних, що працюють у розподілених додатках, виконують досить важливу роботу.

Для створення структури (моделі, діаграми) даних, з яким працює додаток, можна скористатися можливостями, наданими сторінкою Diagram Редактори коду.

Любою елемент з ієрархічного дерева компонентів модуля даних можна перенести на сторінку діаграми і задати зв'язку між ними. За допомогою керуючих кнопок можна задавати між елементами діаграми відносини синхронного перегляду і головний/підлеглий. При цьому виробляється автоматичне настроювання властивостей відповідних компонентів. Для звертання компонентів доступу до даних, розташованим у модулі даних, з інших модулів проекту необхідно включити ім'я модуля в секцію uses:

unit InterfaceModule;

...

implementation



uses DataModule;

...


DataModule.Tablel.Open;
Перевагою розміщення компонентів доступу до даних у модулі даних є те, що зміна значення будь-якої властивості проявиться відразу ж у всіх звичайних модулях, до яких підключений цей модуль даних. Крім цього, всі оброблювачі подій цих компонентів, тобто вся логіка роботи з даними додатка, зібрані в одному місці, що теж досить зручно.

Кожен набір даних инкапсулирован у спеціальному компоненті доступу до даних. У VCL Delphi реалізований набір базових класів, що підтримують функціональність наборів даних, і практично ідентичні по складу набори дочірніх компонентів для технологій доступу до даних. Їхній загальний предок —клас TDataSet.



TDataSet – базовий клас, що забезпечує функціонування наборів даних у програмі Delphi. Під набором даних (НД) розуміється підмножина записів, отриманих з однієї чи декількох таблиць БД і розташована у оперативної пам'яти. Основне призначення класу TDataSet – визначити основні властивості і методи для роботи з реляційними наборами даних, що не залежать від BDE.

TBDEDataSet – безпосередній нащадок класу TDataSet , що забезпечує реалізацію найважливіших властивостей і методів роботи з НД за рахунок звертання до функцій BDE.

TDBDataSet – клас, у якому додається до успадкованих нові властивості і методи, що забезпечують з'єднання НД із БД. Цій клас є безпосереднім предком основних компонентів доступу до даних TTable і TQuery.

TTable – клас, що реалізує НД, джерелом якого є одна таблиця БД. Містить багато властивостей і методів, за допомогою яких можна виконувати над набором даних багатий спектр операцій. Більшість з них перевизначають властивості і методи, визначені в компонентах-предках TDataSet і TBDEDataSet.

TQuery – клас, цілком аналогічний класу TTable, однак відрізняється від нього тим, що може містити дані, отримані з однієї чи декількох таблиць БД. Зміст інформації у цьому НД визначається його властивістю, що є SQL-запитом.

TDataSource – клас компонента, що називається “джерелом даних” і призначений для зв'язування компонента НД (TTable чи TQuery) з візуальними компонентами.

TField – клас, що представляє окреме поле (стовпчик) НД. Містить властивості і методи, що визначають поведінку і параметри поля. Клас є абстрактним і безпосередньо ніколи не використовується. Він використовується як батьківський для створення похідних класів, що реалізують поля конкретних типів, наприклад:

TStringField – клас полів строкового типу;

TNumericField – клас полів числового типу;

TDateTimeField – клас полів типу “Дата/Час”, і ін.

Безпосередньо в прикладної програмі з розглянутих компонентів ми будемо використовувати тільки компоненти TQuery, TTable і TDataSource. Вони розміщаються на формі прикладної програми (чи в спеціальному модулі). Під час виконання програми вони не відображаються. Похідні від TField класи використовуються для доступу до полів із програмного коду.

Початковий код (англ. source code; також перекладається українською як вихідний код, програмний код, джерельний код, первинний код, текст програми, у професійному середовищі також сирцевий код, у контексті код або сирці) - будь-який набір інструкцій або оголошень, написаних комп'ютерною мовою програмування у формі, що її може прочитати і модифікувати людина.



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

Найбільш розповсюдженими (ми їх будемо використовувати при виконанні лабораторних робіт) є наступні візуальні компоненти:



TDBText – відображає значення одного поля з поточного запису НД у режимі “тільки для читання” (змінюватися дані не можуть).

TDBEdit – забезпечує як перегляд, так і редагування значення поля у поточному запису даного НД.

TDBGrid – відображує на екрані зміст полів НД у виді таблиці, у якій рядки відповідають записам, а стовпці – полям НД. Це дуже могутній і зручний компонент, який ми будемо використовувати у всіх лабораторних роботах.

TDBNavigator – дозволяє здійснювати навігацію по НД, переводити НД у стани вставки, зміни, додавання запису, запам'ятовувати зміни у даних.

Отже, ми змогли тільки перерахувати і коротко охарактеризувати найбільш важливі компоненти, призначені для роботи з БД. Більш докладно ми ще познайомимося з ними в процесі наступних занять.


11.3. Структура програми БД Delphi

Будь-яка програма Delphi, яка призначена для роботи з БД, завжди містить у собі як мінімум три наступних компоненти:



  • компонент, що є НД (TTable чи TQuery);

  • компонент – джерело даних (TDataSource);

  • який-небудь візуальний компонент для відображення і (чи) редагування даних (TDBGrid, TDBEdit, …).

З обліком цього раніше розглянуту схему зв'язку прикладної програми з БД тепер можна деталізувати в такий спосіб (Рис. 11.5):




Компонент відображення даних


TDBGrid чи ін.


Компонент - джерело даних



Прикладна



програма

TDataSource


Компонент - НД






Ttable чи TQuery

Псевдонім БД



Драйвер БД


BDE


Рис. 11.5. Схема доступу до даних з прикладної програми БД Delphi


Компонент доступу до даних є основою додатка баз даних. На основі обраної таблиці БД він створює набір даних і дозволяє ефективно керувати їм. У процесі роботи такий компонент тісно взаємодіє з функціями відповідної технології доступу до даних. Звичайно доступ до функціональності технології доступу до даних здійснюється через сукупність інтерфейсів. Усі компоненти доступу до даних є невізуальними. Для створення нового проекту досить вибрати команду New \Application з меню File або скористатися Репозиторием об'єктів, що відкривається командою New з меню File.

У реальних проектах для розміщення компонентів доступу до даних варто використовувати модуль даних. Потім на форму нового проекту необхідно перенести компонент, инкапсулирующий набір даних, і виконати наступні дії.

Відкриття і закриття набору даних можна передбачити як реакцію на дії користувача або виникнення події. Найчастіше набір даних повинний відкриватися при першому показі форми і закриватися при її закритті.

Компонент TTable створює в оперативній пам'яті “образ” реального НД (таблиці), з яким і виконуються всі подальші дії над даними в програмі.

Якщо використовується компонент TQuery, то НД може містити дані з декількох таблиць відповідно до заданого у компоненті SQL-запиту.

Для забезпечення зв'язку набору даних з візуальними компонентами відображення даних використовується спеціальний компонент TDataSource. Його роль полягає в керуванні потоками даних між набором даних і зв'язаними з ним компонентами відображення даних. Цей компонент забезпечує передачу даних у візуальні компоненти і повернення результатів редагування в набір даних, відповідає за зміну стану візуальних компонентів при зміні стану набору даних, передає сигнали керування від користувача (візуальних компонентів) у набір даних. Компонент TDataSource розташований на сторінці Data Access Палітри компонентів.

Компонент TDataSource керує потоком даних між НД і зв'язаним з ним компонентом відображення даних. Він синхронізує стан компонента відображення даних з поточним станом НД. Наприклад, при переміщенні по записах НД поточні значення полів у компоненті відображення даних автоматично обновляються.

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

З одним компонентом TDataSource можуть бути зв'язані кілька візуальних компонентів відображення даних. Ці компоненти являють собою модифіковані елементи керування, що призначені для показу інформації з наборів даних.

При відкритті набору даних компонентів забезпечує передачу в набір даних записів з необхідної таблиці БД. Курсор набору даних установлюється на перший запис. Компонент TDataSource організує передачу в компоненти відображення даних значень необхідних полів з поточного запису. При переміщенні по записах набору даних поточні значення полів у компонентах відображення даних автоматично обновляються.

Користувач за допомогою компонентів відображення даних може переглядати і редагувати дані. Змінені значення відразу ж передаються з елемента керування в набір даних за допомогою компонента TDataSource. Потім зміни можуть бути передані в базу даних або скасовані.

Як тільки компонент - НД (TTable чи TQuery) одержує команду зв'язатися з БД, то далі відбувається наступне:



  1. Компонент - НД пересилає відповідний запит до BDE;

  2. BDE за інформацією псевдоніма БД визначає тип необхідного драйвера, виділяє для нового процесу необхідні ресурси, робить трансляцію запиту відповідно до особливостей драйвера використовуваної СУБД;

  3. При роботі з локальною БД драйвер безпосередньо звертається до таблиць БД (якщо виконується звертання до SQL-сервера, то викликається ще відповідне клієнтське програмне забезпечення сервера);

  4. Результат виконання запиту повертається в компонент - НД (TTable чи TQuery).



11.4. Етапи створення прикладної програми БД

Тепер розглянемо найбільш важливі моменти технології проектування прикладної програми БД. Вище ми вже встановили, що будь-яка програма БД повинна містити, як мінімум, три компоненти:



  • компонент - НД, у якому містяться дані з якої-небудь таблиці;

  • компонент - джерело даних, призначений для передачі даних між компонентом - НД і компонентами відображення даних;

  • компонент відображення даних (візуальний компонент).

Таких “трійок” компонентів у прикладної програми може бути багато, однак, спосіб їхнього включення в програму і настроювання однаковий. Відповідно до цього розглянемо три етапи, що полягають у розміщенні і настроюванні цих трьох типів компонентів.

Для зручності і наочності викладу будемо вирішувати конкретну задачу – будемо розглядати приклад розміщення компонентів для відображення списку студентів з таблиці СТУДЕНТИ навчальної БД.



Етап 1. Розміщення і настроювання компонента TTable

  1. Помістити на форму компонент TTable (зі сторінки Data Access палітри компонентів);

  2. У вікні Інспектора Об'єктів для властивості DataBaseName установити (вибрати зі списку, що випадає) значення псевдоніма навчальної БД "UchProcess_AD21", що вже зареєстроване в BDE;

  3. У властивості TableName установити ім'я таблиці, з якою повинний бути зв'язаний даний компонент. Зі списку, що випадає, виберіть ім'я таблиці СТУДЕНТИ;

  4. У властивості Name увести з клавіатури ім'я компонента. За замовчуванням пропонується ім'я Table1. Для таблиці СТУДЕНТИ введемо Table_Stud;

  5. У властивості Active установити значення True (вибором зі списку, що випадає, чи подвійним клацанням миші). Якщо це вдалося зробити, це значить, що зв'язок із БД встановлений, тобто у компонент поміщені дані з таблиці СТУДЕНТИ.

На Рис. 11.6 показаний вид екрана з вікном Інспектора Об’єктів і вікном Редактора форми при розміщенні компонента Table_Stud.

Рис. 11.6. Розміщення компонента Table_Stud




Етап 2. Розміщення і настроювання компонента TDataSource

    1. Помістити на формі компонент TDataSource (сторінка Data Access);

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

3) Перейменувати компонент. Це не обов'язкова дія. Проте бажано привласнювати компонентам осмислені імена, що відповідають назвам зв'язаних наборів даних. Звичайна назва компонента комбінує ім'я набору даних .

Компонент TDataSource можна підключити не тільки до набору даних з тієї ж

форми, але і будь-який іншої, модуль якої зазначений у секції uses.

У властивості Name увести з клавіатури ім'я компонента. За замовчуванням

пропонується DataSource1. Уведіть значення DataSource_Stud.

Найчастіше одному наборові даних відповідає один компонент TDataSource, хоча них може бути кілька.

Компонент TDataSource має ряд корисних властивостей і методів.

Отже, зв'язування з компонентом набору даних виконує властивість property DataSet: TDataSet, а визначити поточний стан набору даних можна,

використовувавши властивість

type TDataSetState = (

dslnactive, dsBrowse, dsEdit, dslnsert, dsSetKey, dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead, dsInternalCalc);

property State: TDataSetState.

За допомогою властивості property Enabled: Boolean можна включити або відключити всі зв'язані візуальні компоненти. При значенні False жоден зв'язаний компонент відображення даних не буде працювати.

Властивість property AutoEdit: Boolean, при значенні True завжди буде переводити набір даних у режим редагування при одержанні фокуса одним зі зв'язаних візуальних компонентів.

Аналогічно, метод procedure Edit; переводить зв'язаний набір даних у режим редагування.

Метод function IsLinkedTo(DataSet: TDataSet): Boolean; повертає значення True, якщо компонент, зазначений у параметрі DataSet, дійсно зв'язаний з даним компонентом TDataSource.

Метод-оброблювач type TDataChangeEvent = procedure(Sender: TObject; Field: TField) of object; property OnDataChange: TDataChangeEvent; викликається при редагуванні даних в одному зі зв'язаних візуальних компонентів.

Метод-оброблювач property OnUpdateData: TNotifyEvent; викликається перед збереженням змін у базі даних.

Метод-оброблювач property OnStateChange: TNotifyEvent; викликається при зміні стану зв'язаного набору даних

Етап 3. Розміщення і настроювання компонента відображення даних (на прикладі TDBGrid)

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

1. Помістити на формі компонент TDBGrid (сторінка Data Controls).

Зв'язати компонент відображення даних і компонент TDataSource. Для цього використовується властивість Datasource, що повинна вказувати на екземпляр необхідного компонента TDataSource. Один компонент відображення даних можна зв'язати тільки з одним компонентом TDataSource. Необхідний компонент можна вибрати в списку властивостей в Інспекторі об'єктів. У властивості DataSource вибрати зі списку, що випадає, ім'я джерела даних, з яким потрібно зв'язати компонент DBGrid_Stud. У списку, що випадає, виберіть компонент – джерело DataSource_Stud.

У властивості Name увести з клавіатури ім'я компонента. За замовчуванням пропонується DBGrid1. Уведіть значення DBGrid_Stud.

2. Задати поле даних. Для цього використовується властивість DataField типу TFields. У ньому необхідно вказати ім'я полю чи зв'язаного набору даних. Після завдання властивості Datasource поле можна вибрати зі списку. Цей етап застосовується тільки для компонентів, що відображають єдине поле.

Після цього в сітці DBGrid_Stud повинні з'явитися реальні дані з таблиці СТУДЕНТИ (але тільки за умови, якщо в компоненті Table_Stud раніше властивість Active була встановлена в значення True).

Після виконання цього етапу вид екрана комп'ютера може бути приблизно такий, як це показано на Рис. 11.7.

Відкриття і закриття набору даних можна передбачити як реакцію на дії користувача або виникнення події. Найчастіше набір даних повинний відкриватися при першому показі форми і закриватися при її закритті.

Листинг 1. Секція Implementation головного модуля проекту

implementation

{$R *.DFM}

procedure TForml.FormShowfSender: TObject);

begin


try

Table_stud.Open;

except

ShowMessage('Table open error');



end;

end;


procedure TForml.FormClose(Sender: TObject; var Action: TCloseAction);

begin


Table_stud.Close;

end;


end.
При відкритті форми виконується метод оброблювач FormShow. У ньому набір даних відкривається за допомогою методу Open. Зверніть увагу на використання конструкції try..except, що забезпечує коректне завершення при виникненні виняткових ситуацій. Тому що помилки в роботі додатків баз даних можуть привести до серйозних наслідків (втрата або перекручування даних), те захисний код повинний бути присутнім у всіх критичних місцях. У методі-оброблювачі FormClose, що викликається при закритті форми, набір даних закривається методом close. Для виконання розглянутих операцій можна скористатися і властивістю Active. Однак реальні операції виконують зазначені методи. Тому використання властивості є зайвим етапом, та й з погляду ООП усі дії повинні виконувати методи об'єкта, а властивості служать тільки для представлення значень. Властивість Active сигналізує стан набору даних.

Тепер можна відкомпілювати проект і переконатися, що в сітці DBGrid_Stud можна переглядати і редагувати дані з таблиці СТУДЕНТИ створеної раніше навчальної БД. На Рис. 11.8 зображено схему зв'язків між компонентами, яка створюється в результаті дій, виконаних у розглянутих вище етапах.



Рис. 11.7. Розміщення компонента DBGrid_Stud

Зв’язок візуального компонента з компонентом – джерелом даних (TDataSourse) встановлюється завдяки того, що у властивість DataSource записується ім’я (Name) компонента – джерела даних. Зв’язок компонента TDataSourse з компонентом – НД (TTable чи TQuery) встановлюється через властивість DataSet, в якої записується ім’я (Name) компонента – НД. Зв’язок компонента – НД з БД встановлюється через властивість DataBaseName, що є псевдонімом БД. На Рис. 11.8 зображено компонент TDataBase (за замовчуванням його ім'я DataBase1), який ми раніше не згадували. Цей компонент завжди автоматично включається в будь-яку програму Delphi, яка працює з БД. Для розглянутої нами найпростішої програми установлювати які-небудь його властивості цього компонента TDataBase не потрібно.



Властивість DataSource

Візуальний компонент






Властивість Name


Компонент TDataSource


Властивість DataSet






К


Властивість Active
омпонент – набір даних

(
Властивість Name


TTable чи TQuery)

Властивість TableName

Власт. DataBaseName







Власт. DataBaseName

Компонент TDataBase



Зв'язок з BDE


Рис. 11.8. Схема зв'язку між компонентами програми БД

11.5. Використання технології ADO до доступу к БД


Поряд із традиційними інструментами доступу до даних Borland Database Engine і ODBC у додатках Delphi можна застосовувати технологію Microsoft Active Data Objects (ADO), що заснована на можливостях СОМ, а саме інтерфейсів OLE DB.

Технологія ADO завоювала популярність у розроблювачів, завдяки універсальності — базовий набір інтерфейсів OLE DB мається в кожній сучасній операційній системі Microsoft. Тому для забезпечення доступу додатка до даних досить лише правильно вказати провайдер з'єднання ADO і потім переносити програму на будь-який

комп'ютер, де мається необхідна база даних і, звичайно, установлена ADO.

У Палітрі компонентів Delphi є сторінка ADO, що містить набір компонентів, що дозволяють створювати повноцінні додатки БД, що звертаються до даних через ADO.

Технологія Microsoft Active Data Objects забезпечує універсальний доступ до джерел даних з додатків БД. Таку можливість надають функції набору інтерфейсів, створені на основі загальної моделі об'єктів СОМ і описані в специфікації OLE DB.

Технологія ADO і інтерфейси OLE DB забезпечують для додатків єдиний спосіб доступу до джерел даних різних типів. Наприклад, додаток, що використовує ADO, може застосовувати однаково складні операції і до даних, що зберігається на корпоративному сервері SQL, і до електронних таблиць, і локальним СУБД. Запит SQL, спрямований будь-якому джерелу даних через ADO, буде виконаний.

Виникає питання: яким образом джерела даних зможуть виконати цей запит?

OLE DB являє собою набір спеціалізованих об'єктів СОМ, инкапсулирующих стандартні функції обробки даних, і спеціалізовані функції конкретних джерел даних і інтерфейсів, що забезпечують передачу даних між об'єктами.

Відповідно до термінології ADO, будь-яке джерело даних (база даних, електронна таблиця, файл) називається сховищем даних, з яким за допомогою провайдеру даних взаємодіє додаток.

Мінімальний набір компонентів додатка може включати об'єкт з'єднання, об'єкт набору даних, об'єкт процесора запитів.

Об'єкти OLE DB створюються і функціонують так само, як і інші об'єкти СОМ. Кожному об'єктові відповідає ідентифікатор класу CLSID, що зберігається в системному реєстрі. Об'єктові відповідає набір інтерфейсів, до методів яких можна звертатися після створення об'єкта.

У результаті додаток звертається не прямо до джерела даних, а до об'єкта OLE DB, що "уміє" представити дані (наприклад, з файлу електронної пошти) у виді таблиці БД або результату виконання запиту SQL.

Технологія ADO у цілому містить у собі не тільки самі об'єкти OLE DB, але і механізми, що забезпечують взаємодію об'єктів з даними і додатками. На цьому рівні найважливішу роль грають провайдери ADO, що координують роботу додатків зі сховищами даних різних типів.

Така архітектура дозволяє зробити набір об'єктів і інтерфейсів відкритим і розширюваним. Набір об'єктів і відповідний провайдер може бути створений для будь-якого сховища даних без внесення змін у вихідну структуру ADO. При цьому істотно розширюється саме поняття даних — адже можна розробити набір об'єктів і інтерфейсів і для нетрадиційних табличних даних. Наприклад, це можуть бути графічні дані геоинформационных систем, деревоподібні структури із системних реєстрів, дані CASE-інструментів і т.д.

Тому що технологія ADO заснована на стандартних інтерфейсах СОМ, що є системним механізмом Windows, це скорочує загальний обсяг працюючого програмного коду і дозволяє поширювати додатка БД без допоміжних програм і бібліотек.

Нижченаведений опис специфікації OLE DB представлено відповідно до офіційної термінології Microsoft для даної предметної області.

Специфікація OLE DB розрізняє наступні типи об'єктів, що будуть розглянуті нижче.

Перечисельник (Enumerator) виконує пошук джерел даних або інших перечисельників. Використовується для забезпечення функціонування провайдерів ADO.

Об'єкт-джерело даних (Data Source Object) представляє сховище даних.

Сесія (Session) поєднує сукупність об'єктів, що звертаються до одного сховища даних.

Транзакция (Trasaction) инкапсулирует механізм виконання транзакции.

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

Набір рядів (Rowset) являє собою сукупність рядків даних, що є результатом виконання команди ADO.



Об'єкт-помилка (Error) містить інформацію про виняткову ситуацію.

Розглянемо функціональні можливості основних об'єктів і інтерфейсів OLE DB.



Об'єкти- перечисельники забезпечують пошук будь-яких об'єктів ADO, що мають доступ до джерел даних. При цьому інші перечисельники також видні в даному перечисельнику. Первинний пошук джерел даних здійснюється в провайдеру ADO. Перечисельники можуть відбирати тільки джерела даних конкретних типів, тому провайдер забезпечує доступ до конкретному типові сховища даних.

У складі ADO мається системний кореневий перечисельник, що виконує початковий пошук інших перечисельників і джерел даних. Його можна використовувати, знаючи його ідентифікатор класу CLSID_OLEDB_ENUMERATOR.

Функції перечисельника утримуються в інтерфейсі isourcesRowset. Метод function GetSourcesRowset(const punkOuter: lUnknown; const riid: TGUID; cPropertySets: UINT; rgProperties: PDBPropSetArray; out ppSourcesRowset: lUnknown): HResult; stdcall; повертає посилання на об'єкт набору рядів (див. вище), що містить зведення про знайдені джерела даних або перечисельниках.

Внутрішній механізм ADO, що забезпечує з'єднання зі сховищем даних, використовує два типи об'єктів. Це об'єкти-джерела даних і об'єкти-сесії.



Об'єкт-джерело даних забезпечує представлення інформації про необхідне реальне джерело даних і підключення до нього. Для введення зведень про сховище даних використовується інтерфейс iDBProperties. Для успішного підключення необхідно задати обов'язкові зведення. Імовірно, для будь-якого сховища даних буде актуальної інформація про його ім'я, користувача і пароль. Однак кожен тип сховища має власні унікальні настроювання. Для одержання списку всіх обов'язкових параметрів з'єднання з даним сховищем можна скористатися методом functio який повертає заповнену структуру DBPROPINFO.

Для кожного обов'язкового параметра в елементі dwFlags установлюється значення DBPROPFLAGS_REQUIRED.

Для ініціалізації з'єднання необхідно використовувати метод function Initialize інтерфейсу iDBinitiaiize об'єкта-джерела даних.

З об'єкта-джерела даних можна створювати об'єктів-сесії. Для цього використовується метод function CreateSession. Сесія призначена для забезпечення роботи транзакций і наборів рядів.

Керування транзакциями в OLE DB реалізовано на двох рівнях. По-перше, усіма необхідними методами володіє об'єкт сесії. Він має інтерфейси ITransaction, ITransactionJoin, ITransactionLocal, ITransactionObject. Усередині сесії транзакция керується інтерфейсами ITransactionLocal, ItransactionSC, ITransaction і їхніми методами StartTransaction, Commit, Rollback. По-друге, для об'єкта сесії можна створити об'єкт транзакции за допомогою методу function GetTransactionObject інтерфейсу ITransactionObject, що повертає посилання на інтерфейс объекта-транзакции.

Об'єкт-набір рядів є основним об'єктом ADO, що забезпечує роботу з даними. Він инкапсулирует сукупність рядів із джерела даних, механізми навігації по рядах і

підтримки рядів в актуальному стані.

Об'єкт сесії має обов'язковий інтерфейс IOpenRowset з методом function OpenRowset який відкриває необхідний набір рядів. У залежності від можливостей джерела даних набір рядів може підтримувати різні інтерфейси. Але п'ять з них є обов'язковими:

IRowset — забезпечує навігацію по рядах;

IAccessor — забезпечує представлення інформації про формат рядів, що утримуються в буфері набору рядів;

IRowsetinfo — дозволяє одержати інформацію про набори рядів (наприклад, число рядів або число обновлених рядів);

Icoiumnsinfo — дозволяє одержати інформацію про колонків рядів (найменування, тип даних, можливість відновлення і т.д.);

IconvertType — містить єдиний метод canConvert, що дозволяє визначити можливість перетворення типів даних у наборі рядів.

На відміну від звичної практики розробки інтерфейсів у рамках моделі СОМ, інтерфейси OLE DB часто мають один-два методу. У результаті велика група інтерфейсів реалізує трохи цілком стандартних функцій.

Додаткові можливості по керуванню набором рядів надають наступні інтерфейси:

IRowsetchange — виконує зміни в наборі рядів (вносить зміни, додає нові ряди, видаляє ряди і т.д.);

IRowsetidentity — дозволяє порівнювати ряди різних рядів;

IRowsetindex — забезпечує використання індексів;

IRowsetLocate — виконує пошук у наборі рядів;

IRowsetupdate — реалізує механізм кэширования змін.

Програмні засоби ADO були б неповними, якби не мали можливості використовувати для роботи з даними мова SQL. Оператори DML і DDL, ряд спеціальних операторів ADO носять загальні назви текстових команд.

Об'єкт-команда інкапсулируе саму текстову команду і механізм обробки і передачі команди. Об'єкт команди виконує наступні операції:

- розбір тексту команди;

- зв'язування команди з джерелом даних;

- оптимізацію команди;

- передачу команди джерелу даних.

Крім основного, об'єкт команди забезпечує доступ до додаткових інтерфейсів:

ICommandPrepare — містить два методи (Prepare И Unprepare) для підготовки команди;

icommandProperties — задає для команди властивості, що повинні підтримуватися набором даних, що повертається командою;

iCommandText — керує текстом команди (цей інтерфейс обов'язковий для об'єкта команди);

icommandwithParameters — забезпечує роботу з параметрами команди.

Провайдери ADO забезпечують з'єднання додатка, що використовує дані через ADO, із джерелом даних (сервером SQL, локальної СУБД, файловою системою і т.д.). Для кожного типу сховища даних повинний існувати провайдер ADO.

Провайдер "знає" про місце розташування сховища даних і його змісті, уміє звертатися до даних із запитами й інтерпретувати службову інформацію, що повертається, і результати запитів з метою їхньої передачі додаткові. Список встановлених у даній операційній системі провайдерів доступний для вибору при установці з'єднання через компонент TADOConnection.

При інсталяції Microsoft Active Data Objects в операційній системі встановлюються наступні стандартні провайдери.

Microsoft Jet OLE DB Provider забезпечує з'єднання з даними СУБД Access за допомогою технології ВАТ.

Microsoft OLE DB Provider for Microsoft Indexing Service забезпечує доступ тільки для читання до файлів і Internet-ресурсів Microsoft Indexing Service.

Microsoft OLE DB Provider for Microsoft Active Directory Service забезпечує доступ до ресурсів служби каталогів (Active Directory Service).

Microsoft OLE DB Provider for Internet Publishing дозволяє використовувати ресурси, надані Microsoft FrontPage,

Microsoft Internet Information Server, HTTP-файли.

Microsoft Data Shaping Service for OLE DB дозволяє використовувати ієрархічні набори даних.

Microsoft OLE DB Simple Provider призначений для організації доступу до джерел даних, підтримуючі тільки базисні можливості OLE DB.

Microsoft OLE DB Provider for ODBC drivers забезпечує доступ до даних, що уже "прописані" за допомогою драйверів ODBC.

Microsoft OLE DB Provider for Oracle забезпечує з'єднання із сервером Oracle.

Microsoft OLE DB Provider for SQL Server забезпечує з'єднання із сервером Microsoft SQL Server.

Механізм доступу до даних через ADO і численні об'єкти й інтерфейси реалізовані в VCL Delphi у виді набору компонентів, розташованих на сторінці ADO.

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

Текстові команди ADO реалізовані в компоненті TADOCommand.

Набори рядів можна одержати за допомогою компонентів TADOTable, TADOQuery, TADOStoredProc. Кожний з них реалізує спосіб доступу до конкретного типу представлення даних у сховище.

Набір властивостей і методів компонентів ADO забезпечує реалізацію всіх необхідних додаткові БД функцій. Способи використання компонентів ADO деяким відрізняються від стандартних компонентів VCL доступу до даних. Однак при необхідності розроблювач може використовувати всі можливості інтерфейсів ADO, звертаючи до них через відповідні об'єкти ADO. Посилання на об'єкти маються в компонентах.

Компоненти доступу до даних ADO можуть використовувати два варіанти підключення до сховища даних. Це стандартний метод ADO і стандартний метод Delphi.

У першому випадку компонента використовують властивість connectionstring для прямого звертання до сховища даних. В другому випадку використовується спеціальний компонент TADOConnection, що забезпечує розширене керування з'єднанням і дозволяє звертатися до даного декількох компонентам одночасно.

Властивість connectionstring призначена для збереження інформації про з'єднання з об'єктом ADO. У ньому через крапку з коми перелічуються всі необхідні параметри. Як мінімум, це повинніо бути імена провайдеру з'єднання або вилученого сервера. При необхідності вказуються шлях до вилученого провайдеру і параметри, необхідні провайдерові: 'User Name=User_Name;Password=Password';

Кожен компонент, що звертається до сховища даних ADO самостійно, задаючи параметри з'єднання у властивості Connectionstring, відкриває власне з'єднання. Чим більше додаток містить компонентів ADO, тим більше з'єднань може бути відкрито одночасно.

Компонент TADOConnection призначений для керування з'єднанням з об'єктами сховища даних ADO. Він забезпечує доступ до сховища даних компонентам ADO, инкапсулирующим набір даних. Застосування цього компонента дає розроблювачеві ряд переваг: усі компоненти доступу до даних ADO звертаються до сховища даних через одне з'єднання; можливість прямо задати об'єкт провайдеру з'єднання; доступ до об'єкта з'єднання ADO; можливість виконувати команди ADO; виконання транзакций; розширене керування з'єднанням за допомогою методів-оброблювачів подій.

Перед відкриттям з'єднання необхідно задати його параметри. Для цього призначена властивість property ConnectionString: WideString (Рис.11.9).



Рис. 11.9. Редактор настроювання з'єднання ADO

Набір параметрів змінюється в залежності від типу провайдеру і може набудовуватися як вручну, так і за допомогою спеціального редактора параметрів з'єднання, що викликається подвійним щигликом на компоненті TADOConnection, перенесеним на форму, або щигликом на кнопці в поле редагування властивості ConnectionString в Інспекторі об'єктів (Рис.11.10).

Рис. 11.10. Вікно вибору провайдера OLE DB

На сторінки Provider потрібно вибрати провайдер Microsoft Jet 4.0 OLE DB Provider для доступу к БД Access,   На вкладці Connection (Рис.11.11) ввести путь до БД (Рис.11.12) та натиснути кнопку Test Connection. Якщо путь вибран правильно то з'єднання встановлено.

Рис.11.12. Вікно Data Link Properties



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


  1. Основні компоненти, яки обов’язково містить програма Delphi, що призначена для роботи з БД.

  2. Як встановлюється зв’язок програми з БД?

  3. Призначення і установка основних властивостей компонента TТable.

  4. Призначення і установка основних властивостей компонента TDataSource.

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

  6. Технология ADO: назначение, достоинства, недостатки.

  7. Компоненти - набори даних ADO: TADODataSet, TADOTable, TADOQuery.


1   ...   12   13   14   15   16   17   18   19   20



  • 11.1.2. Компіляція і виконання проекту
  • 11.1.3. Схема взаємодії програми Delphi із БД
  • 11.2. Основні компоненти Delphi для роботи з БД
  • 11.3. Структура програми БД Delphi
  • 11.4. Етапи створення прикладної програми БД
  • 11.5. Використання технології ADO до доступу к БД