Розробка баз даних за допомогою 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Розробка баз даних за допомогою



Методичні вказівки

до виконання практичних робіт

з дисципліни:

«Бази даних»

 

(для студентів денного відділення спеціальностей

5.05010301 – Розробка програмного забезпечення)

 

Розробка баз даних за допомогою

Порядок виконання роботи

 

Створення псевдоніму DBE

 

1 Вибрати пункт Explorer головного меню Delphi: Database/Explorer.

2 Клацнути на вкладці Database і на пункті Databases цієї вкладки.

3 Клацнути правою кнопкою миші на пункті Databases і вибрати в контекстному меню, команду New. Це призведе до створення нового шаблону.

4 Вказати драйвер бази даних для нового псевдоніму. Для роботи з СУБД Paradox вибрати Standard і клацнути OK.

5 Ввести ім’я нового псевдоніму і натиснути Enter.

6 В правому вікні ввести шлях до каталогу, в якому буде розміщена БД (параметр Path). Для цього клацнути по полю Path і натиснути на кнопку, що з’явиться в правому кутку поля. Вибрати потрібний каталог і натиснути Ok.

7 Запам’ятати внесені зміни. Для цього натиснути кнопку Apply панелі інструментів Database Explorer (на піктограмі цієї кнопки зображена синя стрілка).

 

Створення таблиць БД

 

1 Запустити утиліту Database Desktop (DBD) з головного меню Delphi: Tools/Database Desktop.

2 Встановити робочий псевдонім: вибрати в меню File / Working Directory, задати псевдонім та натиснути Ok.

3 Для створення таблиць вибираємо File / New / Table. У вікні Create Table вибираємо тип таблиці (Paradox 7) та натискаємо Ok.

4 У вікні визначення структури таблиці кожен рядок відповідає полю таблиці БД. Тут:

– Field Name – ім’я поля;

– Type – тип поля (можливі типи полів наведені в табл. 4);

 

Таблиця 4 – Типи полів

 

Тип поля Позна-чення Значення, що зберігаються
     
Alpha A Символьні значення довжиною до 255 символів.
Number N Числові значення з плаваючою крапкою в діапазоні від -10307 до +10308. Точність до 15 значущих цифр.
Money $ Аналогічний типу Number, але призначений для грошових сум. Число знаків після за замовчуванням – 2. При показі значення виводиться знак грошової одиниці.
Short S Цілочисельні значення в діапазоні -32 767.. 32 767.
LongInteger I Цілочисельні значення в діапазоні -2 147 483 648.. 2 147 483 647.
BCD # Числові значення, у тому числі і дробові, у двійково-десятковому форматі. Забезпечує виняткову точність при роботі з великим числом знаків у дробовій частині. Застосовується в обчисленнях, де важлива точність (фінансові, наукові застосування). Для проведення обчислень потребує більше часу, ніж числові поля інших типів.
Date D Значення дати.
Time T Значення часу.
Timestamp @ Значення дати і часу.
Memo M Текстові значення довжиною більше 255 символів. Максимальна довжина не обмежена. Від 1 до 240 символів можуть зберігатися разом із таблицею БД, а інші зберігаються у виді Memo-файлу (розширення.MB).

Закінчення таблиці 4

 

     
Formatted Memo F Аналогічне мемо-полю, але може зберігати форматовані тексти, у яких фрагменти тексту подані різним шрифтом, кольором і стилями.
Graphic Fields G Графічні зображення у форматі файлів.BMP,.PCX,.TIF,.GIF,.EPS, що при збереженні перетворяться у формат.BMP. Зберігаються окремо від основної таблиці БД.
Logical L Логічні значення ("True", "False"). Регістр літерне має значення.
Autoincre-ment ± Автоінкрементне поле. Значення доступні тільки для читання. Зазвичай це ключове поле в складі первинного ключа. При додаванні нового запису значення поля обчислюється автоматично таким чином, щоб в одній і тій же таблиці не було однакових значень. Значення поля з видалених записів повторно не використовуються.
Binary B Довільні двійкові значення. Повинні інтерпретуватися застосуваннями користувача. DBD не інтерпретує значення цих полів. Зберігаються в окремих від основної таблиці.МВ-файлах. Довжина не визначена.
Bytes Y Довільні двійкові значення, що інтерпретуються застосуваннями користувача, довжиною від 1 до 240 байт. Зберігаються разом із таблицею БД.

 

– Size – розмір поля (для текстових полів);

