Розробка елементів гнучкої спеціалізованої системи приватного підприємства

Реалізація гнучкої спеціалізованої системи підприємництва в середовищі Delphi 6.0 за допомогою технології доступу до баз даних ADO. Розробка елементів системи, її призначення для накопичення і обробки інформації про обіг товарів приватного підприємства.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 26.10.2012
Размер файла 1,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Міністерство освіти та науки України

Криворізький інститут

Кременчуцького університету економіки, інформаційних технологій та управління

Кафедра Технічної кібернетики

ДИПЛОМНА РОБОТА

зі спеціальності

7.091402 "Гнучкі комп'ютеризовані системи та робототехніка"

ПОЯСНЮВАЛЬНА ЗАПИСКА

”Розробка елементів гнучкої спеціалізованої системи приватного підприємства”

Студента групи ГКС-03-д Генсіровського Олега Ігоровича

Керівник роботи доц., к. т. н. Євтушенко Олександр Іванович

Кривий Ріг

2008

Анотація

Метою даної дипломної роботи є розробка елементів гнучкої спеціалізованої системи приватного підприємництва. Система реалізована в середовищі Delphi 6.0 з використанням технології доступу до баз даних ADO. Система призначена для накопичення і обробки інформації про обіг товарів приватного підприємства.

Розділів 6, схем та малюнків 19, таблиць 11, бібліографічних посилань 28, загальний обсяг - ____.

Зміст

  • Анотація
  • Вступ
  • 1. Постановка завдання
  • 1.1 Найменування та область застосування
  • 1.2 Підстава для створення
  • 1.3 Характеристика розробленого програмного забезпечення
  • 1.4 Мета й призначення
  • 1.5 Загальні вимоги до розробки
  • 1.6 Джерела розробки
  • 2. Теоретичні дослідження технології використання мови SQL при розробці ГВС
  • 2.1 Основні відомості про мову SQL
  • 2.2 Типи даних SQL
  • 2.3 Структура запитів до окремих таблиць
  • 2.3.1 Оператор SELECT
  • 2.3.2 Вибірка за умовою
  • 2.3.3 Агрегатні функції
  • 2.3.4 Сортування записів
  • 2.4 Багатотабличні запити
  • 2.4.1 Об'єднання таблиць
  • 2.4.2 Використання оператора EXISTS
  • 2.4.3 Використання об'єднання UNION
  • 3. Основи технології СОМ при проектуванні ГВС
  • 3.1 Базові поняття
  • 3.2 Об'єкт СОМ
  • 3.3 Інтерфейс
  • 3.4 Інтерфейс IUnknown
  • 3.5 Сервер СОМ
  • 3.6 Реалізація СОМ в Delphi
  • 3.6.1 Клас TComObject
  • 3.6.2 Клас TTypedComObject
  • 3.6.3 Інтерфейс IUnknown
  • 3.6.4 Клас TComObjectFactory
  • 3.6.5 Клас TTypedComObjectFactory
  • 3.6.6 Клас TComClassManager
  • 4. Опис функціональних можливостей і програмної реалізації розроблюваної системи
  • 4.1 Функціональне призначення і технологічні особливості розробки
  • 4.2 Розробка логіко-функціональної схеми роботи користувача
  • 4.3 Опис моделі і структури таблиць бази даних
  • 4.4 Інтерфейс користувача розроблюваної системи
  • 4.5 Опис основних процедур і функцій системи, що розробляється
  • 5. Економічне обґрунтування доцільності розробки програмного продукту
  • 5.1 Організаційно-економічна частина
  • 5.2 Розрахунок витрат праці на розробку програмного продукту
  • 5.3 Витрати на ручну обробку інформації
  • 5.4 Витрати на автоматизовану обробку інформації
  • 6. Охорона праці
  • 6.1 Аналіз небезпечних і шкідливих виробничих чинників при роботі на комп'ютері
  • 6.2 Заходи щодо нормалізації робочої обстановки при роботі на комп'ютері
  • 6.3 Пожежна безпека
  • Висновки
  • Список літератури
  • Додаток А

Вступ

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

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

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

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

обіг товар гнучка delphi

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

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

Щоб реалізувати поставлену задачу потрібно обрати оптимальну мову програмування. Для вирішення цієї ЗАВДАННЯ найбільш підходить Delphi. Ця мова програмування має великі можливості щодо створення прикладного програмного забезпечення. Дозволяє створювати різноманітні програмні продукти у тому числі і програмні продукти для роботи з базами даних.

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

1. Постановка завдання

1.1 Найменування та область застосування

Найменування розробки: розробка елементів гнучкої спеціалізованої системи приватного підприємства. Система пройшла практичну апробацію і може бути впроваджена в ПП "Кришталь".

1.2 Підстава для створення

Підставою для розробки є наказ № 65Са-01 від 29 жовтня 2008 р. по Криворізькому інституту КУЕІТУ.

Початок робіт: 31.10.07. Закінчення робіт: 01.06.08.

1.3 Характеристика розробленого програмного забезпечення

Гнучка система автоматизації була реалізована в середі Delphi 6.0. з використанням технології доступу до файлів баз даних ADO. Для функціонування системи потрібна інсталяція MS Office.

До складу системи входять:

· Diplom. exe - виконавчий файл розробленої системи;

· Db1. mdb - файл, що містить таблиці баз даних, і який може бути розташований на будь-якому комп'ютері, що підключений до локальної мережі;

· help. hlp - довідковий файл системи.

