Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МВ Лабораторные работы ОБДЗ.doc
Скачиваний:
3
Добавлен:
06.11.2018
Размер:
324.61 Кб
Скачать

Лабораторна робота № 4.

Агрегатні функції мови SQL

Мета роботи: вивчення можливості обробки даних за допомогою агрегатних функцій мови SQL.

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

  1. Створити запит, котрий виводить всі строки таблиці, вказаної в варіанті.

  2. Створити запит для демонстрації модифікатору DISTINCT.

  3. Продемонструвати дію спеціальних функції IN, BETWEEN, LIKE, та IS NULL в умовах.

  4. Продемонструвати роботу спеціальних функцій з умовою NOT.

  5. Продемонструвати використання COUNT(*)

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

  7. Використати просте обчислення як параметр агрегатної функції.

  8. Продемонструвати роботу GROUP BY.

  9. Продемонструвати роботу HAVING.

Варіанти:

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

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

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

  1. Бібліотека має декілька відділів. Відділ характеризується назвою, номером, номером приміщення, номером телефону. Читач може бути записаним в декількох відділах і брати там книги. Читач характеризується номером, ПІБ, адресою, телефоном. Книга має назву, автора, УДК, ББК.

  2. Клієнт має банківські рахунки в різних банках. Банк характеризується, назвою, адресою, № телефону, № ліцензії. Клієнт має ПІБ, адресу, телефон. Банківський рахунок характеризується номером, номером банку, номером клієнта, видом рахунку, сумою.

  1. Акції акціонерного товариства зберігаються у зберігача. Одне акціонерне товариство може зберігати свої акції у декількох зберігачів а один зберігач може зберігати акції декількох акціонерних товариств. Акціонерне товариство характеризується назвою, адресою, № телефону. Зберігач акцій характеризується назвою, адресою, № телефону. Акція характеризується номером, номером категорії, датою емісії, номіналом.

  1. Товари відправляються в контейнерах морським транспортом, певним рейсом. Рейс характеризується типом і назвою судна, портом відправлення та портом прибуття, датою відправлення і датою прибуття. Контейнер має номер, опис товару, правила розвантаження. На контейнер оформляється накладна, в яку заноситься номер контейнера, назва судна, номер рейса, вантажоодержувач.

  1. Корпорація складається із декількох підприємств. Кожне підприємство випускає декілька видів продукції і поставляє на склади, які розташовані в різних містах. Підприємство характеризується назвою, адресою, видами продукції та її кількістю. Продукція характеризується назвою, кодом, упаковкою. Склад характеризується адресою, назвою. Поставка характеризується кодом продукції, датою, кількістю.

Лабораторна робота № 5.

Розробка тригерів та збережених процедур

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

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

  1. Створити тригери згідно з варіантом завдання.

  2. Створити збережені процедури згідно з варіантом завдання.

Варіанти:

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

Створити генератори та тригери для автоінкрементації ключових полів.

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

Створити збережену процедуру для виводу інформації про проекти та осіб, які на ньому задіяні.

Створити тригер, який видаляє всі записи про прив’язку людей до проекту у разі видалення проекту з бази.

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

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

Створити генератори та тригери для автоінкрементації ключових полів

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

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

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

Створити збережену процедуру для обчислення загальної кількості годин та відсотку годин по дисципліні від загальної кількості.

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

Створити генератори та тригери для автоінкрементації ключових полів

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

Створити збережену процедуру для виводу інформації про накладні та їх вміст.

Створити тригер, який видаляє всі записи про накладну у разі видалення накладної з бази.

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

  1. Бібліотека має декілька відділів. Відділ характеризується назвою, номером, номером приміщення, номером телефону. Читач може бути записаним в декількох відділах і брати там книги. Читач характеризується номером, ПІБ, адресою, телефоном. Книга має назву, автора, УДК, ББК.

Створити генератори та тригери для автоінкрементації ключових полів

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

Створити збережену процедуру для виводу інформації про відділ, та користувачів, які в ньому записані.

Створити тригер, який видаляє всі записи про читача у разі його видалення.

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

  1. Клієнт має банківські рахунки в різних банках. Банк характеризується, назвою, адресою, № телефону, № ліцензії. Клієнт має ПІБ, адресу, телефон. Банківський рахунок характеризується номером, номером банку, номером клієнта, видом рахунку, сумою.

Створити генератори та тригери для автоінкрементації ключових полів.

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

Створити збережену процедуру для виводу інформації про банк та рахунки , які належать цьому банку.