– Key – включає зірочку ‘*’, якщо поле входить до складу первинного ключа. Це вказує на необхідність створення первинного індексу. Якщо первинний ключ складається з декількох полів, то ці поля вказуються у тій послідовності, в якій вони входять до складу ключа. Усі поля первинного ключа визначаються першими (до визначення інших полів);

– Required Field – прапорець, що вказує на обов’язковість існування значення поля на момент його запам’ятовування у БД;

– Якщо потрібно, вказуємо мінімальне (Minimum Value) та максимальне (Maximum Value) значення поля, а також значення поля за замовчуванням (Default Value);

5 Запам’ятовуємо таблицю, натискаючи кнопку Save As.

Зміна структури таблиці: File / Open / Table / ім’я таблиці і натиснути Ok.

Table / Restructure – внесення змін у структуру таблиці;

Table / Info Structure – інформація про структуру таблиці.

6 Натискаючи F9 переходимо в режим редагування таблиці і можемо вносити дані у таблицю.

 

Визначення цілісності посилання між таблицями БД

 

1 Для визначення цілісності посилання, необхідно відкрити підпорядковану таблицю Student.db і зайти в режим зміни структури таблиці (Table / Restructure). У списку Table Properties вибрати елемент Referential Integrity і натиснути кнопку Define. У вікні, що з’явиться, в списку Fields показані поля підпорядкованої таблиці, а в списку Tables – таблиці робочої бази даних.

2 Вибрати в списку Fields поле GCode (код групи) і натиснути кнопку з зображенням стрілки вправо. Назва буде записана в полі Child Fields (поле зовнішнього ключа підпорядкованої таблиці).

3 Вибрати в списку Tables таблицю Group.db і натиснути кнопку з зображенням стрілки вліво. В полі Parent Key (ключ головної таблиці) будуть показані поля первинного ключа таблиці Group.db.

4 Перемикачі визначають вигляд каскадного впливу на підпорядковану таблицю при зміні чи вилученні значень поля (полів) зв’язку у головній таблиці:

– Cascade – каскадні зміни і вилучення підпорядкованих записів;

– Prohibit – заборона на зміну поля зв’язку чи вилучення записів головної таблиці, якщо для даного запису є пов’язані записи в підпорядкованій таблиці.

5 Оскільки в Paradox цілісність посилання повинна мати ім’я, необхідно у вікні, що з’явиться, ввести назву зв’язку і натиснути ОK. Ім’я створеного зв’язку буде занесено в список.

6 Запам’ятати зміни в таблиці (кнопка Save) і знову зайти в режим реструктуризації таблиці Student.db. У списку Table Properties вибрати елемент Secondary indexes (індекси таблиці, крім індексу, що побудований за визначенням первинного ключа). В списку індексів з’явився новий індекс. Цей індекс автоматично побудовано за неявним визначенням зовнішнього ключа при створенні цілісності посилання.

Приклад: створити базу даних вищого навчального закладу.

 

Спеціальність

 

 

 

Група

 

 

Студент

 

Дисципліна

 

 


Практична робота № 2

 

Тема: Розробка форм для роботи з однією таблицею

Мета: Виконання головних дій по створенню простого застосування.

 

 

Завдання

 

Розробити застосування, що складається з форми для роботи з однією таблицею:

– за допомогою майстра форм Database Form Wizard;

– шляхом перетягування таблиці з Database Explorer;

– вручну з використанням компонентів TTable, TDataSource, TDBGrid.

– вручну з використанням компонентів TTable, TDataSource, TDBEdit, TLabel.

 

Зміст звіту:

 

1 Опис структури таблиці.

2 Опис розробленої форми.

3 Висновки по роботі.

 

Порядок виконання роботи

 

Зміст звіту.

 

1 Опис розробленої форми.

2 Висновки по роботі.

 

Порядок виконання роботи

 

Завдання.

 

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

2 Проаналізувати стан НД при роботі з ним.

Обов'язкові засоби: TDataModule, TDataBase, TDBGrid, TDBEdit, TDBLookupComboBox, TButton, TLabel.

 

Зміст звіту.

 

1 Опис створеного модуля даних.

2 Опис форм додатку з зазначенням встановлених значень властивостей компонентів.

3 Лістинги розроблених процедур та їх аналіз.

4 Висновки по роботі.

 

Порядок виконання роботи

Стани наборів даних

 

Набором даних у Delphi називають групу записів з однієї або декількох ТБД, доступних для використання через компоненти TTable або TQuery. З можливих станів НД розглянемо такі:

dsInactive – НД закритий;

dsBrowse – стан за замовчуванням для відкритого НД. Показує, що записи переглядаються, але в даний момент не змінюються;