1.4 Мета й призначення

Метою даної дипломної роботи було створення програми яка зможе автоматизувати процес накопичення і обробки інформації про рух товарів. Система була реалізована з використанням технології доступу до баз даних АDО. Розробка пройшла практичну апробацію і може бути використана.

1.5 Загальні вимоги до розробки

Вимоги до програмного забезпечення:

· Робота в середовищі операційних систем Windows 2000/XP;

· Відсутність додаткових вимог до розміщення здійснених файлів;

· Простота й зрозумілість інтерфейсу.

Мінімальні вимоги до апаратного забезпечення:

· IBM-сумісний комп'ютер, не нижче Pentium IІ, RAM-128Mb, SVGA-800*600*16bit;

· Вільний простір на жорсткому диску не менш 2Мб;

Додаткове програмне забезпечення: інсталяція пакету MS Office.

1.6 Джерела розробки

Джерелами розробки дипломної роботи є:

· довідкова література;

· наукова література;

· технічна література;

· програмна документація.

2. Теоретичні дослідження технології використання мови SQL при розробці ГВС

2.1 Основні відомості про мову SQL

Мова SQL була розроблена фірмою IBM для своєї системи управління базами даних Db/2. Потім ця мова стала загальновизнаним стандартом при роботі з базами даних. Фактично, взаємодія користувача з сучасними СУБД здійснюється лише за допомогою цієї мови. На даний момент існує декілька стандартів, що описують цю мову.

По своїй структурі мова поділяється на три частини. У розділі DDL (Data Definition Language) зібрані команди, які задають структуру тих або інших об'єктів бази даних. До них відносяться таблиці, індекси, домени та інші структурні об'єкти. Розділ DML (Data Manipulation Language) надає розробнику набір команд, що дозволяють маніпулювати даними. З їх допомогою можна розробляти вибірки даних, видаляти, додавати і змінювати записи. Розділ DCL (Data Control Language) складається із засобів, які визначають права доступу до об'єктів бази даних. Наприклад, дозволяють доступ до даних або забороняють його.

Ця мова надала користувачу простий і універсальний апарат для доступу до даних і здійснення з ними різних операцій. На рисунку 2.1 показана схема, що відображає принцип використання SQL. Користувач передає запит інтерпретатору, який, у свою чергу, повертає таблицю або курсор. Ці об'єкти знаходяться на так званому віртуальному рівні і формуються лише при запиті. Але вони взаємодіють з реальним рівнем, тобто з таблицями баз даних, на основі яких відбувається формування віртуальних об'єктів. Звичайно, даний поділ є умовним, але він добре відображає ідеологію SQL.

Рис.2.1 Взаємодія з базою даних за допомогою SQL

2.2 Типи даних SQL

Кожне значення, що зберігається в базі даних, має свій тип. Мова SQL, звичайно, підтримує типізацію значень. Основні типи даних приведені в таблиці 2.1.

Таблиця 2.1. Типи даних SQL

Назва

Опис

TEXT

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

CHAR

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

DEC

Тип задає десяткове число. Аргумент складається з двох частин - розрядності і точності. Розрядність визначає кількість значущих цифр, з яких складається число. Точність визначає число цифр після коми. Точність не може бути більше розрядності. Якщо точність дорівнює нулю, то число є цілим

NUMERIC

Тип є двійником типу DEC

INT

Тип призначений для зберігання цілих чисел. Можливі значення знаходяться в проміжку від - 2 147 483 648 до 2 147 483 648

SMALLINT

Тип призначений для зберігання цілих чисел. Можливі значення знаходяться в проміжку від - 32 768 до 32 768

FLOAT

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

REAL

Тип призначений для зберігання чисел з плаваючою крапкою. Цей тип відрізняється від типу FLOAT лише точністю

DOUBLE

Тип відрізняється від REAL підвищеною точністю

DATA

Тип призначений для зберігання дати

TIME

Тип призначений для зберігання часу

2.3 Структура запитів до окремих таблиць

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

2.3.1 Оператор SELECT

Оператором SELECT є вираження, що ініціює виконання запиту. В даному випадку запит є командою на здобуття даних. Вираз SELECT має строго певний формат:

SELECT [[ALL] | DISTINCT] { * | елемент_select [. елемент_select]. }

FROM{базова_таблиця | вираз} [псевдонім]

[. {базова_табліця | вистава} [псевдонім]].

[Where умова]

[GROUP BY назва поля (полів) [HAVING фраза]]:

2.3.2 Вибірка за умовою

Вибірку за умовою реалізує оператор WHERE. Оператор є частиною виразу SELECT і слугує для задання умов відбору записів в результуючий набір. В ході виконання запиту відбувається перевірка всіх записів на відповідність умові відбору. Як приклад можна привести досить простий запит:

SELECT State,City,Company FROM Customer

WHERE State = 'CA'

При обробці запиту був виконаний відбір всіх записів, поля State який має значення СА.

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

SELECT Company,Phone,Fax FROM Customer

WHERE Phone = Fax

Видалення повторних значень

Для здобуття результатів без значень, що повторюються, використовується оператор DISTINCT. Наприклад:

SELECT DISTINCT Country FROM Customer

Обчислювані поля

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

SELECT Onhand,onorder, (Onhand*onorder) AS

Вираз, (Onhand Onorder) AS Сума FROM Parts

В даному прикладі проводиться добуток і сума значень полів Onhand і Onorder.

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