Створити тригер, який видаляє всі записи про рахунки у разі видалення банку з бази.

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

  1. Акції акціонерного товариства зберігаються у зберігача. Одне акціонерне товариство може зберігати свої акції у декількох зберігачів а один зберігач може зберігати акції декількох акціонерних товариств. Акціонерне товариство характеризується назвою, адресою, № телефону. Зберігач акцій характеризується назвою, адресою, № телефону. Акція характеризується номером, номером категорії, датою емісії, номіналом.

Створити генератори та тригери для автоінкрементації ключових полів.

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

Створити збережену процедуру для виводу інформації про акціонерне товариство та акції які випущенні на нього.

Створити тригер, який видаляє всі записи про акції, які належать акціонерному товариству, яке видаляється.

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

  1. Товари відправляються в контейнерах морським транспортом, певним рейсом. Рейс характеризується типом і назвою судна, портом відправлення та портом прибуття, датою відправлення і датою прибуття. Контейнер має номер, опис товару, правила розвантаження. На контейнер оформляється накладна, в яку заноситься номер контейнера, назва судна, номер рейса, вантажоодержувач.

Створити генератори та тригери для автоінкрементації ключових полів.

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

Створити збережену процедуру для виводу інформації про рейс та вантаж який він переводить.

Створити тригер, який видаляє всі записи про рейс у разі видалення рейсу з бази.

Створити збережену процедуру для обчислення кількості контейнерів у кожному рейсі.

  1. Корпорація складається із декількох підприємств. Кожне підприємство випускає декілька видів продукції і поставляє на склади, які розташовані в різних містах. Підприємство характеризується назвою, адресою, видами продукції та її кількістю. Продукція характеризується назвою, кодом, упаковкою. Склад характеризується адресою, назвою. Поставка характеризується кодом продукції, датою, кількістю.

Створити генератори та тригери для автоінкрементації ключових полів

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

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

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

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

Лабораторна робота № 6.

Розробка додатку до бази даних в середовищі Delphi

Мета роботи: вивчення основні принципи побудови додатків до бази даних.

Завдання: Розробити додаток до бази даних в середовищі Delphi. У додатку на кожну таблицю має бути створена форма її відображення, яка дозволяє редагувати, додавати та видаляти дані.

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

  1. Ознайомитись з теоретичними відомостями.

  2. Створити додаток до своєї бази даних.

Теоретичні відомості

Розробка простого клієнту для роботи з базою даних.

Клієнтська частина систем баз даних часто оформляється у вигляді прикладних програм (додатків). Для створення додатків баз даних в середовищі Delphi є набір компонентів на вкладках Data Access, Data Controls і Interbase.

Розробку додатку почнемо з додавання в проект спеціальної невізуальної форми Datamodule (File/new/datamodule), в якій розміщуватимемо компоненти для доступу до даним. Помістимо в неї компоненти Ibtable, Ibtransaction, Ibquery з вкладки Interbase і компонент Ibsource з вкладки Data Access (малюнок 6.1).

Малюнок 1.6 - форма Datamodule

Компонент Ibdatabase призначений для зв'язку з базою даних. На сторінці властивостей диспетчера об'єктів необхідно визначити ім'я набору даних (Databasename), параметри доступу (Params) і компонент для роботи з транзакціями за умовчанням (Defaulttransaction).

Введемо як ім'я набору даних шлях до створеної бази даних (D:\database\test.gdb). У розділі «Params» необхідно ввести ім'я користувача, пароль і тип кодування символів:

user_name=sysdba

password=masterkey

lc_ctype=win1251

Властивість Loginprompt слід встановити в false, в тому разі якщо немає необхідності запрошувати ім'я користувача і пароль при кожному підключенні до бази даних. Інакше слід встановити цю властивість в значення true.

Сторінка властивостей компоненту Ibdatabase представлена на малюнку 6.2.

Малюнок 6.2 - Властивості компоненту Ibdatabase

Компонент Ibtransaction призначений для управління транзакціями додатку з базою даних. Транзакція - набір логічно зв'язаних операцій, що працюють з даними бази даних, і або що переводить базу даних в з одного цілісного стану в інше, або немає (тобто що залишає БД в цілісному стані, що існував до початку транзакції).

Транзакції володіють наступними властивостями: впорядкованістю, неподільністю, постійністю.

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

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

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

Базовими примітивами при роботі з транзакціями є:

- Start Transaction - почати транзакцію;

- Commit - завершити транзакцію і прийняти зроблені зміни;

- Rollback - завершити транзакцію і відмінити зроблені зміни.

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

Хай перед початком транзакції довідник має в собі всього два записи. Користувач 1 починає транзакцію і додає в довідник новий запис:

INSERT INTO PHONE (FIO, BDATE, PHONE) VALUES ('Петров Юрій Сергійович', '1983-12-10', 421428).