dsEdit – НД знаходиться у стані редагування поточного запису (після явно або неявно викликаного методу Edit);

dsInsert – НД знаходиться у стані додавання нового запису (після явно або неявно викликаного методу Insert або Append).

Одержати поточний стан НД можна, використовуючи метод State. Він повертає такі константи: dslnactive, dsBrowse, dsEdit, dslnsert, dsSetKey, dsCalcFields, dsFilter.

 

Наприклад:

IF Table1. State = dslnactive THEN Table1. Active:= True;

Подія OnStateChange (компонент DataSource) настає щоразу при зміні стану НД. Для відображення на екрані (у компоненті Label1) повідомлення про поточний стан НД використовуємо процедуру:

procedure TForm1.DataSource1StateChange(Sender: TObject);

var S: String;

begin

CASE Table1. State OF

Dslnactive:S:= 'He активна';

DsBrowse:S:= 'Перегляд';

dsEdit:S:= 'Редагування';

dslnsert:S:= 'Вставка';

END; {case}

Label1.Caption:= S;

end;

 

Компонент TDBLookupComboBox

 

Компонент TDBLookupComboBox застосовується для вибору значень у поле одного набору даних (НД-1) зі списку значень, джерелом яких виступають значення поля з іншого набору даних (НД-2). Набори даних НД-1 і НД-2 зв'язуються по полю зв'язку. Це поле повинно мати ідентичний тип і в НД-1, і в НД-2. Між НД-1 і НД-2 встановлюється зв'язок, як правило, багато (НД-1)-до-одного (НД-2).

Ключові властивості компонента TDBLookupComboBox:

DataSource - вказує на компонент TDataSource для НД-1.

DataField - встановлює поле НД-1, у який буде поміщатися значення з НД-2.

ListSource - вказує на компонент TDataSource НД-2.

ListField - встановлює поле, значення якого буде показуватися в списку вибору. Можна зазначити декілька полів. Тоді всі вони будуть відображатися в списку вибору. Імена полів розділяються крапкою з комою.

RowCount - вказує, скільки рядків відображається у списку, що випадає. При зміні розмірів списку, наприклад, шляхом занесення нового значення у властивість Height, RowCount зміняться автоматично.

KeyField - установлює поле зв'язку між наборами даних НД-1 і НД-2.

KeyValue - містить поточне значення поля зв'язку. Якщо під час виконання програми його значення зміниться, то буде зроблена спроба відшукати в НД-2 запис зі значенням, зазначеним в цій властивості.

 

Порядок виконання роботи

 

Застосування повинно складатися з двох форм: перша - для перегляду інформації (містить компонент DBGrid для якого властивість ReadOnly має значення True), друга - для редагування (містить компоненти TDBEdit, TDBLookupComboBox та ін.). Додамо в застосування компонент TDataModule і розмістимо в ньому компоненти TDataBase, TTable і TDataSource.

У батьківській формі встановимо властивість DBGrid1.DataSource= DataModule1.DataSource1; а у дочірній формі задамо властивості DataSource для усіх компонентів, що працюють з окремими полями ТБД (компоненти TDBEdit, TDBLookupComboBox та ін.). У батьківській і дочірній формах розмістимо компоненти TLabel, що відображатимуть повідомлення про поточний стан НД.

Батьківська форма містить кнопки “Вставити”, “Змінити”, “Вилучити”. Дочірня форма містить кнопки “Запам'ятати”, “Скасувати”.

 

Оброблювачі подій для батьківської форми:

 

// натиснута кнопка "Вставити"

procedure TParentForm.InsertButtonClick(Sender: TObject);

begin DataModule1.Table1.Insert;

ChildForm.ShowModal;

end;

// натиснута кнопка "Змінити"

procedure TParentForm.EditButtonClick(Sender: TObject);

begin DataModule1.Table1.Edit;

ChildForm.ShowModal;

end;

// натиснута кнопка "Вилучити"

procedure TParentForm.DeleteButtonClick(Sender: TObject);

begin IF MessageDIg('Підтвердити вилучення запису',

mtlnformation, [mbYes, mbNo], 0) = mrYes THEN

DataModule1.Table1.Delete;

end;

 

Оброблювачі подій для дочірньої форми:

 

// натиснута кнопка “Запам'ятати”

procedure TChildForm.PostButtonClick (Sender: TObject;);

begin IF DataModule1.Table1.Modified THEN

DataModule1.Table1.Post;

// при успішному виконанні методу Post виходимо з модальної форми

ChiIdForm.ModalResult:= mrOk;

end;

