ua ru

IAPT

Головна » Програмне забезпечення » Проектування баз даних в С++

Проектування баз даних в С++

Проектування баз даних в С++

Використовуючи Borland C++ Builder, можна створити доповнення, работающие як з однопользова-тельськімі базами даних (БД), так і з серверними СУБД, такими як Oracle, Sybase, Informix, Interbase, MS SQL Server, DB2, а також з ODBC-джерелами. Можливості C++ Builder, зв'язані з створенням доповнень, які використовують бази даних, вельми обширні для того, щоб описати їх в одній статті. Тому сьогодні ми розглянемо лише прості можливості роботи з таблицями баз даних. Набір даних в C++ Builder - це об'єкт, який складається з набору записів, кожна з яких, у свою чергу, складається з полів, і покажчика поточного запису. Набір даних може мати повну відповідність реально существующей таблицею або бути результатом запиту, він може бути частиною таблиці або об'єднувати між собою декілька таблиць.

Набір даних в C++ Builder є нащадком абстрактного класу TDataSet (абстрактний клас - це клас, від якого можна породжувати другие класи, але не можна створити екземпляр об'єкту даного класу). Наприклад, класи TQuery, TTable і TStoredProc, що містяться на сторінці палітри компонентів Data Access, - спадкоємцеві TDBDataSet, який, в свою чергу, є спадкоємцем TDataSet. TDataSet містить абстракції, необхідні для безпосереднього управління таблицями або запитами, забезпечуючи засоби для того, щоб відкрити таблицю або виконати запит і переміщатися по рядках. Компонент DataSource діє як посередник між компонентами TDataSet (TTable, TQuery, TStoredProc) і компонентами Data Controls - елементами управління, які забезпечують уявлення даних на формі. Компоненти TDataSet управляють зв'язками з бібліотекою Borland Database Engine (BDE), а компонент DataSource управляє зв'язками з даними в компонентах Data Controls.

У типових доповненнях БД компонент DataSource, як правило, зв'язан з одним компоненом TDataSet (TTable або TQuery) і з одним або більш компонентами Data Controls (такими, як DBGrid, DBEdit і ін.). Зв'язок цього компоненту з компонентами TDataSet і DataControls здійснюється з користуванням наступних властивостей і подій. Властивість DataSet компоненту DataSource ідентифікує ім'я компоненту TDataSet. Можна привласнити значення властивості DataSet на етапі виконання або за допомогою інспектора об'єктів на етапі проектування. Властивість Enabled компоненту DataSource активізує або тормозить взаємозв'язок між компонентами TDataSource і Data Controls. Якщо значення властивості Enabled рівне true, то компоненти Data Controls, зв'язані з TDataSource, сприймають зміни набору даних.

Застусовані властивості Enabled дозволяє тимчасово роз'єднувати візуальні компоненти Data Controls і TDataSource, наприклад, для того, щоб у разі пошуку в таблиці з великою кількістю записів не відображати на екрані перегортування всієї таблиці. Властивість AutoEdit компоненту DataSource контролює, як ініціюється редагування в компонентах Data Controls. Якщо значення властивості AutoEdit рівне true, то режим редагування починається безпосередньо при отриманні фокусу компонентом Data Controls, зв'язаним даним компонентом TDataSet. Інакше режим редагування починається, коли викликається метод Edit компоненту TDataSet, наприклад, після натиснення користувачем кнопки Edit на компоненті DBNavigator. Подія OnDataChange компоненту DataSource наступає, коли відбувається зміна значення поля, запису, таблиці, запиту.

Подія OnUpdateData компоненту DataSource наступає, коли користувач намагається змінити поточний запис в TDataSet. Обробник цієї події слід створювати, коли потрібно дотримати умови силочної цілісності або обмеження, які накладаються на значення бази даних. Найбільш простим засобом звернення до таблиць баз даних є використання компоненту TTable, який надає доступ до однієї таблиці. Для цієї мети найчастіше використовуються наступні властивості: Active - указує, відкрита (true) чи ні (false) дана таблиця. DatabaseName - ім'я каталога, який містить шукану таблицю, або псевдонім (alias) видаленої БД (псевдоніми встановлюються за допомогою утилітів конфігурації BDE, опис якої присутній в багатьох джерелах, присвячених продуктам Borland, або за допомогою SQL Explorer, що викликається за допомогою пункту меню Database/Explore).

Ця властивість може бути змінена тільки у випадку, якщо таблиця закрита (її властивість Active рівна false). Exclusive - якщо цю властивість приймає значення true, то ніякою інший користувач не може відкрити таблицю, якщо вона відкрита даним доповненням. Якщо це властивість рівна false (значення за умовчанням), то інші користувачі можуть відкривати цю таблицю. IndexName - ідентифікує вторинний індекс для таблиці. Цю властивість не можна змінити, поки таблиця не відкрита. MasterFields - визначає ім'я поля для створення зв'язку з іншою таблицею. MasterSource - ім'я компоненту TDataSource, за допомогою якого TTable отримуватиме дані із зв'язаної таблиці. ReadOnly - якщо ця властивість рівна true, таблиця відкрита в режимі тільки для читання. Не можна змінити властивість ReadOnly, поки таблиця не відкрита.

Eof, Bof - ці властивості приймають значення true, коли покажчик поточного запису розташований на останній або відповідно першому запису таблиці. Fields - масив об'єктів TField. Використовуючи цю властивість, можна звертатися до полів по номеру, що зручно, коли невідома структура таблиці. Дії компоненту TTable дозволяють будувати і контролювати поведiнку додатків БД. Наприклад, подія BeforePost наступає перед вставкою або зміною запису, подія AfterPost - після збереження вставленого або зміненого запису, подія AfterDelete - після видалення запису і т.п.

Щоб внести компонент TTable до форми, потрібно виконати наступне:

1. Використовуючи сторінку Data Access палітри компонентів, розмістити компонент TTable на формі або в модулі даних.

2. Властивості DatabaseName привласнити ім'я каталога, де знаходиться БД, або псевдо іма БД.

3. Властивості TableName привласнити ім'я таблиці або вибрати таблицю з випадного списку.

4. Внести до форми компонент DataSource і встановити значення DataSet рівним імені компоненту TTable.

5. Внести компоненти Data Controls і пов'язати їх з компонентом DataSource для того, щоб відобразити на екрані дані з таблиці БД.

Об'єкти класу TField є властивістю об'єкту TDataSet (деякі властивості об'єктів самі є об'єктами з їх наборами властивостей, і TField - один з них). Властивість Fields об'єкту типа TDataSet дозволяє звертатися до окремих полів набору даних. Властивість Fields є масивом або набором об'єктів TField, що динамічно створюється під час виконання додатка. Елементи масиву відповідають колонкам таблиці. Об'єкт TField не робить ніяких припущень щодо типів даних, з якими він пов'язаний.

Він має декілька властивостей, які дозволяють встановити або повернути назад значення поля, наприклад, AsString, AsBoolean, AsFloat, AsInteger. Найчастіше використовуються властивості Text (рядок тексту, який виводиться в інтерфейсний елемент) і FieldName (ім'я поля бази даних). Fields Editor дозволяє створити так званий статичний список по-лий таблиці, які додаються до опису класу форми. Коли вперше застосовуються такі компоненти TDataSet, як компонент TTable або TQuery, перелік полий для них динамічно генерується в процесі виконання додатку на основі наявних стовпців таблиць або результатів SQL-запиту. Fields Editor дозволяє визначити і потім модифікувати статичний список компонентів Field на етапі проектування доповнення. При внесенні колонок з використанням Fields Editor для кожного з полів, доданих до TDataSet, виникають об'єкти TField, після чого можна побачити ці поля в інспекторові об'єктів і використовувати в додатках їх властивості, події і методи.

Використовувати Fields Editor потрібно таким чином:

1. Розмістити компонент TTable або TQuery на формі.

2. Встановити властивість DatabaseName для TTable або TQuery.

3. Встановити властивість TableName компоненту TTable або властивість SQL компоненту TQuery.

4. Вибрати компонент TDataSet на формі і нажинати праву клавішу миші, після чого з'явиться контекстне меню.

5. З контекстного меню вибрати Fields Еditor. З'явиться порожнє вiкно із заголовком, співпадаючим з ім'ям компоненту TTable.

6. Знову нажинати праву клавішу миші над порожнім вікном і з контекстного меню віб ать опцію Add Fields. Им'я всіх колонок таблиці або запиту з'являться в діалоговій панелі Add Fields.

7. Вибрати поля, які потрібно внести до списку об'єктів, і натиснути OK.

8. Якщо потрібно створити обчислюване поле на основі наявних полів, нажинати праву клавішу миші і з контекстного меню вибрати New Field для створення нового поля на основі того, що існує або для створення обчислюваного поля (надалі слід створити код обробника події OnCalcFields компоненту TTable, де і проводяться необхідні вічислiння).

9. Якщо необхідно видалити статичне поле із списку полий в наборi даних, потрібно нажинати праву клавішу миші і з контекстного меню вибрати Delete. Після того, як в Fields Editor додані поля, вони з'являться у інспекторі об'єктів, а посилання на них - в h-файлі. Якщо тепер застосувати операцію drag-and-drop до виділених в Fields Editor полям, перенісши їх на форму, то можна отримати готову форму з необхідним набором інтерфейсних елементів (у нашому випадку - DBEdit, що дозволяє відображати і редагувати рядкові, числові, грошові і інші поля, чиї значення представімі у вигляді рядка символів, і DBImage, що дозволяє відображати графічні поля і використовувати Clipboard для їх редагування). Якщо до такої форми додати компонент TDBNavigator (цей компонент реалізує основні методи TTable і TQuery, пов'язані з редагуванням даних) і пов'язати його з наявним компонентом TDataSource, а потім скомпілювати проект, отрімаємо доповнення для огляду і редагувань даних в таблиці.