Користувач 2 починає транзакцію і виконує запит

SELECT * FROM PHONE.

Результат запиту поверне ті два записи, які знаходилися з базі до початку транзакції першим користувачем. Хай користувач 2 виконує додавання запису

INSERT INTO PHONE (FIO, BDATE, PHONE) VALUES ('Кушнарев Сергій Іванович', '1985-04-01', 452328).

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

Запит SELECT поверне все 4 записи тільки після того, як перший і другий користувачі завершать транзакцію за допомогою примітиву COMMIT. Якщо хоч би один з користувачів завершить транзакцію примітивом Rollback всі зміни в базі даних, зроблені після початку транзакції будуть відмінені.

У компоненті Ibtransaction необхідно встановити властивість Defaultdatabase, вказавши в нім ім'я компоненту Ibdatabase.

Компонент Ibquery призначений для передачі запитів від клієнтського застосування серверу баз даних. На сторінці властивостей необхідно вказати компонент управління транзакціями transaction а Ibtransaction і заповнити редактор пропозицій SQL (наприклад, SELECT * FROM PHONE).

Компонент Datasource виконує зв'язок джерела даних (Tibquery, Tibtable і ін.) і інтерфейсних компонентів форми для відображення даних. На сторінці властивостей слід вказати компонент джерело даних Dataset (у нашому випадку Ibquery).

Приступимо до створення інтерфейсної частини проекту. Відзначимо, що константне ім'я файлу бази даних, вказане у властивості Databasename, утрудняє перенесення додатку на інші комп'ютери. Тому, у верхній частині головної форми проекту (малюнок 6.3) розташуємо рядок введення шляху до бази даних, компонент-діалог вибору імені бази і кнопку Btopen для його активізації. Кнопка «Відновити» (Btrefresh) призначена для оновлення інформації, що отримується з бази даних.

У клієнтській частині вікна розташуємо компонент Dbgrid з вкладки Data Controls для відображення результатів запиту Ibquery. Як джерело даних вкажемо компонент Datasource (File/useunitаdatamodule2).

Малюнок 1.8 - інтерфейсна частина проекту

Розробимо обробники подій для кнопок btopen і Btrefresh.

//Відкрити базу даних

procedure Tform1.BtOpenClick(Sender: Tobject);

begin

if Opendialog.Execute then //вводім ім'я файлу бази даних

begin

//Виводимо його в рядок редагування

Eddatabasename.Text:=OpenDialog.FileName;

//Встановлюємо ім'я для компоненту Ibdatabase

Datamodule2.IBDataBase.DatabaseName:=OpenDialog.FileName;

//Устанваліваєм зв'язок з базою даних

Datamodule2.IBDataBase.Connected:=true;

//Активізуємо запит

Datamodule2.IBQuery.Active:=true;

end;

end;

//Відновити стан бази даних

procedure Tform1.BtRefreshClick(Sender: Tobject);

begin

//Завершуємо транзакцію. Запит закривається.

Datamodule2.IBQuery.Transaction.Commit;

//Знов активізуємо запит

Datamodule2.IBQuery.Active:=true;

end;

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

Малюнок 1.9 - Головна форма під час роботи проекту.

Додайте декілька записів в таблицю PHONE за допомогою оболонки IB Expert і натисніть кнопку «Відновити». Звернете увагу, що стан даних не змінюється до завершення транзакції. Завершити транзакцію можна натисненням кнопки «Підтвердити транзакцію» із зображенням червоної галочки у вікні «Таблиця».

Лабораторна робота № 7.

Розробка клієнтського додатку для введення та корекції даних в середовищі Delphi

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

Завдання: Розробити додаток до бази даних в середовищі Delphi. Додаток має дозволяти маніпулювати даними.

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

  1. Ознайомитись з теоретичними відомостями.

  2. Створити додаток до своєї бази даних.

Теоретичні відомості

Кклієнтський додаток для маніпулювання даними. В даній лабораторній роботі слід модифікувати додаток, який був розроблений на опередній лабораторній роботі. Слід додати на форму компоненти для редагування полів бази даних: EdFIO, EdPhone типу TEdit и DTP типу TDateTimePicker з вкладки Win32 (рис. 7.1) и кнопки «Додати», «Змінити», «Видалити».

Рисунок 7.1 – Форма редагування даних

На не візуальній формі DataModule2 розташуємо додатковий компонент типу TIBQuery для виконання запитів маніпуляції даних. Поле SQL цього компоненту поки що залишимо порожнім, слід лише вказати властивість Transaction=IBTransaction.

Рисунок 7.2 – Модифікована форма DataModule2

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

//Процедура додавання запису в таблицю

procedure TForm1.BtAddClick(Sender: TObject);

