Створення бази даних для організації

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

скачати

Зміст
Введення
1. Аналіз предметної області
1.1 Загальний опис предметної області
1.2 Опис інформаційних процесів проходять в предметній област
1.3 Обгрунтування необхідності автоматизації
2. Проектування
2.1 Побудова діаграми потоків даних
2.2 Побудова инфологической Моделі
2.3 Обгрунтування вибору СУБД і мови програмування
2.4 Побудова даталогіческой моделі
3. Розробка програми
3.1 Вибір середовища реалізації
3.2 Особливості розробки програми
3.3 Розробка користувальницького інтерфейсу
Список літератури
Графічне додаток
Лістинг програми

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

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

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

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

1. Аналіз предметної області

1.1 Загальний опис предметної області

Сутністю проекту є створення програми, яка надає послуги прокату аудіо-і відеокасет, DVD і CD дисків. Комерційна організація замовник має організаційно-правову форму - товариство з обмеженою відповідальністю і ставитися до суб'єктів малого підприємництва. Повне найменування організації: товариство з обмеженою відповідальністю "Відеоклуб" (скорочена: ТОВ "Відеоклуб"). Метою організації даного підприємства є отримання прибутку, а також формування клубу, який буде в своїй діяльності прагнути максимально повно задовольнити потреби відеолюбителів.
Діяльність з надання послуг у галузі відеопрокату відноситься до галузі "культура і мистецтво" 93000 відповідно до Загальноросійським класифікатором галузей народного господарства (ЗКГНГ), невиробничій сфері діяльності. Відеопрокат відноситься до матеріальних послуг і характеризується такими якостями:
- Невідчутність (їх неможливо транспортувати, зберігати, упаковувати чи вивчати до покупки, не можна побачити, почути, помацати, можна лише вірити в результат, можна лише відчути ефект, який з'явиться в результаті отримання послуги); - неможливістю зберігання послуг;
- Неотделимостью від джерела (контакт зі споживачем - невід'ємна частина надання послуги відеопрокату);
- Мінливістю, що означає мінливості якості послуги, у даному виді діяльності якість задоволення потреби Відеолюбителя залежить від кваліфікації продавця-консультанта, від менеджерів, які формують асортимент відеопродукції.

1.2 Опис інформаційних процесів проходять в предметній області

У ході даного проекту необхідно проаналізувати систему «Організація роботи пункту відео-прокату». Підсумком системного аналізу буде текст технічного завдання на проект програмного продукту, який поліпшить характеристики даної системи. Під програмним продуктом в даному випадку будемо розуміти сукупність баз даних, СУБД, додатків та документації їх характеризує, що знаходяться в безпосередній чи опосередкованій взаємозв'язку і призначені для поставки, передачі або продажу користувачам систем типу «Організація роботи пункту відео-прокату».
У процесі прийому замовлення проводиться його прийом від клієнта та реєстрація. Реєстраційні дані зберігаються в комп'ютері і використовуються для подальшого пошуку.
Клієнт може чітко вказати назву фільму і тип носія, які його цікавлять, або ж вказати жанр фільмів, які він би хотів подивитися, чи країну, виробництво фільму якої він хотів би подивитися. Використовую дані, отримані від користувача, проводиться пошук у базі наявних фільмів. Результати пошуку виводяться на екран оператора, який повідомляє про них користувачеві. У разі незадовільного результату пропонується зробити нове замовлення. У разі задовільного результату пошуку, оператор отримує інформацію про місцезнаходження необхідного фільму, умов, на яких цей фільм надається в прокат і іншу інформацію.
Потім проводиться оцінка стану повернутого матеріалу. У разі виявлення пошкоджень носіїв проводиться стягнення штрафу з клієнта. Дані про результати вносяться до комп'ютера. Оплата здійснюється за готівковим розрахунком через касу підприємства.
Після оплати клієнту надається замовлена ​​ним відео-продукція. Вся необхідна інформація зазначається на вкладиші до носія оператором вручну, а саме: назва фільму, термін повернення, стан носія на момент замовлення в кодованому вигляді.

1.3 Обгрунтування необхідності автоматизації

Природно відзначити в перерахованих вище етапах процеси, які легко піддаються автоматизації і в яких доцільно створення електронних баз даних (наприклад, реєстрація замовлень, дані про клієнта, ведення статистики замовлень та інше). З економічної точки зору необхідно зазначити, що подібне нововведення дозволить значно полегшити процес обслуговування клієнтів і різко знизити час надання послуг, що дозволяє обслуговувати більшу кількість клієнтів за один і той же час, і як результат веде до збільшення прибутку пункту відео-прокату.
Робота старшого менеджера зі звітами істотно полегшується з введенням СУБД. Статистику замовлень, можна переглядати за будь-який період, тим самим, виявляючи товари, що користуються найбільшим попитом і відповідно користуються найменшим попитом, кращих клієнтів місяця і т.д. Додатково з'являється можливість контролю над користувачами (менеджерами) і перегляду статистики замовлень здійсненим кожним менеджером.
Отже, можна сказати, що підсумком проектування повинна бути система управління баз даних. СУБД повинна мати дружній інтуїтивно зрозумілий інтерфейс (бути наочною, простий в освоєнні ...), так як користуватися їй належить, як правило, слабо підготовлених користувачів, що не мають певних знань в області інформаційних систем. До СУБД може бути спроектована система допомоги, спрямована на її швидке освоєння та пошуку відповідей на можливі питання, що виникли при користуванні програмним засобом. Природно відзначити в перерахованих вище етапах процеси, які легко піддаються автоматизації і в яких доцільно створення електронних баз даних (наприклад, реєстрація замовлень, дані про клієнта, ведення статистики замовлень та інше). Дана система відповідно до проведеного раніше аналізом легко піддається автоматизації. В якості операційної середовища була обрана MS Windows XP / Vista - сумісна середовище, в якості мови програмування SQL.

2. Проектування ЕІС

2.1 Побудова діаграми потоків даних

Аналіз та моделювання будь-якої системи є важливим етапом у побудові технічного завдання на ту або іншу зміну або доповнення до даної системи, не кажучи вже про автоматизацію. Ось чому важливо розглянути досліджувану систему найбільш ретельно і найбільш повно побудувати її модель. Найбільш підходящим у даному випадку є дуже поширений в світі стандарт DFD, по суті є методологією функціонального моделювання. За допомогою наочного графічного мови DFD вивчається постає перед аналітиками та спеціалістами предметної області у вигляді набору взаємозалежних функцій, які в термінах DFD називаються функціональними блоками.
Крім того, необхідно відзначити те, що стандарт DFD містить набір процедур, що дозволяє розраховувати й погоджувати модель великою групою людей з різних областей діяльності. Узгоджена модель легко потім може бути вивчена з будь-яким ступенем деталізації практично будь-якою людиною, що не беруть участі в побудові моделі. У цьому полягає одна з найважливіших його переваг. Побудуємо модель у стандарті DFD. Першим ділом складемо контекстну діаграму (рисунок 1), що характеризує модель в термінах вхід / вихід і яка є найбільш загальним уявленням.
Зовнішні сутності зображують входи в систему та / або виходи із системи. Зовнішні сутності зображуються у вигляді прямокутника з тінню і зазвичай розташовуються по краях діаграми (рис.1 блок «Клієнт»). Потоки робіт зображуються стрілками і описують рух об'єктів з однієї частини системи в іншу. Оскільки в DFD кожна сторона роботи не має чіткого призначення, як в IDEF0, стрілки можуть підходити і виходити з будь-якої грані прямокутника роботи. У DFD також застосовуються двонаправлені стрілки для опису діалогів типу "команда-відповідь" між роботами, між роботою і зовнішньої сутністю і між зовнішніми сутностями. (Рис. 1 блоки «Інформація про клієнта» і «Внесення інформації про замовлення»). На відміну від стрілок, що описують об'єкти в русі, сховища даних зображують об'єкти в спокої.
2.2 Побудова инфологической Моделі
Так як в процесі моделювання системи було з'ясовано, що необхідне створення сховищ даних (клієнти, замовлення, база фільмів ...), то в процесі моделювання системи необхідно розглянути закріплення цих сховищ за основними процесами. Це можна зробити за допомогою моделі IDEF1X, яка є методологією побудови реляційних структур баз даних у термінах сутність-зв'язок. Побудуємо модель даних у стандарті IDEF1Х. Дана модель зображена на малюнку і має 4 сутності (2 з яких залежні), з'єднаних зв'язками. Усі зв'язки один-до-багатьох, отже модель не суперечить концепції IDEF1Х («зв'язку багато-до-багатьох небажані бо не розкривають реальну структуру даних ...»).
У моделі IDEF1X легко помітити по зовнішньому поданням залежні і незалежні сутності (залежні сутності позначаються прямокутниками з закругленими кінцями). У даній моделі, як це було сказано раніше, це - «Deal». Природно, без клієнта не може бути замовлення, виробленого ім. Статистика замовлень не може існувати без замовлень.
2.3 Обгрунтування вибору СУБД і мови програмування
Проаналізувавши діаграму сутність-зв'язок можна вже зробити вибір СУБД і клієнтської частини. SQL-сервер Interbase призначений для зберігання і обробки великих обсягів інформації в умовах одночасної роботи багатьох клієнтських додатків. Нижче розглядається ряд технологій InterBase, використання яких забезпечує максимальну обчислювальну розвантаження клієнтського додатка і гарантує високу безпеку і цілісність інформації.
Відносини підпорядкованості між таблицями БД створюються шляхом визначення первинних ключів у батьківських і зовнішніх ключів у дочірніх таблиць.
Обмеження на значення окремих стовпців; умови обмежень можуть бути різноманітні - від вимоги задоволення вводятьсязначень певного діапазону або відповідності деякої масці до необхідного стосунки з однією або кількома записами з іншої таблиці (чи багатьох таблиць) БД.
Генератори для створення і використання унікальних значень потрібних полів.
Для прискорення роботи клієнтських додатків з віддаленої БД можуть бути визначені процедури, що зберігаються, які представляють собою підпрограми, що приймають і повертають параметри і здатні виконувати запити до БД, умовні розгалуження і циклічну обробку. Збережені процедури пишуться на спеціальному алгоритмічній мові. У них програмуються часто повторювані послідовності запитів до БД. Текст процедур зберігається на сервері в відкомпілювався вигляді.
Тригери - підпрограми, автоматично виконуються сервером до або (і) після події зміни запису в таблиці БД.
У складі запису БД можуть визначатися BLOB-поля (Binary Large Object-великий двійковий об'єкт), призначені для зберігання великих обсягів даних у вигляді послідовності байтів. Таким чином можуть зберігатися текстові та графічні документи, файли мультимедіа, звукові файли і т. д. Інтерпретація BLOB-поля виконується у додатку, проте розробник може визначити так звані BLOB-фільтри для автоматичного перетворення вмісту blob-поля до іншого виду.
InterBase дає можливість використовувати функції, визначені користувачем (User Defined Function, UDF), в яких можуть реалізовуватися функціональності, відсутні в стандартних вбудованих функціях InterBase (обчислення максимуму, мінімуму, середнього значення, перетворення типів та приведення букв до заголовних). Наприклад, в UDF можна реалізувати витяг із значення дати номера дня, року; визначення довжини символьного значення; усікання пробілів; різні математичні алгоритми і т. п. Функція пишеться на будь-якому алгоритмічній мові, що дозволяє розробляти DLL (бібліотеки динамічного виклику), наприклад, на Object Pascal.
InterBase може посилати повідомлення клієнтським застосуванням про настання якої-небудь події. Одночасно працюють додатки можуть обмінюватися повідомленнями через сервер БД, викликаючи процедури, що зберігаються, в яких реалізована ініціація потрібного події.
Для забезпечення швидкості виконання запитів і зняття з клієнтського застосування необхідності такі запити видавати в БД можна визначити віртуальні таблиці (або перегляди), в яких об'єднуються записи з однієї або більше таблиць, відповідних деякому умові. Робота з переглядом з клієнтського застосування нічим не відрізняється від роботи із звичайною таблицею. Підтримує перегляд сервер, реагуючи на зміну даних в БД. Перегляди можуть бути змінними або не допускають внесення до них змін.
InterBase був розроблений на початку 80-х років групою розробників з американської корпорації DEC. Надалі розробка даного продукту велася незалежними компаніями InterBase Software і згодом злилася з нею Ashton-Tate. Borland придбала права на InterBase у Ashton-Tate після злиття з нею.
InterBase активно використовується в державному і військовому секторах США, що, мабуть, і стало перешкодою для його просування в Росію. Інтерес до цього сервера зріс тільки останнім часом у зв'язку з включенням його локальної (а починаючи з Delphi 3 і 4-користувача) версії до складу Delphi Client / Server Suite і Delphi Enterprise. Увага розробників БД InterBase залучив, по-перше, тому, що це «рідний» продукт Borland (а засоби розробки додатків цієї компанії давно зарекомендували себе з позитивного боку), по-друге, тому, що InterBase досить простий в установці, настройці і адмініструванні в порівнянні з іншими SQL-серверами, і по-третє, тому, що він володіє прекрасними функціональними можливостями.
Firebird обраний мною в якості сервера через те, що він безкоштовний і більш функціональний, ніж Interbase, а також добре сумісний з новими операційними системами Windows Vista і Server 2008. Використовувана мною версія це найбільш стабільна на даний момент - 2.0.3.
2.4 Побудова даталогіческой моделі
Предметна область, обрана мною для даної курсової роботи - інформація про клієнтів, дисках і видачу дисків невеликого відеопрокату.
Метою даної роботи є автоматизація обробки даних по клієнтам з метою спрощення роботи персоналу з клієнтами. При покупці або видачі на прокат товару клієнтові видається чек. Кількість товару на складі, відповідно зменшується. Також у відеопрокаті існують знижки постійним клієнтам залежно від кількості покупок (угод).
У процесі реалізації завдання при розробці структури для зберігання даних, першим об'єктом виступають інформація про товар (дисках або касетах) і клієнтів. У нашому випадку БД буде складатися з 3 таблиць. У таблиці MOVIE будуть міститися відомості про фільми (штрих-код, кількість дисків, назву, режисер і жанр). У таблиці CLIENT будуть зберігатися всі потрібні відомості про клієнтів - із зазначенням повних паспортних даних. Третя таблиця DEAL буде містити відомості про угоди (дата угоди, сума з урахуванням знижки (якщо вона є) і т.д.) Таким чином, таблиця DEAL буде центральною. Вона повинна буде мати унікальною полі, яке буде однозначно визначати кожну угода. Надалі по цьому полю ми створимо первинний ключ, щоб СУБД могла швидко знайти потрібний запис. Кожного запису в таблиці MOVIE буде відповідати довільну кількість записів у таблиці DEAL (такий зв'язок в термінології БД називається зв'язком один до багатьох), тобто одне з її полів буде містити унікальний ідентифікатор фільму. У таблиці DEAL буде також посилання на унікальний ідентифікатор клієнта з таблиці CLIENT. При появі чергового запису в таблиці DEAL повинно змінюватися значення поля KOL (кількість) в таблиці MOVIE.
Таблиця Фільми (MOVIE):
ID
Цілий
INTEGER
Унікальний ідентифікатор фільму. По цьому полю створюється первинний ключ.
(Штрих код диска)
NAME_FILM
Строковий
VARCHAR 50
Назва фільму (індексне поле)
DIRECTOR
Строковий
VARCHAR 50
Режисер
GANR
Строковий
VARCHAR 10
Жанр (набір фіксованих значень: комедія, трилер, бойовик і т. д.) Індексне полі
KOL
Цілий
INTEGER
Кількість на складі
MONEY
Цілий
INTEGER
Ціна
DESCRIPTION
Строковий
VARCHAR 250
Короткий опис фільму
Таблиця Клієнти (CLIENT):
ID_C
Цілий
INTEGER
Унікальний ідентифікатор клієнта (первинний ключ)
FIO
Строковий
VARCHAR 50
ПІБ (індексне поле)
PASPORT
Строковий
VARCHAR 150
Паспортні дані
Таблиця Замовлення (DEAL):
ID_D
Цілий
INTEGER
Унікальний ідентифікатор
(Первинний ключ)
ID_M
Цілий
INTEGER
Код фільму з поля ID таблиці MOVIE
CL_ID
Цілий
INTEGER
Код клієнта з поля ID_C таблиці CLIENT
DEN
Речовий
NUMERIC
Ціна з урахуванням знижки
D_D
Дата
DATE
Дата складання. По цьому полю потрібно створити індекс для сортування.
VZVR
Символьний
CHAR 1
Код повернення. За замовчуванням 'N'
Таблиця Log
WHEN
Дата
TIMESTAMP
Дата редагування (поточна дата)
USER
Строковий
VARCHAR (20)
Користувач
ACTION
Строковий
CHAR (3)
Дія, що виконується користувачем

3. Розробка програми

3.1 Вибір середовища реалізації

Середовище розробки Borland Delphi.

Додаток-клієнт розробляється за допомогою програмних засобів Borland Delphi, використовуючи набір компонентів Interbase Exdivss (IBX). Ці компоненти використовують функції Intebase API, тобто звертаються до сервера безпосередньо. VCL-бібліотека класів середовища проектування Delphi надає ряд класів, що дозволяють швидко і ефективно розробляти різні додатки баз даних.
Ці класи представлені такими групами:
· Компоненти для доступу до даних, що реалізують:
o доступ через машину баз даних BDE (Borland Database Engine), що надає доступ через ODBC-драйвери або через внутрішні драйвери машини баз даних BDE (компоненти сторінки BDE-палітри інструментів);
o доступ через ADO-об'єкти (ActiveX Data Objects), в основі якого лежить застосування технології OLE DB (компоненти сторінки ADO);
o доступ до локального або віддаленого SQL-серверу InterBase (компоненти сторінки InterBase);
o доступ за допомогою легковагих драйверів dbExdivss;
o доступ до БД при багатоланкової архітектури (компоненти сторінки DataSnap);
· Візуальні компоненти, що реалізують інтерфейс користувача;
· Компоненти для зв'язку джерел даних з візуальними компонентами, що надають інтерфейс користувача;
· Компоненти для візуального проектування звітів.
Компоненти для доступу до сервера InterBase:
· TIBDatabase - призначений для підключення до бази даних. Основні методи: Open, Close.
· TIBTransaction - призначений для явного управління транзакцією. Основні методи: StartTransaction, Commit, Rollback, CommitRetaining, RollbackRetaining.
· TIBTable - аналог стандартного TTable. Компонент призначений для отримання даних з однієї таблиці або подання бази даних. Основна властивість - TableName. Основні методи: Open, Close. Набір даних, отриманих за допомогою TIBTable, є редагується, якщо мова йде про таблицю бази даних або оновлюваному поданні. Компонент сполучимо з візуальними компонентами.
· TIBQuery - аналог стандартного TQuery. Компонент призначений для отримання даних на основі SQL-запиту. Цей набір даних не завжди буде редагується, найчастіше необхідно використовувати додатковий компонент TIBUpdateSQL, щоб мати можливість редагувати отримані відомості. Основна властивість - SQL. Основні методи: Open, Close, ExecSQL. Компонент сполучимо з візуальними компонентами.
· TIBDataSet - призначений для отримання та редагування даних, є нащадком стандартного класу TDataSet і повністю сумісний з усіма візуальними компонентами. Основні методи: Prepare, Open, Close, Insert, Append, Edit, Delete, Refresh.
· TIBStoredProc - призначений для виконання збережених процедур та отримання набору даних на основі результатів виконання процедури. Одержуваний набір даних є нередактіруемим. Компонент сполучимо з візуальними компонентами. Основна властивість - StoredProcName. Основний метод - ЕхесРгос.
· TIBUpdateSQL - аналог TUpdateSQL. Використовується в парі з TIBQuery і призначений для створення модифікуються наборів даних. Основні властивості: DeleteSQL, InsertSQL, ModifySQL і RefreshSQL.
· TIBSQL - призначений для виконання SQL-запитів. На відміну від TIBQuery або TIBDataSet, TIBSQL не має локального буфера для набору даних і несумісний з візуальними компонентами.
· TIBDatabaseInfo - дозволяє отримати системну інформацію про деякі властивості бази даних, з'єднання і сервера. Наприклад, UserNames - список користувачів, підключених до бази даних, PageSize - розмір сторінки бази даних.
· TIBSQLMonitor - призначений для перехоплення і відстеження всіх запитів, які виконують функції, які IBX.
TIBEvents - призначений для отримання користувальницьких подій InterBase. Основна властивість - Events. Основні методи: RegisterEvents, UnregisterEvents.
3.2 Особливості розробки програми
З урахуванням призначення функціональної специфікації, а також з урахуванням можливості важких помилок у цьому документі, функціональна специфікація повинна бути дуже точною і не суперечливою і по можливості наближатися до математичних формулювань, однак це не означає що вона повинна бути формалізована настільки, що по ній можна було б автоматично генерувати код програми. Це означає лише те, що вона повинна базуватися на поняттях, побудованих як математичні об'єкти, і твердженнях, однозначно розуміються і замовником і розробниками.
Досить часто функціональна специфікація формалізується на природній мові, проте використання математичних та інших формалізованих методів при розробці функціональної специфікації дуже вітається.
У цілому функціональна специфікація складається з трьох основних частин:
1. Опис зовнішньої інформаційного середовища по відношенню до програмного засобу;
2. Визначення функцій ПС. Найчастіше такі функції розглядаються на безлічі станів зовнішнього інформаційного середовища;
3. Опис небажаних ситуацій, які можуть виникнути при роботі ПС та опис реакції ПС на ці ситуації.
Основною функцією ПС можна вважати автоматизацію процесу управління процесом прийняття замовлень, пошуку замовлень, ведення статистики та ін
Як сказано вище, основними функціями розроблюваного ПС є:
- Додавання нового надходження відео-продукції з проведенням маркування. Кожне нове надходження має бути введено в базу фільмів із заповненням всіх необхідних полів. Результатом виконання даної функції є запис у таблиці бази даних і присвоєння кожному відео-фільму свого індивідуального номера, з його подальшим нанесенням на фізичний носій. Повторення індивідуального номера не допускається, тому необхідно або генерувати його всередині системи. Назва відео-фільму повинно бути символьним і не більше 50 символів. Число копій має бути цілим числом. Поля «Носій», «Категорія», «Виробництво фільму (Країна)», заповнюються з випадаючих списків.
- Реєстрація нових клієнтів пункту прокату. Реєстрація клієнтів здійснюється тільки за наявності паспорта. При реєстрації необхідно обов'язково заповнити поля «№ паспорта», «Прізвище», «Ім'я», «батькові», інші поля не обов'язковими для заповнення. Також необхідно проводити перевірку на збіг введеної інформації при реєстрації нового клієнта по всіх обов'язкових параметрах в сукупності і при збігу необхідно виводити відповідне повідомлення. Поля «Прізвище», «Ім'я», «батькові», «Адреса» є символьними і обмежені 50 символами.
- Швидкий пошук відео-продукції за індивідуальним номером, категорії, типу носія, назвою. Результатом роботи функції є список відео-продукції, відібраний за певним критерієм, або групі критеріїв. Поле «Назва» є символьним і повинно містити назву потрібної продукції, поле «Індивідуальний номер» є цілим числовим, інші поля заповнюються з випадаючого списку. Якщо не буде виявлено жодного запису, що відповідає критеріям пошуку, то має бути виведено відповідне повідомлення.
- Можливість показу статистики замовлень окремим клієнтом. Результатом роботи даної функції є виведення списку з інформацією про клієнта і відео-продукцією, яку він замовляв раніше. У цьому списку вказується кількість замовлень, зроблених клієнтом, розмір штрафу, який він сплатив, кількість днів, що минули з моменту реєстрації. Також вказується кількість замовлень, які клієнт зробив, вибираючи відео-продукцію на різних видів носіїв (VHS, CD, DVD). Вхідний інформацією є введення в полі «Номер паспорта», який є цілим числом. Також є можливість показу статистики замовлень окремого фільму. Результатом роботи є висновок списку з інформацією про кількість замовлень фільму, назва якого введено в полі «Назва фільму», а поле «Номер паспорта» залишається порожнім.
- Можливість показу загальної статистики. Результатом роботи даної функції є виведення списку всіх замовлень, здійснених підприємством. Період, за який статистика буде виведена визначається користувачем, який може в поле «Рік» вказати рік, в поле «Місяць» вказати місяць та у полі «День» вказати день. У результаті виведеться статистка замовлень на те число, яке було введено користувачем. Всі перераховані вище поля є символьними і обмежені 8 символами і заповнюються з випадаючого списку, в якому присутній рядок «все», при виборі якої повинна враховуватися статистика за всі дні, місяці, роки в залежності від того в якому полі цей рядок обрана.
Виняткові ситуації повинні бути оброблятися окремим обробником і перекривати системний обробник. Повинен виконуватися принцип прозорості і користувачеві крім помилки повинні повідомлятися її причини і при його бажанні відповідні довідки. Локальні помилки повинні усуватися без переривання основного процесу не схильного до помилкових дій. Фатальні помилки повинні відпрацьовуватися особливо і не порушувати цілісності системи. У разі краху системи, повинне бути обов'язково передбачено її відновлення попередньої робочою версією, з метою чого необхідно створювати архіви системи при кожному її відключення. Створення архіву системи має бути автоматичним і не позначатися на швидкість основних обчислень.
Досвідченим шляхом неважко з'ясувати, що Delphi при роботі з InterBase інтерпретує стовпці типу CHAR і VARCHAR як TS tring F iel d. При цьому, по-перше, стовпці типу CHAR завжди читаються без завершальних прогалин, по-друге, при занесенні завершальних прогалин у стовпець (а часто це буває необхідно) типу CHAR вони завжди видаляються, в той час як у стовпці типу VARCHAR, навпаки, вони завжди зберігаються. Стовпці типу DATE дозволяють зберігати значення дати в межах від 01.01.0100 до 11.12.5941, а також значення часу (тип DATE InterBase повністю сумісний з типом TDateTime Delphi). Якщо введення даних у стовпець типу DATE проводиться з утиліти IBConsole, значення дати повинні вказуватися у форматі InterBase. Згідно з цим форматом, значення дати складаються з номера дня (01-31), місяця (JAN-DEC) і року. Ці значення відокремлюються один від одного роздільниками. Стандартним роздільником є ​​символ дефісу (-), але приймаються і пробіл, правий слеш (/) і крапка (.). Значення дат в InterBase повинні лежати в діапазоні від 1-JAN-100 до 11-DEC-5941. Інтерпретація формату представлення значень типу DATE залежить від налаштування - програми або операційної системи комп'ютера. Корисно щоразу при старті програми програмно перевстановлювати формат дати і часу до звичного нам російському формату:

procedure TForml.FormCreate (Sender: TObject);
begin
DateSeparator: = '. ';
ShortDateFormat: = 'dd.mm.yyyy';
ShortTimeFormat: = 'hh: mm: ss';
end;
Таким чином можна ігнорувати невизначеність поточної налаштування операційної системи на конкретному комп'ютері.
У InterBase значення типу DATE сумісні із строковими типами. Тому, якщо в SQL-операторах InterBase потрібно інтерпретувати значення типу DATE як рядок, немає необхідності у приведенні типів. Наприклад, можна так записати в символьний стовпець S значення типу DATE (символи II означають операцію конкатенації, або зчеплення, рядків, функція NOW повертає поточні дату і час):
UPDATE DEAL
SET S = "Дата відвантаження" II NOW;
Як вже говорилося, в InterBase немає автоінкрементні типу. Поля автоінкрементні типу, що автоматично заповнюються унікальними числовими значеннями при введенні чергового запису. Такі поля зазвичай використовуються для створення первинних ключів. Замість автоінкрементні полів InterBase надає механізм генераторів - особливих програм, які зберігають деяке значення аж до моменту, коли воно буде використано, після чого змінюють збережене значення на задану величину.
Генератор складається наступним оператором:
CREATE GENERATOR Імя_генератора

Після створення генератора йому необхідно присвоїти початкове значення таким оператором:
SET GENERATOR Імя_генератора ТО Начальное_значеніе
Для отримання чергового значення генератора використовується така функція:
GEN_ID (Імя_генератора, Крок)
Тут Крок - ціле число, на яке змінюється поточне значення генератора. Проілюструємо використання генератора на прикладі поля ID_C таблиці CLIENT.
Створюємо генератор:
CREATE GENERATOR GEN_CLIENT_ID_C;
SET GENERATOR GEN_CLIENT_ID_C TO 1;
Одного разу створений генератор зберігається в БД разом з іншими її сутностями - таблицями, індексами, збереженими процедурами і т. п. Використовуємо генератор при введенні чергового запису:
CREATE TRIGGER TRIG_CLIENT FOR CLIENT
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.id_c IS NULL) THEN NEW.id_c = GEN_ID (gen_client_id_c, 1);
END
Доменами називаються заздалегідь створені опису стовпців. Поряд з іншими сутностями БД, домени повинні мати унікальні імена. Одного разу створений домен зберігається в БД і може використовуватися замість типу стовпця. За допомогою доменів досягається уніфікація типів даних, що зберігаються в різних стовпцях, можливо, різних таблиць.
CREATE DOMAIN D_GANR AS
VARCHAR (10) CHARACTER SET NONE
NOT NULL
CHECK (VALUE IN ('comedy', 'action', 'melodrama', 'fantasy', 'horror'))
COLLATE NONE
У InterBase немає стовпців грошового типу (Currency). Замість них зазвичай використовуються стовпці FLOAT або DOUBLE PRECISION. При виведенні їх значень в візуалізуючих компонентах вони представляють грошові суми як значення з плаваючою комою, що в більшості випадків заважає їх сприйняття. Повернути цим стовпцях нормальний грошовий вид можна або в обробнику події OnGetText об'єкта-поля, або за допомогою його (об'єкта-поля) властивості DisplayEdit. У обробнику можна використовувати оператор такого виду:
procedure TForml.QUSUMMAGetText (Sender: TField;
var Text: String;
DisplayText: Boolean);
begin
Text: = FloatToStrFfquSumma.AsFloat,
ffCurrency, 10, 2)
end;
У властивості DisplayEdit можна вказати таку маску:
# # #, # # #. 0 0 'р. '

