Створення структури таблиць

Структура таблиць створюється через програму, написану на вкладеному мові SQL. Її можна вводити в комп'ютер двома способами.

1. Спочатку написати всю програму (script-файл) в будь-якому з текстових редакторів. При її збереженні файлу слід задати розширення sql. Потім програму можна ввести за допомогою утиліти WISQL (Run on ISQL Script).

Такий спосіб зручний при наявності повторюваної послідовності SQL-операторів і при використанні налагоджених файлів. При їх формуванні потрібна велика уважність, оскільки за наявності помилок у програмі перший спосіб фактично зводиться до другого.

2. Тут може використовуватися утиліта WISQL або утиліта SQL Exiorer.

При виклику WISQL корисно закріпити "русифікацію". Для цього в режимі Session / Advanced Setting у вікні Character Set On треба задати WINI251.

Для створення структури таблиць і їх заповнення використовується мова SQL.

Встановимо мережеве з'єднання БД з WISQL через елемент File / Connect to Database його головного меню. У вікні задамо шлях до БД, ім'я користувача та пароль.

У що з'явилася заставці в верхньому вікні SQL Statement слід набрати SQL-оператор. Так, для створення таблиці Pravila наберемо

CREATE TABLE Pravila (

Nomprav integer Not Null,

FIO varchar (15),

Stepen varchar (5),

Otkrytie varchar (5),

Znak_ball varchar (5),

Sr_ball numeric! 15,2),

Znak_Stag varchar (5),

Stag integer,

Dolgnost varchar (10),

Objasnenia varchar (120)

);

По завершенні набору слід натиснути кнопку Run.

Набір "переходить" у вікно ISQL Output і при відсутності помилок виконується. При наявності помилок видається повідомлення, в якому вказується рядок і знак у наборі, де допущена помилка. Після її виправлення слід знову натиснути кнопку Run.

Описана процедура втомлює, і тому в WISQL кнопками Previous і Next можна повернути необхідний оператор з нижнього вікна у верхнє. Після його коригування він вводиться натисканням кнопки Run.

Підтвердження завершення набору програми здійснюється вибором в головному меню File / Commit Work, а відмова від виконання - Filc / Rollback Work.

Після завершення робіт з WISQL від'єднання від БД проводиться вибором File / Disconnect from Database. Вибір кнопки Exit означає вихід з WISQL.

Слід зазначити, що вкладений SQL має слабкі засоби налагодження програм і незручний інтерфейс. Однак високу швидкодію програм при роботі в мережевому режимі змушує миритися з цим недоліком.

Щоб контролювати роботу WISQL, можливо використовувати меню.

При натисканні елемента меню View / Metadata Information видається заставка View Information. У ній можна вибрати тип і ім'я об'єкта, в результаті чого у вікні ISQL Output буде показана програма об'єкта на вкладеному мові SQL.

Якщо ім'я об'єкта не задано, видається список об'єктів даного типу.

Вибір елемента меню Extract / SQL Metadata for Table і імені таблиці призведе до видачі даних про неї, які можуть бути збережені в txt-файлі.

Натискання Extract / SQL Metadata for Database викличе видачу метаданих про БД у вигляді програми на вкладеному мові SQL. Її можна скопіювати в буфер і потім зберегти, наприклад, в редакторі Word.

Приклад такої SQL-програми наведено у Додатку 3.

Заповнення таблиць

Заповнення можна здійснити в WISQL або в SQL Explorer.

У першому випадку проводиться порядкова вставка даних за допомогою оператора INSERT. Коригування даних може здійснюватися операторами UPDATE і DELETE, контроль отриманих результатів - оператором SELECT. Однак такий спосіб стомлюючий.

Більш зручно використання утиліти SQL Explorer, яка дозволяє до того ж створювати структуру таблиць.

Після відкриття SQL Explorer на екрані з'являється двухоконной заставка. У лівому вікні вибирається закладка Databases і необхідний алиас. Натискання "+" ліворуч від нього розкриває перелік типів об'єктів БД. Натискання "+" у обраного типу об'єктів розкриває перелік імен цього типу об'єктів. Вибір імені викликає появу в правому вікні трьох (для таблиць - чотирьох) закладок.

Закладка Definition визначає метадані конкретного об'єкта, закладка Text дозволяє отримати SQL-оператор створення конкретного об'єкта. Вибір закладки Data (для таблиць) дозволяє провести перегляд, заповнення та коригування даних в вибраній таблиці.

Для введення нових даних слід натиснути "+" в навігаторі і послідовно вводити записи. При переході на подальшу запис попередня запам'ятовується автоматично. Для запам'ятовування останнього запису необхідно натиснути кнопку Post або Refresh навігатора.

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

Контроль за роботою БД і сервера в віддаленому варіанті здійснюється утилітою Interbase Server Manager.

Б. ІНТЕРФЕЙС КОРИСТУВАЧА. У режимі клієнт-сервер серверна частина інтерфейсу користувача розвинена, як правило, слабо. У ньому виводяться параметри, загальні для всіх клієнтів. Таких параметрів зазвичай небагато.