begin

with DataModule2 do

begin

//Очистка редактору SQL компонента IBQuery

workquery.SQL.Clear;

//Ввод тексту запиту додавання запису

workquery.SQL.Add('insert into phone (fio,bdate,phone)');

workquery.SQL.Add('VALUES (:newfio, :newbdate, :newphone)');

// Тут newfio, :newbdate, :newphone – парметри запиту, які будуть

// заповнені пізніше із компонентів редагування.

// Символ ‘:’ є ознакою параметру

//Заповнюємо значення параметрів з компонентів редагування полняем значение параметра

workquery.ParamByName('newfio').AsString:=EdFIO.Text;

workquery.ParamByName('newbdate').AsDate:=DTP.Date;

workquery.ParamByName('newphone').AsInteger:=StrToInt(EdPhone.Text);

//Намагаємось виконати INSERT.

//Коректно обробляємо помилку

//в захищеному блоці try…except…end

try

workquery.ExecSQL; //Виконуємо запит

workquery.Transaction.Commit;

//Завершаємо трансакцію

IBQuery.Open;

//Відкриваємо запит– стан бази даних оновлено.

Except //Відбувся збій

showmessage('Помилка операції додавання');

end;

end;

end;

Обробка події по натисканню кнопки «Оновити».

procedure TForm1.BtUpdateClick(Sender: TObject);

begin

with DataModule2 do

begin

workquery.SQL.Clear;

//Вводимо текст запиту оновлення

workquery.SQL.Add('update phone set fio=:newfio, bdate=:newbdate, phone=:newphone');

//Ідентифікуємо запис по поточному стану всіх полів

workquery.SQL.Add('WHERE (fio=:fio) and (bdate=:bdate) and (phone=:phone)');

//Заповнюємо нові значення із полів редагування

workquery.ParamByName('newfio').AsString:=EdFIO.Text;

workquery.ParamByName('newbdate').AsDate:=DTP.Date;

workquery.ParamByName('newphone').AsInteger:=StrToInt(EdPhone.Text);

//Ідентифікуємо запис

workquery.ParamByName('fio').AsString:=

IBQuery.FieldByName('FIO').AsString;

workquery.ParamByName('bdate').AsDate:=

IBQuery.FieldByName('bdate').AsDateTime;

workquery.ParamByName('phone').AsInteger:=

IBQuery.FieldByName('phone').AsInteger;

//Створюємо захищений блок

try

workquery.ExecSQL; //Виконуємо запит

workquery.Transaction.Commit; //Завершаємо транзакцію

IBQuery.Open; //Оновлюємо стан таблиці

except

showmessage(Помилка операції оновлення'’);

end;

end;

end;

//Обробка події «Видалити»

procedure TForm1.BtDeleteClick(Sender: TObject);

begin

with DataModule2 do

begin

//Динамічне формування SQL-запиту видалення запису

workquery.SQL.Clear;

workquery.SQL.Add('delete from phone ');

workquery.SQL.Add('WHERE (fio=:fio) and (bdate=:bdate)

and (phone=:phone)');

//Визначаємо параметри, які ідентифікують поточний запис

// з компоненту IBQuery

workquery.ParamByName('fio').AsString:=

IBQuery.FieldByName('FIO').AsString;

workquery.ParamByName('bdate').AsDate:=

IBQuery.FieldByName('bdate').AsDateTime;

workquery.ParamByName('phone').AsInteger:=

IBQuery.FieldByName('phone').AsInteger;

//Виконуємо запит

workquery.ExecSQL;

//Закриваємо транзакцію

workquery.Transaction.Commit;

//Оновлюємо стан таблиці

IBQuery.Open;

end;

end;

На закінчення зробимо так, щоб стан редагування змінювався відповідно до поточного запису при переміщенні вказівника таблиці. Для цього обробимо подію onCellClick компоненту DBGrid.

procedure TForm1.DBGridCellClick(Column: TColumn);

begin

try

with DataModule2 do

begin //Змінюємо стан полів редагування

//у відповідності з обраним записом в таблиці

EdFIO.Text:=IBQuery.FieldByName('FIO').AsString;

DTP.DateTime:=IBQuery.FieldByName('bdate').AsDateTime;

EdPhone.Text:=IBQuery.FieldByName('phone').AsString;

end;

except

showmessage('Помилка доступу до даних');

end;

end;

Слід відмітити, що даний приклад має ряд недоліків. Зокрема, після виконання будь-якої операції с заніми вказівник в компонентів DBGrid автоматично встановлюється на 1-й запис. Встановити вказівник на потрібний запис в наборі даних можливо за допомогою методу Locate. Вивчити його роботу пропонується самостійно.