// натиснута кнопка “Скасувати” (ModalResult = mrCancel)

procedure TChildForm.CancelButtonClick(Sender: TObject);

begin

DataModule1.Table1.Cancel;

end;

 

Пример.

 

 

 


Практична робота № 6

 

Тема: Організація роботи з індексами

Мета: вивчення основ роботи з індексами

 

 

Завдання:

 

Розробити застосування, яке дозволяє отримувати інформацію про індекси. Вивести в:

ListBox1 імена всіх індексів ТБД, асоційованої з Table1;

Edit1.Text список полів індексу, чиє ім’я є поточним в ListBox1.

Примітка: необхідно збільшити у разі потреби кількість індексів таблиці щонайменше до трьох.

Обов’язкові засоби: TIndex Dets, GetIndex Names.

 

Зміст звіту.

 

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

Лістинги розроблених процедур та їх аналіз.

Висновки по роботі.

Порядок виконання роботи

Компонент TIndexDefs

Компонент TIndexDefs містить інформацію про всі індекси таблиці бази даних, що оголошені в ній в поточний момент. TTable має властивість

property IndexDefs:TIndexDefs;

яка містить посилання на об'єкт класу TIndexDefs. Тому для кожного компонента TTable завжди можна отримати інформацію про індекси даної ТБД через властивості і методи TIndexDefs.

Властивості:

property Count: Integer; - повертає число індексів;

property Item[Index:Integer]: TIndexDefs; - кількість об'єктів типу TIndexDefs, кожний з який містить інформацію про конкретний індекс. Index повинний належати діапазону [0..Count-1].

property Name:string; - повертає ім'я індексу;

property Fields:string; - повертає список полів, з яких побудований даний індекс;

property Options:TIndexOptions; - повертає характеристики індексу у вигляді множини TindexOptions = set of (ixPrimary, ixUnique, ixDescending, ixNonMaintained, ixCaseInsensitive), де IxPrimary - визначає первинний індекс; ixUnique - визначає унікальний індекс; ixDescending - визначає індекс, побудований за зменшенням значень ключових полів; ixCaseInsensitive - визначає індекс, нечутливый до регістру літер.

 

 

Методи:

procedure Add(const Name, Fields:string,Options:TIndexOptions) - створює новий об'єкт TIndexDef і поміщає його в колекцію TIndexDefs.Items;

procedure Update;- обновляє елемент колекції TIndexDefs.Items;

procedure Clear;- очищає елемент колекції TIndexDefs.Items;

function IndexOff(const Name:string):integer; - повертає з колекції TIndexDefs.Items індекс, у якого властивість Name збігається з параметром Name даного методу.

function FindIndexForFields(const Fields:string): TIndexDefs;- відшукує індекс полів, що записані в рядку Fields.

procedure GetIndexNames (List:TStrings)- повертає в параметрі List список імен індексів.

 

Приклад: Отримати інформацію про індекси у таблиці студенти.

 

 


Практична робота № 7

 

Тема: Організація пошуку у базі даних

Мета: вивчення властивостей, методів та подій для пошуку даних.

 

Завдання

 

1 Виконання пошуку з використанням індексів та без індексів;

2 Виконання неточного пошуку.

Обов’язкові засоби: Locate, Filtered, FindFirst, FindLast, FindNext, FindPrior, FindKey,FindNearest.

 

Зміст звіту.

 

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

2 Лістинги розроблених процедур та їх аналіз.

3 Висновки по роботі.

 

Порядок виконання роботи

 

У компоненті TTable для пошуку записів в НД застосовуються такі методи:

function FindKey([список значень]): Boolean - шукає запис, який точно задовольняє умовам у списку значень; існує також його метод, що дублює, GoToKey;

procedure FindNearest([список значень]) - шукає запис, що приблизно задовольняє умовам у списку значень; існує також його метод, що дублює, GoToNearest;

Крім цього, у TTable є методи, успадковані від батьківського класу:

function Locate([список полів], [список значень]): Boolean - установлює покажчик на запис, у якого список полів точно або неточно містить значення зі списку значень.

function Lookup([список полів], [список значень], [список результуючих полів]):Variant - повертає значення полів зі списку результуючих полів для запису в НД, у якої поля зі списку пошукових полів точно містять значення зі списку значень. Покажчик поточного запису не змінюється.

 

Зміст звіту.

 

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

2 Лістинги розроблених процедур та їх аналіз.

3 Висновки по роботі.

 

Порядок виконання роботи

 

Методи ApplyRange і SetRange.

Для фільтрації записів у ТБД компонент TTable має такі методи:

procedure SetRangeStart - встановлює нижню межу фільтра;

procedure EditRangeEnd - встановлює верхню межу фільтра;

procedure ApplyRange - здійснює фільтрацію записів у TTable; умови фільтрації визначаються методами SetRangeStart і EditRangeEnd;

procedure SetRange(const StartValues, EndValues: array of const) - дає той же ефект, що і послідовне виконання методів SetRangeStart, EditRangeEnd і ApplyRange. У якості параметрів використовуються масиви констант, які містять значення ключових полів. Методи ApplyRange / SetRange показують у НД тільки ті записи, індексні поля яких лежать у діапазоні [StartValues.. EndValues].

Фільтрація методами ApplyRange / SetRange проводиться по полю (полях) поточного індексу, обумовленого властивістю TTable.IndexName або TTable.IndexFieldNames. У випадку, якщо значення цих властивостей не встановлені, за замовчуванням використовується головний індекс ТБД. Тому, якщо потрібно використати індекс, відмінний від головного, необхідно явно перевстановити значення властивості TTable.IndexName (ім'я поточного індексу) або TTable.IndexFieldNames (список полів поточного індексу).

property Filtered:Boolean;

Властивість Filtered, встановлена в True, ініціює фільтрацію, умова якої записана або в обробнику події OnFilterRecord, або утримується як текстове значення у властивості Filter. Якщо встановлені різні умови фільтрації і у події OnFilterRecord, і у властивості Filter, то виконуються обидві.

Установка Filtered у False призведе до скасування фільтрації, умови якої зазначені в події OnFilterRecord або (і) у властивості Filter. При цьому фільтрація, накладена на НД методом SetRange або ApplyRange і йому супутніми методами, не порушується.

Властивості Filter і Filtered.

Властивість

property Filter:string;

дозволяє задати умови фільтрації. НД буде відфільтрований, як тільки його властивість Filtered стане рівною True.

При записі умови фільтрації можна застосовувати оператори відношення: <; >; >=; <=; =; <>; а також використовувати логічні оператори AND, NOT і OR.

 

Використання методів FindFirst, FindLast, FindNext, FindPrior.

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

Для цього використовуються методи FindFirst, FindLast, FindNext, FindPrior.

Умову фільтрації можна зробити співпадаючою з умовою пошуку, зазначеною у параметрі KeyValues методу Locate. При цьому пошук за допомогою зазначених методів має перевагу перед пошуком за допомогою Locate: якщо у Locate можна вказувати тільки значення, то в умові фільтрації можна вказувати логічні умови.

У випадку, якщо запис знайдено, дані методи повертають True у протилежному випадку - False.

function FindFirst: Boolean; - переходить на перший запис, що задовольняє умові фільтрації;

function FindLast: Boolean; - переходить на останній запис, що задовольняє умові фільтрації;

function FindNext: Boolean; - переходить на наступний запис, що задовольняє умові фільтрації;

function FindPrior: Boolean; - переходить на попередній запис, що задовольняє умові фільтрації;

 

Приклад: Виконати фільтрацію у таблиці студент.

 

Початкова форма:

 

Результат:

 

 


ЗАГАЛЬНІ ЗАУВАЖЕННЯ ДО РОБОТИ З КОМПОНЕНТОМ TQuery

 

 

Компонент TQuery призначений для:

– виконання запитів до БД, які повертають НД, джерелом даних для якого можуть слугувати записи як однієї, так і декількох таблиць БД;

– виконання запитів до БД, які не повертають наборів даних (додавання, зміна, видалення записів в ТБД тощо).

Текст будь-якого запиту зберігається у властивості SQL компонента TQuery.

Таким чином, один компонент TQuery використовується для виконання таких різних запитів, як, наприклад, SELECT та INSERT.

Для з’єднання компонента TQuery з базою даних необхідно у властивості DatabaseName вказати:

– псевдонім БД, раніше визначений за допомогою утиліти BDE Adminastrator;

– перевизначений псевдонім із властивості DatabaseName явно визначеного компонента TDataBase, якщо він використовується.

Запити, що виконуються компонентом TQuery, можуть бути статичними або динамічними.

Статичний запит характеризується тим, що SQL-оператор, який його описує, не змінюється в процесі роботи застосування.

SQL-оператор динамічного запиту може частково змінюватися під час роботи застосування. В цьому випадку ті частини SQL-оператора, що змінюються, оформлюють у вигляді параметрів, значення яких можуть багаторазово змінюватись в процесі роботи застосування.

Для формування статичного запиту необхідно:

1 Вибрати для існуючого компонента TQuery властивість SQL в інспекторі об’єктів і натиснути кнопку в правій частині рядка.

2 У вікні текстового редактора набрати текст SQL-запиту та натиснути ОК.

3 Встановити властивість Active компонента в True, якщо результуючий НД необхідно відкрити в момент початку роботи застосування, або залишити властивість Active у стані False, якщо відкриття НД буде виконуватися в програмі в деякий момент роботи застосування.

Умову вибору записів, що реалізована в статичному запиті, змінити не можна.

У випадку динамічного запиту під параметром розуміють ім’я, перед яким ставиться двокрапка, наприклад:

:Parameter1

Імена параметрів можуть бути довільними.

Для формування динамічного запиту необхідно:

1 Вибрати для існуючого компонента TQuery в інспекторі об’єктів властивість SQL і натиснути кнопку текстового редактора.

2 У вікні текстового редактора набрати текст SQL-оператора з параметрами.

3 Вибрати в інспекторі об’єктів властивість Params і натиснути кнопку у рядку даної властивості. У вікні, що з’явиться, будуть показані імена всіх параметрів, введених у текст динамічного SQL-оператора на кроці 2. Список параметрів відслідковується автоматично щоразу при змінні складу властивості SQL.

4 Кожному параметру необхідно поставити у відповідність деякий тип, а якщо потрібно, то й стартове значення в полі Value. Перемикач Null Value дозволяє вказувати в якості стартового значення NULL.

5 Компонент TQuery можна зробити активним (встановити властивість Active=True) на стадії розробки застосування лише у тому випадку, коли для кожного з параметрів визначено стартове значення.

Якщо компонент TQuery не відкрито в момент створення форми, його можна відкрити в будь-який момент програмно.

У випадку використання оператора SELECT, після відкриття компонента TQuery повертається набір даних. Такий компонент TQuery необхідно відкривати:

– встановленням властивості Active в значення True, наприклад:

Query1.Active:=True;

– виконанням метода procedure Open, наприклад:

Query1.Open;

У випадку використання операторів INSERT, UPDATE, DELETE, набір даних не повертається. Такий компонент TQuery необхідно відкривати, виконуючи метод procedure ExecSQL, наприклад:

Query1.ExecSQL;

Закриття компонента TQuery здійснюється методом procedure Close або встановленням в False властивості Active, наприклад

Query1.Active:=False;

Виконання методу Close для компонента TQuery, який не повертає набір даних, не має ніяких наслідків, оскільки з компонентом не пов’язаний відкритий набір даних.

Для передачі значень параметрів може використовуватись властивість DataSource компонента TQuery. У цьому випадку явного надання значень параметрам динамічного запиту не виконується, тобто не кодуються оператори присвоєння типу

Query1.ParamByName(‘Ім’я Параметра’).Value:=Значення;

Застосування визначає, чи є посилання на будь-який компонент TDataSource у властивості DataSource компонента TQuery. Якщо такого посилання немає – відбувається збудження виключної ситуації; якщо є – в наборі даних, що пов’язаний з TDataSourse, відшукуються поля, які мають такі ж імена, як і параметри динамічного запиту. Якщо такі поля є, то їх поточні значення беруться в якості значень параметрів, якщо таких полів немає - відбувається збудження виключної ситуації.

 


Практична робота № 9

 

Тема: Організація статичних запитів за допомогою мови SQL

Мета: Набуття практичних навичок роботи з компонентом TQuery для організації статичних запитів.

 

Завдання:

 

1 Розробити застосування, яке дозволяє вводити текст SQL-оператора та переглядати результати виконання запиту.

2 Обов’язкові засоби: TQuery.

 

Зміст звіту:

 

1 Структури таблиць робочої бази даних.

2 Тексти статичних SQL-операторів, які виконують команди оновлення даних ТБД (INSERT, UPDATE, DELETE) та команди маніпулювання даними (SELECT). Навести словесний опис запитів.

3 Опис роботи застосування. Навести фрагменти програмних кодів, які виконують введені SQL-оператори.

4 Аналіз результатів роботи.

 

Порядок виконання роботи

 

На формі (Form1) розміщуються робочі ТБД (компоненти TQuery, TTable, TDataSource, TDBGrid), поле для вводу SQL-оператора (компонент TMemo), два компоненти TPanel. Після введення SQL-оператора користувач натискає одну з екранних кнопок:

– «Виконати запит», після чого введений запит виконується для однієї чи декількох таблиць; результат виконання запиту виводиться на іншій формі у модальному режимі;

– «Виконати оновлення», після чого у зазначеній таблиці буде модифіковано, введено або вилучено визначений в SQL-операторі рядок (рядки). Для перегляду результатів оновлення необхідно виконати метод Refresh.

На другій формі розміщуються компоненти TDataSource, TDBGrid, які використовуються для виведення результатів виконання запиту. При натисканні кожної з кнопок на першій формі текст SQL-оператора переписується з компонента Memo1 у властивість SQL компонента Query1.

 

 

Приклад: Знайти прізвища всіх студентів, які займаються на факультеті АІТ.

 

 

Результат:

 

 


Практична робота № 10

 

Тема: Організація зв’язку багато-до-багатьох

Мета: Набуття практичних навичок роботи з компонентом TQuery

 

 

Завдання:

 

Розробити застосування для формування проміжної таблиці при реалізації зв’язку багато-до-багатьох за допомогою параметричних SQL-операторів оновлення даних ТБД (INSERT, DELETE).

Обов’язкові засоби: TQuery.

 

Зміст звіту:

 

1 Структури таблиць, які зв’язані відношенням багато-до-багатьох.

2 Тексти динамічних SQL-операторів, які виконують оновлення проміжної таблиці (INSERT, DELETE). Навести словесний опис запитів.

3 Опис роботи застосування. Навести фрагменти програмного коду.

4 Аналіз результатів роботи.

 

Порядок виконання роботи

 

Застосування повинно складатися з двох форм. На першій розмістити одну з двох головних таблиць. Активізацію другої форми реалізувати за допомогою порожнього стовпця компонента TDBGrid, пов’язаного з першою таблицею. Для цього доповнити компонент DBGrid1 новим стовпцем (Columns Editor / Add). Встановити властивість ButtonStyle порожнього стовпця в значення cbsEllips. Це призведе до того, що в режимі редагування порожнього стовпця з’явиться кнопка (…). При її натисканні виникає подія OnEditButtonClick. В обробнику цієї події передбачити виклик другої форми, що включає другу головну таблицю та проміжну.

Кнопки Ввести запис і Видалити запис дозволяють формувати поточне значення проміжної таблиці. При розробці додатку продемонструвати різні способи передачі значень параметрам запиту – явне шляхом присвоєння параметру значення:

– деякого поля поточного запису таблиці;

– властивості Text компонента TЕdit;

та неявне:

– за допомогою властивості DataSource компонента TQuery.

 

 

Приклад. Головна форма:

 

 

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

 

 


Практична робота № 11

 

Тема: Формування запитів з використанням мови QBE та за допомогою засобу Visual Query Builder

Мета: Виконання основних операцій по створенню запитів мовою QBE

 

 

Завдання:

 

За допомогою засобу Visual Query Builder і QBE сформувати тексти SQL-операторів SELECT, що виконують:

– пошук інформації за заданою умовою у декількох таблицях (розглянути випадки декількох умов, з’єднаних зв’язками AND і OR);

– обчислення агрегатних функцій (COUNT, SUM, MAX, MIN) з групуванням за значенням деякого стовпця;

– накладення умови на групу.

 

Зміст звіту:

 

1 Структури таблиць робочої бази даних.

2 Опис запитів: а) словесний; б) мовою SQL; в) мовою QBE.