Запит SELECT може також включати числові і текстові константи. Як приклад можна привести наступний запит:

SELECT OnHand,OnOrder,'MUL', (OnHand + 1) AS Плюс,'SUB', (OnHand - 1) AS Мінус FROM Parts

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

Оператори порівняння і логічні оператори

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

Логічні оператори дозволяють задати в запиті логічні умови. Оператор AND реалізує логічне "І”. Оператор OR реалізує логічне "АБО”. Вираз з його використанням, вважатиметься вірним, якщо хоча б одна з умов є істиною. Оператора NOT означає логічне заперечення. Його дія зводиться до того, що він інвертує логічну умову, перед якою його розташовують.

Як приклад можна привести запит, що дозволяє вибрати співробітників, які отримують заробітну плату в певному числовому проміжку. Дані будуть братися з таблиці Employee:

SELECT LastName,FirstName,Salary FROM Employee

WHERE Salary >= 25000 AND Salary <= 30000

В результаті виконання запиту повертаються імена співробітників із заробітною платою від 25 до 30 тисяч включно. В даному випадку оператор AND використовується для завдання діапазону вибраних значень.

Тепер можна змінити даний запит. Можна відшукати всіх співробітників, для яких окрім приведених вище умов поле PhoneЕxt яких має значення 22:

SELECT LastName,FirstName,Salary,PhoneExt FROM Employee

WHERE Salary >= 25000 AND Salary <= 30000 and PhoneExt = '22'

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

SELECT LastName,FirstName,Salary,PhoneExt FROM Employee

WHERE Salary >= 25000 AND Salary <= 30000 and not PhoneExt = '22'

Як видно з тексту запиту, логічна умова NOT дозволила виключити непотрібні номери.

Тепер можна розглянути приклад запиту з використанням оператора OR. припустимо, що менеджерові знадобилося отримати списки всіх співробітників з прізвищем Johnson. Або тих співробітників, які отримують заробітну плату більше 45 000. Скласти запит буде нескладно:

SELECT LastName,FirstName,Salary FROM Employee

WHERE LastName = 'Johnson' or Salary > 45000

Варто звернути увагу на дію оператора Оr. У наборі даних були включені записи, значення поля Salary яких перевищувало 40 000, і ті записи, в яких поле Lastname мало значення Johnson.

Використання оператора IN

Оператор IN визначає масив значень, в який може входити або не входити значення поля даного запису. Наприклад, необхідно вибрати співробітників із заробітною платою 40 000, 55 500 і 25 000. Запит потрібно буде переробити:

SELECT LastName,FirstName,Salary FROM Employee

where Salary = 40000 or Salary = 55500 or Salary = 25000

Проте цей же запит можна написати в коротшій і красивішій формі за допомогою оператора IN:

SELECT LastName,FirstName,Salary FROM Employee

where Salary IN (40000, 55500, 25000)

В якості аргументів операторові IN були передані значення полів, по яким виконувався відбір записів.

Оператор IN може використовуватися і для пошуку символьних значень. Припустимо, що нам необхідно з'ясувати назви компаній, що знаходяться в містах Christiansted, Grand Cayman і St. Thomas. Ці дані міститися в таблиці Customer. Запит знову знадобиться трохи змінити:

SELECT Company,City FROM Customer