Кінцевий результат буде однаковий, але вказати маску, як мені здається, простіше.
Візуальні засоби розробки запитів забезпечують реально зручне представлення розв'язуваної задачі, допомагають визначити зв'язки та умови запиту. Але в Interbase немає як таких візуальних засобів розробки запитів. Однак можна звертатися з Interbase за допомогою ibExpert. Це гнучкий і потужний інструмент. У ньому є можливість розробляти структуру самої БД, зберігати і виконувати скрипти на SQL, використовувати безліч Вбудований утиліт, що полегшують роботу, як розробника, так і адміністратора.
Завантаживши ibExpert в меню Tools-> Query Builder, потрібно перетягнути необхідні таблиці. Визначити зв'язку між ними і відзначити поля, необхідні для висновку. Вони з'являться внизу на вкладці Selection. А на закладці Edit можна буде переглянути текст запиту. На закладці Perfomance Analisys є дуже корисна інформація про швидкодію і кількості читань з кожної таблиці.

3.3 Розробка користувальницького інтерфейсу

Є два способи домогтися гарного оформлення таблиць. Спробувати самостійно покращувати стандартний DBGrid або використовувати компоненти сторонніх виробників, що надають альтернативу стандартному компоненту. При виконанні роботи треба враховувати сучасні тенденції та стандарти, тобто робити так, щоб програма виглядала сучасною, схожою на офісні додатки. Використовуючи компоненти від EhLib можна поліпшити стандартний DBGrid, додавши нові можливості: автоматичний розрахунок підсумкових значень (сума, середнє значення, кількість записів), експорт даних і т.д.
Застарілий дизайн стандартної таблиці тепер можна легко замінити стильною конструкцією DBGridEh, змінивши властивість Flat. Також є багатий вибір різних колірних схем виділення даних.
Практично завжди, розробляючи програми для роботи з базами даних, доводиться виділяти яким-небудь чином дані, що підпадають під деяка умова. Це може бути і рівень продажів визначеної менеджера, який досяг критично низького рівня, і «мінусові» залишки на складі. Щоб не пропустити такі події, програма повинна правильно виділяти це в таблиці. Для цього досить прописати в події OnGetCellParams необхідна умова і параметри виділення (розміри, колір шрифту, колір фону).
Найважливішим елементом роботи з прикладними програмами є можливість перенесення даних в офісні додатки, наприклад, в Microsoft Office. Тобто часто буває недостатньо просто створити звіт і вивести його в таблицю. Як правило, потім потрібно, щоб він був наданий у вигляді документа Excel для подальших маніпуляцій. Можна створювати різні OLE - об'єкти і, перебираючи потрібні записи в DataSet, копіювати їх в осередки Excel. Цей спосіб досить гнучкий, тому що дозволяє формулювати якісні звіти, попередньо оформивши їх. Тобто додавати заголовки, формули, робити виділення критичних даних і т.д. Але от копіювання по рядках сильно уповільнює створення звіту, особливо якщо даних багато. До того ж піде багато часу на програмування перенесення даних. Тому коли мова йде не про створення красивого оформлення, а про швидкість і простоті експорту даних краще використовувати кошти EhLib. Ця бібліотека дозволяє одним викликом функції записувати вміст таблиці в формати.xls,. Rtf,. Html,. Txt,. Csv.
Також корисна функція копіювання в буфер виділених даних. Наприклад, при наявності кількох офісів, які упродовж дня обмінюються даними про наявність у них кількості товару. Менеджерам достатньо скопіювати потрібні дані і вставити їх у будь-який додаток: поштовий клієнт, ICQ.
При роботі з великими обсягами даних буває дуже зручно не тільки відсортовувати дані з якого-небудь полю, але і групувати («згорнути») за значеннями одного з полів, щоб потім можна було розгорнути будь-яку з підгруп клацанням і переглянути її вміст. Наприклад, організовуючи розсилку товарів по безлічі міст за деякими напрямками, не завжди зручно гортати відсортований по містах масив даних. Зручніше згрупувати дані по місту і розгортати міста тільки потрібного напрямку. Використовуючи DropDownBox в DBGridEh, можна легко вирішувати подібні завдання.
Менеджеру буде зручніше переглядати звіти про продажі використовуючи звичний Excel. (Мал.1) Для початку потрібно встановити драйвер ODBC Firebird. Запустити Excel. Вибрати меню Дані, Імпорт зовнішніх даних, Створити запит. Після перевірки запиту необхідно обов'язково зберегти запит (кнопка із зображенням дискети). Запит буде збережений разом з усіма параметрами аліасу, тому для "поширення" запиту на декілька комп'ютерів зовсім необов'язково створювати аліас ODBC на кожному (звичайно, ODBC-драйвер і клієнтську частину IB / FB все одно доведеться встановлювати на цих комп'ютерах).
CREATE PROCEDURE NEW_PROCEDURE
returns (
kld numeric (15,0),
movie varchar (50),
famio varchar (50))
as
declare variable idm integer;
declare variable cl integer;
declare variable dt date;
begin
for select deal.cl_id, deal.d_d, deal.id_m
from deal
into: cl,: dt,: idm
do
begin
kld = current_date - dt;
if (: kld> 12) then
begin
select client.fio from client where client.id_c =: cl
into: famio;
select movie.name_film from movie where movie.id =: idm
into: movie;
suspend;
end
end
end ^
Інструкція користувача
Користувача інтерфейс побудований у відповідності з класичними вимогами і правилами системи Windows, правилами системи Delphi. Основними завданнями при побудові інтерфейсу були: простота, зручність.
Програмний проект включає в себе 7 віконних форм (одна з них форма головного меню), 4 з них є безпосередньо робітниками (тобто тут відбувається введення, обробка і коректування даних), 3 - форми відображення оброблених даних.
При відкриття програми з'являється головна форма (fmMain) (Мал. 1), на якій розташовані таблиці та відповідні їм елементи управління. Якщо є боржниками, у яких на руках знаходяться диски, то разом з головною формою з'являється дочірня форма «боржниками» де можна побачити найменування диска і дані боржниками і кількість днів. Для зручності користувача головна форма містить кілька вкладок, де і знаходяться таблиці. Працювати з базою можна як безпосередньо з головної форми, так і викликавши окреме вікно з головного меню форми. Так пункт меню «Файл» містить такі підпункти як «Нове» і «Вихід». Зробити нову запис в таблиці Клієнти (CLIENT) можна вибравши "Файл" -> «Нове ..» -> «Клієнт». Після чого з'явиться вікно «Клієнт» (Мал. 2), де користувачеві представляється можливість заповнення кожного із запропонованого полів. Кнопки «Видалити» і «Виправити» в режимі вставки не активні.
Процес редагування даних відбувається в тому ж самому вікні, при виборі меню «Правка» -> «Змінити ..» -> «Клієнт». У цьому ж вікні з'являються повідомлення користувача про неприпустимих помилках. У таблиці Клієнти (CLIENT) обов'язково для заповнення поле ID_C, якщо користувач забуває заповнити це поле, програма повідомить його про це.
Кнопка «Видалити» дозволяє видалити запис з бази. Не можна видалити дані про клієнта, якщо в таблиці «Рахунки» є пов'язані з ним записи, програма попереджає про це користувача, показуючи відповідне повідомлення (Мал. 4). У режимі зміна неактивна кнопка «Запис» і з'являється додаткова панель з кнопками навігації по таблиці. І, нарешті, для завершення роботи з формою «Клієнт» потрібно натиснути кнопку закриття вікна, і користувач потрапляє на форму головного меню.
При редагуванні таблиці Фільми користувачеві потрібно враховувати, що неможливо видалити дані про фільм, якщо його кількість на складі більше 0.
При виборі пункту меню «Рахунок» або відповідної вкладки головної форми користувач може працювати з рахунками клієнтів. При появі вікна «Нове ..» -> «Рахунок» користувач повинен ввести штрих код фільму і вибрати прізвище клієнта, інші поля заповнюються автоматично (поля - вартість і дата і повернення). Дата виставляється поточна, а поле вартість спочатку береться з таблиці MOVIE а потім вираховується з урахуванням знижок клієнтові, поверненню автоматично привласнюється "N".
Коли клієнт повертає фільм, то слід поставити в цьому полі "Y" в ручну або через сканер. При цьому кількість фільмів у базі збільшується на 1.
На вкладці Рахунки також є кнопки «Режим master detail» і «Відомості таблиця». При натисканні на кнопку «Зведена таблиця». З'являється вікно з цією таблицею, яка є аналогом таблиці «Рахунки». Така таблиця може тільки відображати дані, редагувати їх неможливо. Зручність її укладено в тому, що перегортати вона буде помітно швидше. Листання повного екрану таблиці складається з тисячі записів відбувається в частки секунди, у той час як таблиця «Рахунки» перегортаються з помітними затримками.
Кнопкою «Режим master detail» можна викликати вікно, де користувач може одночасно переглядати та редагувати дані про клієнта і його рахунках.
Вибравши меню «Пошук» можна задіяти пошук за таблицями. Пошук по строковому полю дозволяє шукати по частині слова і показує всі форми цього слова.
Остання вкладка «SQL» (Мал. 5) дозволяє просунутим користувачам виконувати різні дії з базою даних, такі як пошук, вибірка даний і т.д. Менеджеру буде зручніше переглядати звіти використовуючи звичний Excel. Для зручності менеджера в Excel є звіти по замовленнях за період, звіт з персоналу, пошук кращого клієнта місяця і т.д. При цьому не потрібно встановлювати на машину клієнтську програму.