3 Аналіз результатів роботи.

 

Порядок виконання роботи

 

Формування тексту SQL-оператора SELECT може здійснюватися за допомогою вбудованого в Delphi засобу Visual Query Builder або засобу QBE, що входить до складу DatabaseDesktop. Використання цих конструкторів дозволяє спростити процес побудови складних запитів.

Для формування тексту SQL-оператора SELECT за допомогою Query Builder необхідно виконати такі операції:

1 Помістити на форму (звичайну або модуля даних) компонент типу TQuery. Задати ім’я об’єкту запита (властивість Name). Надати значення властивості DatabaseName.

2 Клацнути правою кнопкою миші на компоненті типу TQuery і з контекстного меню вибрати Query Builder. Якщо з’явиться вікно вибору бази даних, двічі клацнути на відповідному імені.

3 У вікні Add Table необхідно вибрати імена таблиць, які будуть брати участь в запиті. Двічі клацнути на відповідних іменах таблиць і закрити діалогове вікно. З’явиться вікно Visual Query Builder, що включає вибрані таблиці.

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

5 Необхідно визначити, які стовпці таблиць, що з’єднуються, будуть входити до результуючої таблиці. Щоб додати стовпець до запиту, необхідно двічі клацнути на ньому. Назва стовпця повинна з’явитися в нижній частині вікна Query Builder.