Основний акцент у розробці інтерфейсу користувача переноситься на інтерфейс клієнта.

При формуванні інтерфейсу врахуємо досвід, накопичений при виконанні роботи [19], де інтерфейс користувача побудований на

основі однієї форми Delphi. У зв'язку з цим ускладнився програмний код за рахунок організації доступу до елементів управління, введення додаткових кнопок при переході від груп елементів меню до інших елементів меню, постійної зміни SQL-оператора в компонентах Query.

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

У загальному випадку можна використовувати дев`ять форм Delphi для клієнта і одну - для сервера.

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

У зв'язку з цим краще використовувати чотири форми Delphi для клієнта і одну - для сервера. Тоді можливо таке "розподіл" таблиць.

Сервер

Form5, на якій розташовані компоненти Edit1 і Edit2 для фіксації поточного циклу і загальної кількості циклів.

Клієнт

Forml (основна) - меню і таблиця "Штатний розклад".

Form2 - таблиця "Кадри" та її складові частини.

Form3 - таблиця "Пояснення".

Form4 - таблиця "Правила".

Форми Delphi Form2 - Form4 - модальні. При їх закриття здійснимо перемикання доступних елементів головного меню.

У головному меню Forml виділимо елементи Головна, Показати, Обробити.

Для елементів головного меню попередньо введемо наступний розподіл.

Головна

Відкрити

Вийти

Показати

Штатний розклад

Кадри

Претенденти

Працюючі

________________

Прийняті

________________

Прийняті

________________

Звільнені

Обробити

Почати

________________

Запуск правил

________________

Кількісний результат

Пояснення Зміна правил

Зміна результату

________________

Прийняти всіх

________________

Продовжити

Зауваження. При використанні декількох форм слід встановити необхідні зв'язки між ними. Для цього в модулі unii після заголовка implementation пишеться рядок

uses unit1, .... uniti, ... unitm;

Без встановлення зв'язків форми взаємодіяти не будуть.

В. АЛГОРИТМ ДОДАТКИ. Для формування алгоритму використовуємо шаблони [19]. Під шаблоном розуміється закінчена в цільовому відношенні і повторювана програмна частина процедури (procedure) або функції (function). Шаблон може бути побудований з елементарних і комбінованих складових.

ВП1. Елементарні складові. Найпростішими (елементарними) складовими є оператори SQL: вибірки (SELECT), оновлення (UPDATE, DELETE, INSERT), знищення (DROP) і побудови (CREATE) таблиць (TABLE).

Слід зазначити можливість двох способів їх реалізації.

1. Використання властивості SQL - компонента TQuery:

select * from kadry

Цей спосіб застосовують при многоформной (многооконном) інтерфейсі, коли об'єкт Query форми "закріплений" за конкретною таблицею і вид запиту не змінюється протягом всієї сесії.

2. Складання формованого запиту, що розміщується в програмному коді. Тоді попередній приклад отримає вид

Query1.Close;

Queryl.SQL.Clear;

Query1.SQL.Add ('select * from kadry');

Query1.Open;

Цей спосіб застосовується при одновіконному варіанті інтерфейсу або в разі частого зміни виду запиту в об'єкті Queryl.

З погляду написання SQL-запиту різниця невелика, тому подальшу процедуру формування шаблонів ілюструємо з використанням SQL-властивостей.

ВП1.1. Оператор select використовується в численних варіантах, що визначаються наступними основними ознаками:

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

Для проектованої БЗ становлять інтерес наступні варіанти.

1. Проста вибірка (будемо називати варіант selecti):

select * from kadry

  • 2. Вибірка з параметрами (select2), в якій виділимо випадки:
    • • з однією таблицею (select21):

select dolgnos, count (dolgnos) as fakty from kadry

where (status = 'pa6o-L)

And (vremja between 1 And: vremja)

group by dolgnos

ParamByName (Vremja '). Value: = StrTolnt (Edit1.Text);

• з двома таблицями (select22):

select K.vremja, K.Familia,

K.Uch_stepen, K.Otkrytie, K.Sr_ball,

K.Stag, K.dolgnos,

P.Objasnenia from kadry K, pravila P

where vremja =; vremja And

P.nomprav = K.nomprav

Vremja ') .Value: = StrTolnt (Edit1.Text)

3. Вибірка з обчисленнями і функціями агрегування (select3):

select dolgnos, count (dolgnos) as fakty from kadry

where status = 'робіт'

group by dolgnos

4. Вибірка з параметрами і можливостями зміни викликаних даних в діалозі:

RequestLive: = Т rue;

select * from kadry

where (status = 'npm-iMM')

and {vremja =: vremja)

ParamByName (Vremja '). Value: = StrTolnt (Edit1 Text);

ВП1.2. Оператор update з трясучи різновидами:

  • 1. З параметрами update1, що включає два підкласи:
    • • ім'я змінюваного поля не входить в умови (update11):

Update kadry

set nomprav =: nomprav,

dolgnos =: dolgnos

where (uch_stepen =: uch_stepen)

And (otkrytie =: otkrytie)

And (Sr_ball <: Sr_ball)

And jstag> =: Stag)

And (status = 'npeTeH')

And (vremja =: vremja)

ParamByName ('nomprav'). Value: = Query2.FieldByName ('nomprav'). Value;

• ім'я змінюваного поля входить в умови (update 12), при цьому змінна використовує приставка old_

Update kadry

set status =: status

where (status =: old_status)

And (vremja =: vremja)

ParamByName ('status'). Value: = 'прийнятий';

2. З параметрами, обчисленнями і використанням циклу (update2):

Update stat_rasp

set fakty =: fakty,

vacanc = plany-fakty

where (dolgnos =: dolgnos)

And (vremja =: vremja)

ParamByName ('Vremja'). Value: = StrTolnt (Edit1.Text);

3. З параметрами, циклом і посиланням Datasource на параметри (update3):

update stat_rasp

set plany =: plany, fakty =: fakty,

vacanc =: vacanc, prinimaem =: prinimaem,

nedobor =: nedobor

where vremja =: vremja and dolgnos-: dolgnos

Datasource: = DataSource2;

ВП1.3. Оператор insert 1. Звичайний (insert 1):

insert into kadry

values (TleTpOB ',' так ',. ..);

ВП1.4. Оператор delete:

1. Звичайний (delete 1):

delete from pravila

2. З параметрами:

delete from kadry

where vremja =: vremja and dolgnos = 'відмовити'

ParamByName ('Vremja'). Value: = StrTolnt (Editl.Text);

ΒΠ1.5. Оператор drop знищення таблиці (drop1)

drop table pravila

ВП1.6. Оператор create створення таблиці (crcatel), описаний раніше.

ВП2. Комплексні складові, що використовують не менше двох елементарних складових.

ВП2.1. Складова inserti (inserti + selecti):

insert into kadry

select * from kadryjsh

ВП2.2. Складова updateI (update 1 + select3):

update stat_rasp

set plany =: plany, fakty =: fakty,

vacanc =: vacanc, prinimaem =: prinimaem,

where (vremja =: vremja) and

dolgnos IN

(select dolgnos, count (dolgnos) as fakty

from kadry

where (status = 'робіт') and

(vremja between 1 and: vremja)

group by dolgnos)

ParamByName ('Vremja'). Value: = StrTolnt (Edit1.Text);

ВПЗ. На основі цих складових формуються шаблони, показані в табл. 1.1 і "прив'язані" до дій користувача - натискання елементів меню (див. Рис. 15.2.).

При побудові алгоритму додатки шаблони зв'язуються з відповідними елементами меню і апробуються. Однотипні шаблони можуть просто копіюватися.

Відзначимо одну цікаву обставину. Формування програмних шаблонів (табл. 15.4) фактично здійснюється у всіх СУБД, але в різних варіантах.

У СУБД Access складовими є запити, в яких зберігаються і проміжні результати. У СУБД Paradox (в рамках Delphi) складові пов'язані з компонентами Query, які зберігають проміжні дані. У СУБД InterBase контейнерами для шаблонів служать збережені процедури, в яких послідовно розміщуються необхідні складові. Проміжні результати зберігаються в реченні INTO програми збереженої процедури у вигляді параметрів.

Схема взаємодії сервера і клієнта в частині алгоритму додатки показана на рис. 15.5.

Таблиця 15.4

Програмні шаблони алгоритму додатки

Дії користувача

Шаблон

Почати

А-копіювання

Delete 1

Inserti

або

Б-копіювання

Selecti

Update3

або

По-копіювання

Update}

або

Г-конірованіе

Drop1

Create1

Insert1

Штатний розклад

Select3

Update2

Select2l

Кадри

Select2l

Працюючі

Select2l

Претенденти

Select2l

Запуск правил

Select1

Update11

Update11

Прийняті

Select2l

Кількісний результат

Select3

Update2

Select2l

Пояснення

Select22

Прийняти всіх

Delete2

Updatel2

Прийняті

Select2l

Продовжити

Update 12

Б-копіювання

Selecti

Selecti

Звільнені

Select4

Select1

Зміна результату

Select4

Зміна правил

Select2l Select4 Update12

У розглянутій програмної реалізації генератори і тригери не використовуються.

Частковий-приклад програми алгоритму додатки наведено у додатку 3. У ній виділена серверна частина (на вкладеному мові SQL) і клієнтська частина (інтерфейсний мова SQL і Object Pascal з 15 формами).

Клієнтська частина досить проста. Вона значною мірою являє собою програму інтерфейсу користувача, оскільки майже всі select-запити "заховані" в SQL-властивості компонент Query.

Взаємодія сервера і клієнта

Рис. 15.5. Взаємодія сервера і клієнта

Програмний код для сервера (код збережених процедур) відповідає програмним шаблонами, розглянутим в табл. 15.4.

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

Підкреслимо ще раз, що і клієнт, і сервер для локального варіанту реалізуються на одному, основному комп'ютері.

 
< Попер   ЗМІСТ   Наст >