Список літератури
1. Фаронов В.В. Delphi 5. Керівництво програміста. Нолидж. 2001.
2. Фаронов ВВ. Delphi 2005 Розробка додатків для баз даних та інтернету. - СПб: Питер, 2006.
3. Хансен Г., Хансен Д. Бази даних. Розробка і управління. - М., Біном. 2000.

Додаток

Лістинг програми

Unit2:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, IBCustomDataSet, Grids, DBGrids, StdCtrls, ExtCtrls, DBCtrls,
ComCtrls, IBTable, XPMan, Menus, IBQuery;
type
TForm2 = class (TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Button1: TButton;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
DBNavigator1: TDBNavigator;
DBGrid2: TDBGrid;
DataSource2: TDataSource;
Button2: TButton;
DBNavigator2: TDBNavigator;
DBGrid3: TDBGrid;
Panel1: TPanel;
DataSource3: TDataSource;
Button3: TButton;
TabSheet4: TTabSheet;
XPManifest1: TXPManifest;
Button4: TButton;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N3: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
About1: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
DBGrid4: TDBGrid;
Edit1: TEdit;
IBQuery1: TIBQuery;
DataSource4: TDataSource;
procedure Button4Click (Sender: TObject);
procedure N12Click (Sender: TObject);
procedure N6Click (Sender: TObject);
procedure N4Click (Sender: TObject);
procedure N3Click (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure Button1Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form2: TForm2;
implementation
uses Unit3, Unit1, Unit4, Unit5, Unit6;
{$ R *. dfm}
procedure TForm2.Button1Click (Sender: TObject);
begin
Form1.Show;
end;
procedure TForm2.Button2Click (Sender: TObject);
begin
try
DataSource1.DataSet.Delete;
except
ShowMessage ('Не можна видалити дані про клієнта якщо в таблиці База є пов'язані запису!');
end;
end;
procedure TForm2.Button3Click (Sender: TObject);
begin
Form4.Show;
end;
procedure TForm2.N3Click (Sender: TObject);
begin
Form2.Close;
end;
procedure TForm2.N4Click (Sender: TObject);
begin
Form5.Show;
Form5.Button1.Enabled: = true;
Form5.Panel2.Visible: = false;
Form5.Button3.Enabled: = false;
Form5.Button4.Enabled: = false;
end;
procedure TForm2.N6Click (Sender: TObject);
begin
Form6.Show;
end;
procedure TForm2.N12Click (Sender: TObject);
begin
Form5.Show;
Form5.Button1.Enabled: = false;
DataSource1.DataSet.Cancel;
DataSource1.DataSet.First;
Form5.Panel2.Visible: = true;
Form5.Button3.Enabled: = true;
Form5.Button4.Enabled: = true;
end;
procedure TForm2.Button4Click (Sender: TObject);
begin
if Edit1.Text <>''then
begin
IbQuery1.SQL.Text: = Edit1.Text;
Form2.DataSource4.DataSet.Active: = true;
end
else ShowMessage ('Порожній запит!');
end;
end.
Unit4:
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, Grids, DBGrids, IBCustomDataSet;
type
TForm4 = class (TForm)
IBDataSet1: TIBDataSet;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
DataSource1: TDataSource;
DataSource2: TDataSource;
CheckBox1: TCheckBox;
procedure CheckBox1Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form4: TForm4;
implementation
uses Unit2, Unit3;
{$ R *. dfm}
procedure TForm4.CheckBox1Click (Sender: TObject);
begin
if CheckBox1.State = cbchecked then
begin
DataModule3.IBDataSet1.Active: = False;
Form4.IBDataSet1.SelectSQL.SetText ('SELECT * FROM DEAL WHERE CL_ID =: ID_C');
Form4.IBDataSet1.Open;
DataModule3.IBDataSet1.Open;
end else
begin
Form4.IBDataSet1.Close;
DataModule3.IBDataSet1.Close;
Form4.IBDataSet1.SelectSQL.SetText ('SELECT * FROM DEAL');
Form4.IBDataSet1.Active: = True;
DataModule3.IBDataSet1.Active: = True;
end;
end;
end.
Unit5:
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, DBCtrls, Mask, DB, IBCustomDataSet;
type
TForm5 = class (TForm)
DBEdit1: TDBEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
DBMemo1: TDBMemo;
DataSource1: TDataSource;
Panel2: TPanel;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure Button6Click (Sender: TObject);
procedure Button5Click (Sender: TObject);
procedure Button4Click (Sender: TObject);
procedure FormClose (Sender: TObject; var Action: TCloseAction);
procedure FormShow (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure Button1Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form5: TForm5;
implementation
uses Unit2, Unit4, Unit1, Unit3;
{$ R *. dfm}
procedure TForm5.Button1Click (Sender: TObject);
var name, p: string;
begin
name: = DbEdit1.Text;
p: = DbMemo1.Text;
try
DataSource1.DataSet.FieldByName ('FIO'). AsString: = name;
DataSource1.DataSet.FieldByName ('PASPORT'). AsString: = p;
DataSource1.DataSet.Post;
DataSource1.DataSet.Append;
except
ShowMessage ('Поле ПІБ обов'язково для заповнення ");
end;
end;
procedure TForm5.Button2Click (Sender: TObject);
begin
DbEdit1.Clear;
DbMemo1.Clear;
end;
procedure TForm5.Button3Click (Sender: TObject);
begin
try
Form2.DataSource1.DataSet.Delete;
except
ShowMessage ('Не можна видалити дані про клієнта якщо в таблиці База є пов'язані запису!');
end;
end;
procedure TForm5.FormShow (Sender: TObject);
begin
DataSource1.DataSet.Append;
end;
procedure TForm5.FormClose (Sender: TObject; var Action: TCloseAction);
begin
DataSource1.DataSet.Cancel;
end;
procedure TForm5.Button4Click (Sender: TObject);
begin
Form2.DataSource1.DataSet.Post;
end;
procedure TForm5.Button5Click (Sender: TObject);
begin
Form2.DataSource1.DataSet.Prior;
end;
procedure TForm5.Button6Click (Sender: TObject);
begin
Form2.DataSource1.DataSet.Next;
end;
end.
Unit6:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBCtrls, StdCtrls, IBCustomDataSet, IBQuery, Mask;
type
TForm6 = class (TForm)
DBLookupComboBox1: TDBLookupComboBox;
DataSource1: TDataSource;
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
IBQuery1: TIBQuery;
DataSource2: TDataSource;
DBEdit1: TDBEdit;
procedure FormClose (Sender: TObject; var Action: TCloseAction);
procedure Button1Click (Sender: TObject);
procedure FormShow (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form6: TForm6;
s: string;
implementation
uses Unit3;
{$ R *. dfm}
procedure TForm6.FormShow (Sender: TObject);
begin
DataSource1.DataSet.Append;
end;
procedure TForm6.Button1Click (Sender: TObject);
var s: string;
begin
Form6.IBQuery1.Active: = false;
s: = 'select MONEY from movie where movie.id =' + Edit1.Text;
Form6.IBQuery1.SQL.text: = s;
Form6.IBQuery1.Active: = true;
Form6.DBEdit1.DataField: = 'MONEY';
DataSource1.DataSet.FieldByName ('DEN'). AsString: = Form6.DBEdit1.Text;
DataSource1.DataSet.FieldByName ('ID_M'). AsString: = Edit1.Text;
DataSource1.DataSet.Post;
DataSource1.DataSet.Append;
end;
procedure TForm6.FormClose (Sender: TObject; var Action: TCloseAction);
begin
DataSource1.DataSet.Cancel;
end;
end.
Unit7:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm7 = class (TForm)
ComboBox1: TComboBox;
Button1: TButton;
Edit1: TEdit;
ComboBox2: TComboBox;
procedure ComboBox2Change (Sender: TObject);
procedure Button1Click (Sender: TObject);
procedure ComboBox1Change (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form7: TForm7;
tb, k: string;
implementation
uses Unit2;
{$ R *. dfm}
procedure TForm7.ComboBox1Change (Sender: TObject);
begin
if Combobox1.Items.Strings [Combobox1.ItemIndex] = 'Фільми' then
begin
tb: = 'MOVIE';
Combobox2.Items.Clear;
Combobox2.Items.Add ('ID');
Combobox2.Items.Add ('NAME_FILM');
Combobox2.Items.Add ('DIRECTOR');
Combobox2.Items.Add ('KOL');
Combobox2.Items.Add ('MONEY');
Combobox2.Items.Add ('GANR');
Combobox2.Items.Add ('DESCRIPTION');
end else
begin
tb: = 'CLIENT';
Combobox2.Items.Clear;
Combobox2.Items.Add ('ID_C');
Combobox2.Items.Add ('FIO');
Combobox2.Items.Add ('PASPORT');
end;
if Combobox1.Items.Strings [Combobox1.ItemIndex] = 'Рахунки' then
begin
tb: = 'DEAL';
Combobox2.Items.Clear;
Combobox2.Items.Add ('ID_D'); Combobox2.Items.Add ('ID_M');
Combobox2.Items.Add ('CL_ID'); Combobox2.Items.Add ('DEN');
Combobox2.Items.Add ('D_D');
end;
end;
procedure TForm7.Button1Click (Sender: TObject);
var
zapros: string;
begin
if (k = 'ID_C') or (k = 'ID') or (k = 'ID_D') or (k = 'KOL') or (k = 'MONEY') or (k = 'ID_M') or ( k = 'CL_ID')
then
zapros: = 'SELECT * from' + tb + 'where' + k +'='+ Edit1.Text
else
zapros: = 'SELECT * from' + tb + 'where' + k + 'LIKE'+'''%'+ Edit1.Text +'%''';
Form2.IBQuery1.SQL.Text: = zapros;
Form2.DataSource4.DataSet.Active: = true;
Form7.Close;
Form2.PageControl1.ActivePage: = Form2.PageControl1.Pages [4];
Form2.FocusControl (Form2.PageControl1);
end;
procedure TForm7.ComboBox2Change (Sender: TObject);
begin
k: = Combobox2.Items.Strings [Combobox2.ItemIndex];
end;
end.
Скрипти:
DOMAINS:
CREATE DOMAIN D_GANR AS
VARCHAR (10) CHARACTER SET NONE
NOT NULL
CHECK (VALUE IN ('comedy', 'action', 'melodramm', 'fantasy', 'horror'))
COLLATE NONE
Tables:
CLIENT:
/************************************************* *****************************/
/**** Tables ****/
/************************************************* *****************************/
CREATE GENERATOR GEN_CLIENT_ID_C;
CREATE TABLE CLIENT (
ID_C INTEGER,
FIO VARCHAR (50) NOT NULL,
PASPORT VARCHAR (50)
);
/************************************************* *****************************/
/**** Primary Keys ****/
/************************************************* *****************************/
ALTER TABLE CLIENT ADD PRIMARY KEY (ID_C);
/************************************************* *****************************/
/**** Triggers ****/
/************************************************* *****************************/
SET TERM ^;
/************************************************* *****************************/
/**** Triggers for tables ****/
/************************************************* *****************************/
/ * Trigger: TRIG_CLIENT * /
CREATE TRIGGER TRIG_CLIENT FOR CLIENT
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.id_c IS NULL) THEN NEW.id_c = GEN_ID (gen_client_id_c, 1);
END
^
DEAL:
/************************************************* *****************************/
/**** Tables ****/
/************************************************* *****************************/
CREATE GENERATOR GEN_DEAL_ID;
CREATE TABLE DEAL (
ID_D INTEGER,
ID_M INTEGER NOT NULL,
CL_ID INTEGER NOT NULL,
DEN NUMERIC (4,2),
D_D DATE
);
/************************************************* *****************************/
/**** Primary Keys ****/
/************************************************* *****************************/
ALTER TABLE DEAL ADD PRIMARY KEY (ID_D);
/************************************************* *****************************/
/**** Foreign Keys ****/
/************************************************* *****************************/
ALTER TABLE DEAL ADD FOREIGN KEY (CL_ID) REFERENCES CLIENT (ID_C) ON UPDATE CASCADE;
ALTER TABLE DEAL ADD FOREIGN KEY (ID_M) REFERENCES MOVIE (ID) ON DELETE CASCADE ON UPDATE CASCADE;
/************************************************* *****************************/
/**** Triggers for tables ****/
/************************************************* *****************************/
/ * Trigger: DEC_MONEY * /
CREATE TRIGGER DEC_MONEY FOR DEAL
ACTIVE AFTER INSERT POSITION 0
AS
declare variable x integer;
begin
Select Count (New.cl_id) from DEAL
into: x;
if (: x> 3) then
begin
update Deal
set Deal.den = (DEAL.den - DEAL.den/100 * 10)
where DEAL.id_d = New.id_d;
end
end
/ * Trigger: SUB_MOVIE * /
CREATE TRIGGER SUB_MOVIE FOR DEAL
ACTIVE AFTER INSERT POSITION 0
AS
begin
update movie
set movie.kol = movie.kol - 1
where movie.id = new.id_m;
end
/ * Trigger: TRIG_DEAL_BI * /
CREATE TRIGGER TRIG_DEAL_BI FOR DEAL
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.Id_d IS NULL) THEN NEW.Id_d = GEN_ID (Gen_DEAL_ID, 1);
END
MOVIE:
/************************************************* *****************************/
/**** Tables ****/
/************************************************* *****************************/
CREATE GENERATOR GEN_DEAL_ID;
CREATE TABLE DEAL (
ID_D INTEGER,
ID_M INTEGER NOT NULL,
CL_ID INTEGER NOT NULL,
DEN NUMERIC (4,2),
D_D DATE
);
/************************************************* *****************************/
/**** Primary Keys ****/
/************************************************* *****************************/
ALTER TABLE DEAL ADD PRIMARY KEY (ID_D);
/************************************************* *****************************/
/**** Foreign Keys ****/
/************************************************* *****************************/
ALTER TABLE DEAL ADD FOREIGN KEY (CL_ID) REFERENCES CLIENT (ID_C) ON UPDATE CASCADE;
ALTER TABLE DEAL ADD FOREIGN KEY (ID_M) REFERENCES MOVIE (ID) ON DELETE CASCADE ON UPDATE CASCADE;
/************************************************* *****************************/
/**** Triggers for tables ****/
/************************************************* *****************************/
/ * Trigger: DEC_MONEY * /
CREATE TRIGGER DEC_MONEY FOR DEAL
ACTIVE AFTER INSERT POSITION 0
AS
declare variable x integer;
begin
Select Count (cl_id) from DEAL where cl_id = New.cl_id group by cl_id
into: x;
if (: x> 3) then
begin
update Deal
set Deal.den = (DEAL.den - DEAL.den/100 * 10)
where DEAL.id_d = New.id_d;
end
end
/ * Trigger: SUB_MOVIE * /
CREATE TRIGGER SUB_MOVIE FOR DEAL
ACTIVE AFTER INSERT POSITION 0
AS
begin
update movie
set movie.kol = movie.kol - 1
where movie.id = new.id_m;
end
/ * Trigger: TRIG_DEAL_BI * /
CREATE TRIGGER TRIG_DEAL_BI FOR DEAL
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.Id_d IS NULL) THEN NEW.Id_d = GEN_ID (Gen_DEAL_ID, 1);
END
EXCEPTION:
CREATE EXCEPTION NO_DELETE 'Не можна видалити фільм якщо він є на складі!';
VIEW:
CREATE VIEW BESTCLIENT (FIO)
AS
select FIO from client where id_c = (select cl from (select deal.cl_id as cl, count (cl_id) as col from deal group by deal.cl_id HAVING count (cl_id)> = All (select count (cl_id) as col from deal group by deal.cl_id)));
Додати в блог або на сайт

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

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


Схожі роботи:
Створення бази даних для накладної
Створення бази даних для паспортно візової служби
Створення бази даних для паспортно візової служби 2
Досвід створення Бази Даних для джерел особового походження
Створення бази даних для паспортно-візової служби Інформаційна система
Створення бази даних функціональних аналогів Windows-програм для ОС Linux і розробка методики
Створення бази даних критичних властивостей речовин в редакторі баз даних MS Access
Створення бази даних
Створення бази даних РЕО-ДАІ
© Усі права захищені
написати до нас