6 Умови, що накладені на значення стовпців, вводяться в графі Criteria цих стовпців в нижній частині вікна Query Builder. Для динамічних запитів в графі Criteria вказується умова порівняння з параметром.

7 Для групування даних, що повертаються запитом, за значенням деякого стовпця необхідно в нижній частині вікна Query Builder клацнути правою кнопкою миші на полі Options цього стовпця і зі списку, що з’явиться, вибрати пункт Group.

8 Для визначення умови обчислення агрегатних функцій (COUNT, SUM, MAX, MIN) використовується Expression Builder (кнопка a+b) панелі інструментів засобу Query Builder. В діалоговому вікні Expression можна сформувати необхідний вираз. Для цього:

– В рядку Expression Name ввести псевдонім стовпця, що обчислюється;

– Із списку Tables вибрати ім’я таблиці, для якої буде обчислюватися агрегатна функція;

– Двічі клацнути на імені агрегатної функції в списку Function і двічі на імені відповідного стовпця в списку Columns;

– Повернутися в головне вікно Query Builder, натиснувши Save і Close.

9 Для перегляду SQL-оператора, згенерованого системою Query Builder, натиснути кнопку View SQL (на піктограмі кнопки зображені окуляри).

10 Після закінчення роботи з Query Builder запит буде автоматично збережено у властивості SQL відповідного компонента TQuery. Імена параметрів, що використовуються в запиті, будуть автоматично внесені у властивість Params цього компонента.