WHERE City IN (`Christiansted','Grand Cayman','St. Thomas')

Використання оператора BETWEEN

Оператор BETWEEN використовується для створення діапазону значень, які використовуються для установки умови відбору записів. Цей оператор чутливий до порядку перерахування параметрів, що визначають кордони діапазону. Як приклад можна привести простий запит:

SELECT CustomerID,EmployeeID,ShipName FROM Orders

WHERE EmployeeID BETWEEN 3 AND 5

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

Наступний приклад показує, як можна вибрати номери замовлень, виконаних за певний проміжок часу від 04.07.1996 до 08.07.1996:

SELECT OrderlD,OrderDate,ShipName FROM Orders

WHERE OrderDate BETWEEN '07.04.1996' AND '07.08.1996'

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

SELECT OrderID,OrderDate,ShipName,Freight FROM Orders

WHERE OrderDate NOT BETWEEN '07.04.1996' AND '07.08.1996' AND Freight > 100

Використання оператора LIKE

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

Припустимо, що необхідно вибрати компанію, в назві якої не вистачає декількох букв. В цьому випадку назву можна позначити як S? mons? bistro. Відповідний запит буде використовувати вказаний оператор LIKE:

SELECT CompanyName,ContactName FROM Customers

WHERE CompanyName LIKE 'S_rnons_bistro'

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

Задачу виконує нескладний запит:

SELECT CompanyName,ContactName FROM Customers

WHERE CompanyName LIKE `%Ric%'

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

SELECT CompanyName,ContactName FROM Customers

WHERE CompanyName LIKE `%R_c%'

2.3.3 Агрегатні функції

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

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

Оператор SUM підсумовує значення записів поля.

Оператора AVG обчислює середнє значення записів поля.

Оператор МАХ повертає найбільше значення даного поля.

Оператора MIN повертає найменше значення даного нуля.

Агрегатні функції використовуються подібно до імен полів в запиті, а справжні імена полів передаються їм як аргументи. З операторами SUM і AVG можуть використовуватися лише числові поля. З операторами COUNT, MAX і MIN можуть використовуватися числові і символьні поля. В разі вживання функцій МАХ і MIN до символьних полів їх значення будуть трансльований в Ascii-код. Мінімальному значенню функції відповідатиме символ алфавіту, що знаходиться ближче до його початку, максимальному - що знаходиться ближче до кінця.

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

SELECT AVG (Freight) AS Середнє, MIN (Freight) AS Мін, MAX (Freight) AS Макс, SUM (Freight) AS Сумарне, COUNT (Freight) AS Кількість FROM Orders

WHERE Freight >300

Функція COUNT робить підрахунок всіх записів. Для того, щоб обмежити повтори, слід використовувати оператора DISTINCT. Цей оператор знаходиться перед назвою поля, всередині функції COUNT. Запит, що демонструє цей механізм, показаний нижче:

SELECT COUNT (DISTINCT City) AS Число_міст FROM Customers

В ході виконання запиту з оператором DISTINCT було зафіксовано 69 записів. Без використання оператора - 91. Для виключення повторів при використанні функцій AVG і SUM теж може бути використаний цей оператор.

Оператор GROUP BY використовується для визначення полів, до яких можуть застосовуватися агрегатні функції. У випадку, якщо цей оператор явно не вказаний, всі поля, вказані у вираженні SELECT, трактуються як аргументи агрегатних функцій. Поля, вказані як параметри оператора GROUP BY, стають такими, що групують. Всі записи результуючого набору, що мають однакові значення групуючих полів, утворюють єдину групу. Далі до кожної такої групи буде застосована агрегатна функція. Фактично, оператор GROUP BY надає можливість об'єднувати поля і агрегатні функції в єдиному запиті.

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

SELECT City, COUNT (*) AS Кількість, MAX (PostalCode) AS Поштовий_індекс FROM Customers GROUP BY City

Легко відмітити, що поле City не входить в агрегатну функцію як параметр, тому воно було оголошене з використанням оператора GROUP BY. В ході виконання запиту були вибрані міста, і для кожного з міст було підраховано кількість входжень.

Цей приклад можна ускладнити. Можна створити запит, який отримує лише ті міста, які повторюються в таблиці більше двох разів, і при цьому в кінцевий результат не повинне включатися місто Buenos Aires. Оператора WHERE в даному випадку використовувати не вийде, оскільки він працює лише з окремими записами, а не з масивами. Доведеться використовувати оператора HAVING, який є аналогом оператора WHERE, але може працювати з агрегатними функціями. Сам запит буде сильно змінений:

SELECT City, COUNT (*) AS Кількість, MAX (PostaTCode) AS

Поштовий_індекс FROM Customers Where City <> 'Buenos Aires'

GROUP BY City HAVING COUNT (*) >=3

2.3.4 Сортування записів

Оператор ORDER BY використовується для впорядковування записів результуючого набору даних. Записи сортуються відповідно до порядку слідкування полів і їх значень. Якщо сортування виконуватиметься за зростанням, то слід використовувати параметр ASC. Для сортування за убуванням використовується параметр DESC. Як приклад можна привести нескладний SQL - запит:

SELECT CompanyName,ContactName,City FROM Customers

ORDER BY City

Сортування записів виконується по полю City.

До створеного запиту можна додати сортування по кількості міст в порядку убування записів:

SELECT City, COUNT (*) AS Кількість, MAX (PostalCode) AS Поштовий_індекс FROM Customers Where City <> 'Buenos Aires'

GROUP BY City HAVING COUNT (*) >=3

ORDER BY Кількість DESC, City ASC

Потрібно звернути увагу на те, що в якості аргументу параметра ORDER BY було використано назву поля, оскільки його значення є результатом агрегатної функції COUNT. Для включення сортування за убуванням був вказаний параметр DESC, розташований після назви поля.

2.4 Багатотабличні запити

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

2.4.1 Об'єднання таблиць

У багатьох випадках потрібно отримувати дані з декількох таблиць і зводити їх в одну результуючу таблицю. Така операція називається об'єднанням таблиць. При об'єднанні виконується скріплення полів різних таблиць. При цьому між полями встановлюються зв'язки за рахунок використання відповідних довідкових значень.

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

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

SELECT Orders. ShipName AS Судно, Orders. Freight AS

Вага_вантажу, Orders. OrderDate

AS Дата_Відправки, Customers. ContactName, Customers. Phone

FROM Customers, Orders

WHERE Customers. CustomerID=Orders. CustomerID

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

Цей запит можна ускладнити. припустимо, що необхідно отримати інформацію саме про ті судна, вантаж яких більше 500 тонн і був відправлений з 17.03.1998 по 17.07.1998:

SELECT Orders. ShipName AS Судно, Orders. Freight AS Вага_вантажу, Orders. OrderDate AS Дата_Відправки, Customers. ContactName, Customers. Phone

FROM Customers, Orders

WHERE Customers. CustomerID = Orders. CustomerID AND Freight > 500 AND

Orders. OrderDate BETWEEN '03.17.1998' AND '07.17.1998'

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

2.4.2 Використання оператора EXISTS

Логічні оператори EXIST і NOT EXIST повертають значення True або False залежно від наявності записів, що задовольняють умову пошуку. Як правило, оператор EXISTS використовується з вкладеними запитами. Для ілюстрації принципів його вживання можна використати досить простий запит:

SELECT TitleOfCourtesy, FirstName, LastName FROM Employees

WHERE EXISTS

(SELECT * FROM Orders

WHERE Freight > 1000)

ORDER BY LastName

В підзапиті обираються рядки, значення яких більше 1000. Оскільки подібні рядки існують, то операторові WHERE передається значення True і вираз SELECT обирає відповідні записи.

Можна змінити умову, що накладається на полі Freight, і використовувати замість оператора EXISTS оператор NOT EXISTS:

SELECT TitleOfCourtesy. FirstName. LastName FROM Employees

WHERE NOT EXISTS

(SELECT * FROM Orders

WHERE Freight > 2000)

ORDER BY LastName

Результат виконання запиту буде аналогічний попередньому. Потрібно визначити, чому так сталося. Оператор NOT EXISTS повертає значення True тільки в тому випадку, якщо жоден запис не задовольнятиме даній умові. Оскільки жодне судно не перевезло більш ніж 2 тисячі тонн вантажу, то жоден із записів не буде обраний.

2.4.3 Використання об'єднання UNION

Оператор UNION використовується для об'єднання результатів двох і більше запитів в єдиний набір полів і записів. Коли результати запитів підлягають об'єднанню, їх стовпці виводу мають бути сумісні. Це означає, що всі запити повинні показувати однакове число стовпців в одному і в тому ж порядку. І всі співпадаючі поля повинні бути одного і того ж типу. Це ілюструється простим запитом:

SELECT CUSTOMERID FROM Customers

UNION

SELECT CUSTOMERID FROM Orders

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

3. Основи технології СОМ при проектуванні ГВС

Технологія COM (Component Object Model - модель багатокомпонентних об'єктів) є платформно-незалежна розподілена об'єктно-орієнтована система, що забезпечує взаємодію між своїми компонентами. Технологія СОМ є основою для технологій OLE, ACTIVEX і багато інших.

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

У загальному випадку об'єктом застосування є сукупність даних і функцій, що маніпулюють ними. Об'єкт СОМ взаємодіє з даними за допомогою залежних функцій. Ці функції називаються інтерфейсами, а функції, що викликаються інтерфейсами, називають методами. Крім того, СОМ визначає, що дістати доступ до методів інтерфейсу можна лише через покажчик на інтерфейс. З іншого боку, встановлюючи стандарт простих двійкових об'єктів, СОМ визначає універсальні інтерфейси, що надають функції для роботи зі всіма Сом - технологіями.

3.1 Базові поняття

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

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

Об'єкт працює у складі сервера СОМ. Сервер СОМ може бути виконавчим файлом або динамічною бібліотекою. У будь-якому випадку, він обов'язково надає додатку опис об'єктів, що входять до його складу. Для доступу до методів об'єкту клієнт повинен отримати показники на відповідні інтерфейси. Використовуючи методи об'єкту, клієнт може викликати його служби і звертатися до його властивостей. Взаємодія між об'єктом і клієнтом забезпечується засобами СОМ і приховано від клієнта. На рисунку 3.1 представлена схема, що зображає вище наведене. Об'єкт СОМ може знаходитися в іншому процесі, бібліотеці або навіть на іншій машині. Клієнтський додаток працюватиме з ним точно так, як і якби він знаходився в адресному просторі додатку. Механізм, що дозволяє клієнтові викликати функції "видалених" об'єктів, називається маршалінгом.

Рис.3.1 Схема взаємодії клієнта і об'єкта

Будь-який об'єкт СОМ є звичайним екземпляром якогось класу, документуючого свої властивості і методи. Інформація про всі зареєстровані і доступні в даній операційній системі класи СОМ зібрана в спеціальній бібліотеці СОМ, яка використовується для ініціалізації екземпляра класу. Спочатку клієнт звертається до бібліотеки СОМ, передаючи їй імена потрібного класу і необхідного інтерфейсу. Бібліотека знаходить потрібний клас і спочатку запускає сервер, який потім створює об'єкт - екземпляр класу. Після цього бібліотека повертає клієнтові показники на об'єкт і інтерфейс. В наступній роботі клієнт може звертатися безпосередньо до об'єкту.

За створення об'єкту відповідає спеціальний об'єкт СОМ, званий фабрикою класів. Після створення об'єкту наступає фаза його ініціалізації, в ході якої прочитуються настройки з системного реєстру і завантажуються необхідні стартові дані. За ці процеси відповідають спеціальні об'єкти СОМ, які називаються моникерами. З будь-яким об'єктом СОМ поставляється бібліотека типів, в якій описуються його властивості, методи і інтерфейси. Дана бібліотека створюється за допомогою спеціальної мови опису інтерфейсу Interface Defini-tion Language (IDL).

3.2 Об'єкт СОМ

Об'єкт є звичайним об'єктом із специфічною реалізацією ряду властивостей. Фізично він реалізований у вигляді виконуваного коду, який виконує яку-небудь функцію і має один і більше інтерфейсів. Кожен об'єкт СОМ реалізує екземпляр відповідного класу. Об'єкт може мати будь-яке число інтерфейсів, і кожен інтерфейс має свій власний покажчик. Основна різниця СОМ-ОБ'ЕКТА від об'єкту ООП полягає в тому, що він успадковує не реалізацію інтерфейсів, а тільки їх оголошення. Якщо якому-небудь об'єкту потрібний успадкований метод іншого об'єкту, то він викликає його - даний механізм називається включенням.

Кожен об'єкт СОМ має свій унікальний ідентифікаційний номер. Наприклад, який-небудь об'єкт "знає” про те, що інший об'єкт має інтерфейс з необхідним методом. Якщо сторонній розробник перевизначив даний метод, то інформація,

яку має перший об'єкт, буде невірною. Тобто, виникне помилка зі всіма наслідками. Механізм агрегування дозволяє використовувати інтерфейси інших об'єктів, передаючи визиваючому об'єкту покажчики на них.

3.3 Інтерфейс

Інтерфейс є сполучною ланкою між об'єктом СОМ і клієнтським додатком. Через інтерфейс додаток може коректно звернутися до об'єкту і отримати від нього дані. Інтерфейс є групою логічно і семантично зв'язаних методів, що забезпечують взаємодію між сервісом сервера СОМ і його клієнтом. Будь-який інтерфейс однозначно ідентифікується глобальним унікальним ідентифікатором GUID (Globally Unique Identifier). Цей ідентифікатор є 128-бітовим номером, вірогідність повторення якого прямує до нуля. Даний номер для інтерфейсів називається IID (Interface Identifiers). Також інтерфейс має ім'я, перед яким ставиться символ "I”. Ідентифікатор інтерфейсу дозволяє уникнути конфлікту імен між різними версіями даного інтерфейсу або інтерфейсами інших об'єктів.

Всі об'єкти СОМ підтримують базовий інтерфейс IUnknown. Даний інтерфейс має метод QueryInterface, використовуючи який, клієнтський додаток може отримати інформацію про всі інтерфейси об'єкту. Разом з об'єктом СОМ поставляється бібліотека типів, в якій на мові IDL описуються методи інтерфейсу. Оскільки об'єкти СОМ зберігаються в двійковому форматі (компільованому вигляді), то це забезпечує їх незалежність від конкретної мови програмування, що і робить цю технологію універсальною.

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

Рис.3.2 Структура інтерфейсу

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

3.4 Інтерфейс IUnknown

Інтерфейс IUnknown є базовим інтерфейсом для всіх об'єктів. Він управляє механізмом обліку посилань і дозволяє клієнтам отримувати покажчики на інші інтерфейси даного об'єкту, використовуючи метод QueryInterface. Всі інтерфейси, прямо або побічно, беруть свій початок від цього інтерфейсу. У віртуальній таблиці VTable три методи інтерфейсу IUnknown розташовано першими, а за ними слідують власні методи інтерфейсу.

Метод QueryInterface повертає покажчик на інтерфейс об'єкту, ідентифікатор IID якого указує на запрошуваний інтерфейс. Якщо об'єкт не має інтерфейсу з даним IID, то метод повертає значення NULL.

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

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

Збільшення лічильника посилань виконується методом AddRef. Метод повертає збільшений на одиницю кількість посилань на об'єкт. Даний метод повинен викликатися, коли покажчик на інтерфейс передається якому-небудь об'єкту.

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

3.5 Сервер СОМ

Сервер СОМ є бібліотекою або додатком, що надає сервіс клієнтському додатку або бібліотеці. Сервер СОМ може складатися з одного і більше об'єктів СОМ. Об'єкти СОМ виступають в ролі наборів властивостей і методів. Клієнтові не обов'язково знати, де розташований об'єкт СОМ, оскільки технологія надає прозорий доступ незалежно від знаходження об'єкту.

Розрізняють три типи серверів:

Внутрішній сервер (In-process server) є бібліотекою DLL, що підключається до клієнтського додатку і працює з ним в одному адресному просторі. Як приклад можна привести елемент управління ACTIVEX, що відображається на веб - сторінці. Елемент управління запускається всередині деякого процесу браузера.

Схема відображена на рисунку 3.3

Рис.3.3 Внутрішній сервер

Локальний сервер (Local server) створюється окремим процесом, що працює на тій же машині, що і клієнтський додаток.

Віддалений сервер (Remote server) є динамічною бібліотекою або додатком, який виконується на іншій машині. Віддалений сервер використовує технологію Distributed COM (DCOM) для надання доступу до інтерфейсів.

Як показано рисунку 3.4, якщо об'єкт СОМ розташований поза поточним процесом на тій же машині, що і клієнт, або на віддаленій, то отримуваний клієнтом вказівник інтерфейсу посилається на спеціальний proxy-об'єкт СОМ, який функціонує всередині клієнтського процесу. Проксі надає клієнтові ті ж інтерфейси, що і об'єкт, що викликається, СОМ на локальному або віддаленому сервері. Отримавши виклик від клієнта, проксі упаковує його параметри і за допомогою спеціальних служб операційної системи передає його серверу. На стороні сервера розташований спеціальний об'єкт СОМ - заглушка (Stub). Він розпаковує виклик і передає його необхідному об'єкту СОМ. Результати повертаються тим же шляхом, але в зворотному порядку.

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

Механізм, що дозволяє клієнтові діставати доступ до об'єктів, розташованих в іншому адресному просторі або на іншій машині, називається маршалінгом (Marshaling). Маршалінг повинен виконувати дві основні функції:

приймати покажчик на інтерфейс з процесу сервера і робити доступним покажчик на проксі в процесі клієнта;

передавати аргументи виклику інтерфейсу таким чином, неначе вони прийшли від клієнта, і розміщувати аргументи в процес віддаленого

Рис.3.4 Схема локального і віддаленого серверів

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

3.6 Реалізація СОМ в Delphi

Об'єкт СОМ описується звичайним класом TCOMObject, який створений безпосередньо від класу TObject. Всі властивості і методи об'єкту описуються в оголошенні класу. При створенні об'єкту СОМ з ним зв'язується допоміжний клас CoClass, який описує всі його інтерфейси. При створенні об'єкта до імені його класу додається приставка Со і створюється CoClass цього об'єкту.

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

3.6.1 Клас TComObject

Клас TComObject є базовим класом, на основі якого створюються прості класи СОМ, такі як, наприклад, розширення оболонок. Клас TComObject є СОМ-об'єктом, який підтримує інтерфейси IUnknown і ISupportErrorInfo. Клас реалізує прості об'єкти, що володіють базовим списком можливостей:

Об'єкт володіє ідентифікатором класу CLSID, який використовується для створення екземплярів класу з використанням фабрики класу.

Об'єкт підтримує агрегацію за допомогою методів інтерфейсу IUnknown.

Об'єкт підтримує безпечні виклики і обробку виключних ситуацій OLE, використовуючи інтерфейс IProvideErrorInfo.

Об'єкт використовує в роботі інтерфейс IErrorInfo.

Клас TComObject може використовуватися як базовий клас для створення класів об'єктів СОМ, які повинні мати ідентифікатор класу (CLSID). Ідентифікатор CLSID, як було сказано раніше, використовується для реєстрації класу в реєстрі і для створення його екземпляра ззовні за допомогою виклику фабрики класу.

Об'єкт СОМ, як і будь-який інший об'єкт, створюється конструктором Create. Конструктор створює об'єкт як самостійний екземпляр класу, що не входить в агрегат. Під агрегатом слід розуміти сукупність об'єктів СОМ, що надають свої інтерфейси і що мають один загальний - IUnknown.

Для створення об'єкту СОМ і включення його в агрегат використовується метод CreateAggregated, який створює новий об'єкт як частину агрегату. У параметрі Controller указується загальний інтерфейс IUnknown, що управляє, і передається властивості Controller.

Метод CreateFromFactory використовується для створення об'єкту і його ініціалізації. У властивості Factory вказується фабрика класу об'єкту. Після створення об'єкту метод Initialize дозволяє провести його ініціалізацію. В ході ініціалізації лічильник посилань на об'єкт збільшується на одиницю.

Властивость RefCount містить число посилань на об'єкт. Властивість RefCount визначає, коли створений об'єкт може бути знищений. Коли властивостям привласнюється нульове значення, об'єкт знищується, оскільки з ним не працює жоден клієнт. Значення властивості збільшується методом AddRef інтерфейсу IUnknown і реалізується методом ObjAddRef. Зменшення значення властивості проводиться за допомогою методу ObjRelease, реалізовуючи метод Release інтерфейсу IUnknown.

Метод ObjQueryInterface дозволяє з'ясувати, чи має даний об'єкт СОМ інтерфейс з ідентифікатором, заданим IID. Даний метод є реалізацією методу QueryInterface інтерфейсу IUnknown.

3.6.2 Клас TTypedComObject

Клас TTypedComObject є прямим спадкоємцем класу TComObject. Він призначений для створення об'єктів СОМ з використанням бібліотеки типів. Клас TTypedComObject має інтерфейс IProvideClassInfo, до складу якого входить єдиний метод, призначений для отримання покажчика на CoClass об'єкту.

Метод GetClassInfo є реалізацією методу GetClassInfo інтерфейсу IProvideClassInfo.

3.6.3 Інтерфейс IUnknown

Інтерфейс IUnknown є базовим для всіх інтерфейсів. Він є прямим нащадком класу Interface, на основі якого в Delphi будуються всі інтерфейси.

До складу інтерфейсу входять методи AddRef, Release і QueryInterface, які розглядалися раніше.

У коді Delphi інтерфейс IUnknown підміняє собою клас Interface.

3.6.4 Клас TComObjectFactory

Клас TComObjectFactory є фабрикою класу для об'єктів СОМ, які є нащадками від класу TComObject. Клас TComObjectFactory забезпечує функціонування інтерфейсів IUnknown, IClassFactory і IClassFactory2. Інтерфейс IClassFactory створює об'єкт, приймаючи як параметр його ідентифікатор CLSID. Інтерфейс IC1 assFactory2 використовується для забезпечення ліцензування об'єкту СОМ. Створення об'єкту фабрики класу може бути ініційоване ззовні за допомогою функції API CoCreateClassObject. Для створення об'єкту також можуть бути використані функції CreateComObject і CreateOleObject. Якщо створюється декілька об'єктів одного класу, ефективніше викликати фабрику класу, отримуючи покажчик на його інтерфейс IClassFactory і використовуючи його власні методи. Для управління фабриками класів на сервері СОМ використовується спеціальний клас TComClassManager, доступ до якого можна отримати, використовуючи функцію ComClassManager.

Метод CreateComObject ініціює виклик конструктора класу TComObjectFactory. Конструктор Create створює фабрику класу під час запуску сервера. Конструктор фабрики класу описується в секції ініціалізації модуля, що включає сервер СОМ. У параметрі ComServer указується сервер СОМ, у складі якого функціонуватиме об'єкт. У параметрі ComClass указується тип класу, який використовується методом GetFactoryFromClass ме-неджера класів для ідентифікації фабрики. Параметр CLASSID задає ідентифікатор класу, що створюється цією фабрикою, а параметр Instancing задає спосіб створення об'єкту. Цей спосіб регламентується одним з перерахованих нижче значень:

Значення ciInternal вказує, що об'єкт створюється в процесі як сервер СОМ. Інші додатки не можуть створити екземпляр об'єкту

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

Значення ciSingleInstance вказує, що для кожного клієнта, який звернувся до сервера СОМ, створюється власний екземпляр об'єкту. Всі об'єкти створюються в єдиному екземплярі сервера.

Значення ciMultiInstance вказує, що для кожного клієнта виникає власний екземпляр сервера, в якому міститься екземпляр об'єкту.

У параметрі ThreadingModel задається спосіб взаємодії сервера і клієнта. Значення параметра перераховані нижче:

Значення tmSingle вказує, що сервер послідовно виконує запити клієнтів.

Значення tmApartment свідчить, що виклик об'єкту здійснюється тільки в тому потоці, в якому він створений. Різні об'єкти деякого сервера можуть бути викликані в різних потоках, при цьому один об'єкт може обслуговувати одночасно тільки одного клієнта.

Значення tmFree указує, що об'єкт може одночасно використовуватися довільним числом клієнтів.

Значення tmBoth вказує, що клієнт може використовувати моделі tmApartment або tmFree.

Значення tmNeutral вказує, що до даного об'єкту одночасно можуть звертатися декілька клієнтів в різних потоках. Але захист від можливих конфліктів зобов'язаний забезпечити програміст, використовуючи критичні секції, моникери і інші відповідні засоби. Дана модель доступна тільки для технології СОМ+. При використанні СОМ застосовується модель tmApartment.

Метод RegisterClassObject реєструє клас створюваного об'єкту. Додатки, що містять сервер СОМ, викликають цей метод при запуску відповідного сервісу. Метод UpdateRegistry викликається для реєстрації об'єкту СОМ або видалення

його реєстрації. Реєстрація об'єкту проводиться при першому запуску додатку. У властивості CLASSID указується ідентифікатор класу, а властивість ClassName визначає ім'я класу об'єкту.

У властивості ERRORIID міститься GUID інтерфейсу, в якому відбулася помилка. Властивість ShowErrors включає або відключає показ повідомлень про помилки при створенні об'єкту. Якщо властивість має значення True, то повідомлення про виникаючі помилки виводиться в інформаційному вікні.

3.6.5 Клас TTypedComObjectFactory

Клас TTypedComObjectFactory є прямим спадкоємцем класу TComObjectFactory. Він використовується для створення об'єктів класу TypedComObject.

Властивість ClassInfo дозволяє отримати інформацію про тип без необхідності застосування завантаження бібліотеки типів. Для отримання інформації про об'єкт використовується інтерфейс ITypeInfo.

Метод GetInterfaceTypeInfo повертає інформацію про об'єкт СОМ, який створений даною фабрикою.

3.6.6 Клас TComClassManager

Клас TComClassManager використовується для управління фабриками класів. Екземпляр класу TComClassManager повертається функцією ComClassManager, яка міститься в модулі ComObj. pas. Цей екземпляр управляє фабриками класів об'єктів, власником яких є даний сервер СОМ. Екземпляр класу отримує від сервера СОМ список фабрик і оновлює його при створенні нового об'єкту або знищенні старого. Розробникові надаються методи, що дозволяють управляти фабриками класів.

Функція ComClassManager повертає посилання на екземпляр класу. А метод ForEachFactory послідовно виконує певні дії над всіма фабриками класів даного

сервера СОМ. У параметрі ComServer указується сервер СОМ, а в параметрі FactoryProc - посилання на метод, що виконує необходні дії.

Метод GetFactoryFromClass повертає фабрику класу для класу, вказаного в параметрі ComClass. А метод GetFactoryFromClassID повертає фабрику класу, приймаючи як вхідний параметр ідентифікатор класу CLASSID.

4. Опис функціональних можливостей і програмної реалізації розроблюваної системи

4.1 Функціональне призначення і технологічні особливості розробки

Як мова програмування для реалізації поставленого завдання був вибраний Delphi 6. В ході розробки системи був використаний компоненти, що входять до складу пакету ADOTable Lib. Необхідність використання даного пакету обумовлена тим, що стандартні компоненти палітри BDE не мають можливості зберігати базу даних в одному файлі і для роботи програми необхідна установка BDEAdministrator.

В ході розробки системи також були використані контролери автоматизації MS Office. Використання контролерів автоматизації COM серверів значно спростило процес розробки інтерфейсу користувача і виведення інформації проектованої системи. Для коректної роботи системи необхідна установка MS Office.

4.2 Розробка логіко-функціональної схеми роботи користувача

Логіко-функціональна схема роботи користувача з системою відображена на рисунку 4.1

Рис.4.1 Логіко-функціональна схема роботи користувача з системою

4.3 Опис моделі і структури таблиць бази даних

База даних представлена 6 таблицями в форматі ADOTable.

Таблиці бази даних мають наступну структуру:

Таблиця 4.1. Структура полів таблиці. "Довідник контрагентів" - sp_kontr

Назва поля

Тип поля

Опис

kod_kontr

AutoInc

Код контрагента (ключове поле)

name_kontr

String [25]

Назва контрагента

adress_kontr

String [50]

Адрес контрагента

phone_kontr

String [25]

Телефон контрагента

type

String [1]

Тип (Юридична або фізична особа)

inn

String [12]

Ідентифікаційний номер

nns

String [12]

Номер налогового посвідчення

edrp

String [8]

Код ЕДРП

dir

String [30]

П.І.П. директора

buh

String [30]

П.І.П. гол. бухгалтера

n_pasp

String [8]

Серія і номер паспорта

date_pasp

Date

Дата видачі паспорта

v_pasp

String [60]

Ким виданий паспорт

schet1


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.