Компонент TTable

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Зміст

Огляд

Створення таблиць за допомогою компонента TTable

Висновок

Огляд На цьому невеликому уроці ми завершимо вивчення можливостей створення таблиць. Як Ви пам'ятаєте, ми вже освоїли два способи створення таблиць - за допомогою утиліти Database Desktop, що входить у поставку Delphi (урок 11) і за допомогою SQL-запитів (урок 12), які можна використовувати як у WISQL (Windows Interactive SQL - клієнтська частина Local InterBase), так і в компоненті TQuery. Тепер ми розглянемо, як можна створювати локальні таблиці в режимі виконання з допомогою компонента TTable. Створення таблиць за допомогою компонента TTable

Для створення таблиць компонент TTable має метод CreateTable. Цей метод створює нову порожню таблицю заданої структури. Даний метод (процедура) може створювати лише локальні таблиці формату dBase або Paradox.

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

· Var

Table1: TTable;

...

Table1: = TTable.Create (nil);

...

Перед викликом методу CreateTable необхідно встановити значення властивостей

TableType - тип таблиці DatabaseName - база даних TableName - ім'я таблиці FieldDefs - масив описів полів IndexDefs - масив описів індексів.

Властивість TableType має тип TTableType і визначає тип таблиці в базі даних. Якщо це властивість встановлено в ttDefault, тип таблиці визначається з розширення файлу, що містить цю таблицю:

Розширення. DB або без розширення: таблиця Paradox Розширення. DBF: таблиця dBASE Розширення. TXT: таблиця ASCII (текстовий файл).

Якщо значення властивості TableType не дорівнює ttDefault, створювана таблиця завжди буде мати встановлений тип, незалежно від розширення:

ttASCII: текстовий файл ttDBase: таблиця dBASE ttParadox: таблиця Paradox.

Властивість DatabaseName визначає базу даних, в якій знаходиться таблиця. Ця властивість може містити:

BDE аліас директорій для локальних БД директорій і ім'я файлу бази даних для Local InterBase локальний аліас, визначений через компонент TDatabase.

Властивість TableName визначає ім'я таблиці бази даних.

Властивість FieldDefs (що має тип TFieldDefs) для існуючої таблиці містить інформацію про всі полях таблиці. Ця інформація доступна тільки в режимі виконання і зберігається у вигляді масиву примірників класу TFieldDef, що зберігають дані про фізичних полях таблиці (таким чином обчислювані на рівні клієнта поля не мають свого об'єкта TFieldDef). Число полів визначається властивістю Count, а доступ до елементів масиву здійснюється через властивість Items:

· Property Items [Index: Integer]: TFieldDef;

При створенні таблиці, перед викликом методу CreateTable, потрібно сформувати ці елементи. Для цього у класу TFieldDefs є метод Add:

· Procedure Add (const Name: string; DataType: TFieldType; Size: Word; Required: Boolean);

Параметр Name, що має тип string, визначає ім'я поля. Параметр DataType (тип TFieldType) позначає тип поля. Він може мати одне з наступних значень, зміст яких ясний з їх найменування:

· TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftBlob, ftMemo,

ftGraphic);

Параметр Size (тип word) представляє собою розмір поля. Цей параметр має сенс лише для полів типу ftString, ftBytes, ftVarBytes, ftBlob, ftMemo, ftGraphic, розмір яких може сильно варіюватися. Поля інших типів завжди мають суворо фіксований розмір, так що даний параметр для них не береться до уваги. Четвертий параметр - Required - визначає, чи може поле мати пусте значення при записі в базу даних. Якщо значення цього параметра - true, то поле є "необхідним", тобто не може мати порожнього значення. В іншому випадку поле не є "необхідним" і, отже, допускає запис значення NULL. Відзначимо, що в документації по Delphi і online-довіднику допущена помилка - там відсутня згадка про четвертий параметрі для методу Add.

Якщо Ви бажаєте індексувати таблицю по одному або декількох полях, використовуйте метод Add для властивості IndexDefs, яке, як можна здогадатися, також є об'єктом, тобто екземпляром класу TIndexDefs. Властивість IndexDefs для існуючої таблиці містить інформацію про всі індекси таблиці. Ця інформація доступна тільки в режимі виконання і зберігається у вигляді масиву примірників класу TIndexDef, що зберігають дані про індекси таблиці. Кількість індексів визначається властивістю Count, а доступ до елементів масиву здійснюється через властивість Items:

· Property Items [Index: Integer]: TIndexDef;

Метод Add класу TIndexDefs має наступний вигляд:

· Procedure Add (const Name, Fields: string;
Options: TIndexOptions);

Параметр Name, що має тип string, визначає ім'я індексу. Параметр Fields (також має тип string) позначає ім'я поля, яке повинно бути індексовані, тобто ім'я індексуємого поля. Складовою індекс, який використовує кілька полів, може бути заданий списком імен полів, розділених крапкою з комою ";", наприклад: 'Field1; Field2; Field4'. Останній параметр - Options - визначає тип індексу. Він може мати набір значень, що описуються типом TIndexOptions:

· TIndexOptions = set of (ixPrimary, ixUnique, ixDescending,

ixCaseInsensitive, ixExdivssion);

Пояснимо ці значення. ixPrimary позначає первинний ключ, ixUnique - унікальний індекс, ixDescending - індекс, відсортований по зменшенню значень (для рядків - у порядку, зворотному алфавітному), ixCaseInsensitive - індекс, "нечутливий" до регістру літер, ixExdivssion - індекс по виразу. Відзначимо, що згадка про останньому значенні також відсутній у документації та online-довіднику. Опція ixExdivssion дозволяє для таблиць формату dBase створювати індекс за висловом. Для цього досить у параметрі Fields вказати бажане вираз, наприклад: 'Field1 * Field2 + Field3'. Взагалі кажучи, не всі опції індексів застосовні до всіх форматів таблиць. Нижче ми наведемо перелік допустимих значень для таблиць dBase і Paradox:

· Опції індексів dBASE Paradox

---------------------------------------

ixPrimary ь

ixUnique ь ь

ixDescending ь ь

ixCaseInsensitive ь

ixExdivssion ь

Необхідно дотримуватись зазначеного порядку застосування опцій індексів щоб уникнути некоректної роботи. Слід зазначити, що для формату Paradox опція ixUnique може використовуватися тільки разом з опцією ixPrimary (див. приклад на диску - Рис. 0-1).

Отже, після заповнення всіх зазначених вище властивостей і виклику методів Add для FieldDefs і IndexDefs необхідно викликати метод класу TTable - CreateTable:

· With Table1 do

begin

DatabaseName: = 'dbdemos';

TableName: = 'mytest';

TableType: = ttParadox;

{Створити поля}

with FieldDefs do

begin

Add ('Surname', ftString, 30, true);

Add ('Name', ftString, 25, true);

Add ('Patronymic', ftString, 25, true);

Add ('Age', ftInteger, 0, false);

Add ('Weight', ftFloat, 0, false);

end;

{Згенерувати індекси}

with IndexDefs do

begin

Add ('I_Name', 'Surname; Name; Patronymic',
[IxPrimary, ixUnique]);

Add ('I_Age', 'Age', [ixCaseInsensitive]);

end;

CreateTable;

end;

Компонент TTable Індекси можна згенерувати і не тільки при створенні таблиці. Для того щоб згенерувати індекси для існуючої таблиці, потрібно викликати метод AddIndex класу TTable, набір параметрів якого повністю повторює набір параметрів для методу Add класу TIndexDefs:

· Procedure AddIndex (const Name, Fields: string;
Options: TIndexOptions);

При цьому для методу AddIndex справедливі всі зауваження з приводу запису полів і опцій індексів, зроблені вище.

Висновок

Отже, ми познайомилися з ще одним способом створення таблиць - способом, що використовують метод CreateTable класу TTable. Використання даного способу додасть Вашому додатком максимальну гнучкість, і Ви зможете будувати локальні таблиці "на льоту". Супутнім методом є метод AddIndex класу TTable, що дозволяє створювати індекси для вже існуючої таблиці. Підкреслимо ще раз, що даний спосіб застосовується тільки для локальних таблиць. Більш загальний спосіб полягає у використанні SQL-запитів, який ми розглядали на уроці 12.


Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Доповідь
14.2кб. | скачати


Схожі роботи:
Когнітивний компонент самосвідомості у підлітків
Базоий компонент дошкільної освіти
Емотивний компонент семантики біблеїзмів
Вода найважливіший компонент біосфери
Пам`ять як компонент пізнавальної діяльності
Зовнішність учителя як компонент педагогічної техніки
Жаргон школярів як компонент молодіжного жаргону
Біологічний і соціальний компонент мислення в людині
Стратегія як компонент діяльності мовного впливу
© Усі права захищені
написати до нас