Для формування тексту SQL-оператора SELECT за допомогою засобу QBE необхідно виконати такі операції:

11 Запустити DatabaseDesktop (опції Tools / DBD) і настроїти Working Directory на необхідний аліас.

12 Вибрати пункти меню File / New / QBEQuery. З’явиться діалогове вікно зі списком усіх таблиць зазначеної БД.

13 Виберіть необхідні таблиці у вікні Select File і закрийте його. У вікні Query з’являться шаблони таблиць, що додані до запиту. При необхідності можна збільшити розміри вікна Query. Ще раз відкрити вікно Select File можна клацнувши на піктограмі Add Table (кнопка +) панелі інструментів.

14 Для з’єднання таблиць використайте екземпляри елементів, що ідентифікують спільні поля таблиць.

– У випадку природного з’єднання клацніть на піктограмі Join Tables. Потім клацніть на стовпцях, за якими виконується з’єднання для обох таблиць. В кожному полі з’явиться слово join1. Повторіть цей процес для з’єднання інших таблиць, що входять до запиту.

– У випадку -з’єднання введіть умову з’єднання, натисніть F5 (або введіть знак підкреслення) і зазначте екземпляр елемента, що ідентифікує поля, які порівнюються. Екземпляр елемента буде виділено червоним кольором.

15 Щоб додати стовпчик до результуючої таблиці запиту, необхідно клацнути на прапорці, що пов’язаний з цим стовпчиком. З’явиться прапорець 3, який вказує, що в результуючій таблиці будуть виведені унікальні дані в порядку їх збільшення. У випадку, коли необхідно вивести усі результуючі дані, включаючи дублікати, виберіть прапорець 3+ (з меню за правою кнопкою миші). У цьому випадку дані не будуть сортуватися. Для сортування у порядку зменшення даних виберіть прапорець 3 .

16 Умови, що накладені на значення стовпця, вводяться в полі стовпця. Для введення умов, що з’єднані зв’язкою OR необхідно ввести ще один рядок в шаблон таблиці (клавіша Insert). Для вилучення рядка з шаблону натиснути Ctrl+Del.

17 Для визначення умови обчислення агрегатних функцій (COUNT, SUM, MAX, MIN) необхідно описати поле, що обчислюється (типу cаlc) в будь-якому з стовпців шаблона. Встановити прапорець 3 в полі, за значеннями якого треба згрупувати дані.

18 Для перевірки своєї роботи можна переглянути результуючу таблицю. Для цього клацніть на піктограмі з зображенням блискавки.

Для перетворення оператора QBE в SQL-оператор, клацніть на піктограмі SQL. Отриманий SQL-вираз можна зберегти на диску або скопіювати в буфер обміну і вставити у властивість SQL об’єкта TQuery.

 

Приклад: Знайти прізвища всіх студентів, які вчаться на спеціальності ІТЕП.

Результат виконання запиту:

 


Практична робота № 12

 

Тема: Побудова звітів



Поделиться:


Последнее изменение этой страницы: 2017-01-25; просмотров: 114; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.120.109 (0.304 с.)