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

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

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

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

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

Зовнішні ключі є невід'ємною частиною реляційної моделі, оскільки реалізують відносини між таблицями бази даних. До нещастя, підтримка зовнішніх ключів була відсутня в перших реляційних СУБД. Вона була введена в системі DB2 Version 2 і тепер мається у всіх комерційних СУБД.

3. ОСНОВИ ТЕХНОЛОГІЇ ACTIVEX DATA OBJECTS (ADO)

Доступ до даних є найважливішою вимогою при розробці сучасних бізнес-додатків. Технологія ODBC забезпечує доступ до реляційних баз даних і це перший крок на шляху вирішення цієї проблеми. Однак, коли розроблювачі хочуть включити у свої проекти не реляційні джерела даних або працювати в середовищах, подібних Інтернет, вони стикаються з дилемою - або розробляти власні парадигми доступу до даних, або працювати на рівні API, що несумісне з новими середовищами. ActiveX об'єкти доступу до даних (ActiveX Data Object) вирішують цю дилему і забезпечують єдину модель, що працює з усіма джерелами даних у різних середовищах. У такий спосіб ADO забезпечує послідовний, високопродуктивний доступ до даних, із якими можливо створювати клієнтські програми для роботи з БД або бізнес-об'єкти середнього рівня, що використовують додатки, інструментарій, мова або, навіть, Інтернет-переглядач (Internet Explorer). ADO - це єдиний інтерфейс доступу до даних, що необхідний для створення одне- і багаторівневих додатків архітектури клієнт/сервер і Web-орієнтованих інформаційних систем.

3.1 Огляд технології ADO

Технологія ADO була вперше застосована в Microsoft Internet Information Server як інтерфейс доступу до БД. Використання ADO дозволяє мінімізувати мережний трафік у ключових Internet-сценаріях і зменшити кількість проміжних рівнів між клієнтським додатком і джерелом даних. ADO легко використовувати, тому що він (або вони (об'єкти) або вона (технологія)) застосовує звичну систему викликів - інтерфейс Автоматизації OLE, доступний сьогодні в більшості засобів розробки додатків. Через легкість застосування й вивчення популярність ADO буде рости й у підсумку ADO витисне технології RDO і DAO, що у даний час застосовуються дуже широко. Технологія ADO багато в чому подібна до RDO і DAO, наприклад, вона використовує ті ж угоди мови. ADO також підтримує аналогічну семантику і тому може бути легко освоєна розроблювачами ПЗ.

ADO є інтерфейсом програмного рівня до OLE DB, новітній і наймогутнішої парадигмі доступу до даних від MS. OLE DB забезпечує високопродуктивний доступ до багатьох джерел даних. ADO і OLE DB разом являють собою основу стратегію універсального доступу до даних (Universal Data Access). OLE DB дає можливість універсального доступу до багатьох даних і представляє розроблювачам можливість зробити це досить легко. Тому що ADO знаходиться на вершині OLE DB, те застосування ADO має всі привілеї універсального доступу до даних, що забезпечує OLE DB.

3.2 Огляд технології OLE DB

OLE DB - це відкрита специфікація, розроблена на основі успіху специфікації ODBC і забезпечує відкритий стандарт доступу до усіх видів даним у системах масштабу підприємства. OLE DB - це ядро технології підтримуючий універсальний доступ до даних. На відміну від технології ODBC, що була створена для доступу до реляційних БД, технологія OLE DB розроблена для реляційних і не реляційних джерел даних, таких як сховища пошти (mail stores), текстів і графіки для Web, служби каталогів (directory services), IMS і VSAM сховищ даних на мейнфреймах.

Компоненти OLE DB складаються з провайдерів даних (data providers), що представляють свої дані, споживачів даних (data consumers), що використовують дані, і сервісних компонентів (service components), що обробляють і транспортують дані (наприклад, процесор запитів і механізм курсорів). OLE DB містить у собі міст із ODBC, щоб дати можливість розроблювачам використовувати ODBC-драйвера реляційних БД, широко розповсюджені в даний час.

3.2.1 OLE DB провайдери

Існує два типи OLE DB додатків: споживачі й провайдери. Споживачами можуть бути будь-які додатки, що використовують OLE DB інтерфейси. Наприклад, Delphi додаток, що використовує OLE DB інтерфейси для зв'язку із сервером БД - це OLE DB споживач. Об'єктна модель ADO, що використовує OLE DB інтерфейси, - це теж OLE DB споживач. Будь-який додаток, що використовує ADO, побічно використовує OLE DB інтерфейси через об'єкти ADO.

OLE DB провайдер здійснює OLE DB інтерфейси, тому, OLE DB провайдер дає можливість споживачам мати доступ до даним однаковим способом через ряд документованих інтерфейсів. У цьому змісті OLE DB провайдер подібний ODBC драйверові, що забезпечує універсальний механізм доступу до реляційних БД, але тільки для не реляційних типів даних. Більш того, OLE DB провайдер убудований у вершину OLE COM інтерфейсів, що додає йому велику гнучкість, а ODBC драйвер убудований у вершину C API специфікації.

Microsoft OLE DB SDK version 1.1 поставляє два OLE DB провайдери: ODBC провайдер і провайдер текстів. Провайдер текстів є прикладом, що демонструє докладну реалізацію OLE DB провайдеру. ODBC провайдер - це OLE DB провайдер для ODBC драйверів. Цей провайдер надає механізм для споживачів, щоб використовувати існуючі ODBC драйвери без необхідності термінової заміни існуючих ODBC драйверів на нові OLE DB провайдери.

3.2.2 ODBC провайдери

ODBC провайдер встановлює відповідність між OLE DB інтерфейсами і ODBC API. З ODBC провайдером OLE DB споживачі можуть зв'язуватися із сервером БД через існуючі ODBC драйвери. Споживач викликає OLE DB інтерфейс через ODBC провайдеру. ODBC провайдер викликає відповідні ODBC API інтерфейси і посилає запити до ODBC драйвера. Метою розробки ODBC провайдеру є здійснення усієї функціональності менеджера ODBC драйвера. Тому тепер немає необхідності в менеджері ODBC драйвера. Однак при використанні ODBC провайдером версії 1.1 менеджер ODBC драйвера усе ще потрібно для підтримки зв'язку з ODBC додатками.

3.3 Архітектура технології ADO

ADO засновано на технології COM (Component Object Model) - компонентній об'єктній моделі. Всі об'єкти й інтерфейси ADO є інтерфейсами й об'єктами COM.

Рис. 3.1 Архітектура ADO

3.3.1 Огляд компонентів ADO в середовищі Delphi

Для роботи з ADO на вкладці компонентів ADO є шість компонентів: TADOConnection, TADOCommand, TADODataSet, TADOTable, TADOQuery, TADOStoredProc.

Рис.3.2 Палітра компонентів ADO

TADOConnection аналогічний компонентові BDE TDatabase і використовується для вказівки бази даних і роботи з транзакціями.

TADOTable - таблиця доступна через ADO.

TADOQuery - запит до бази даних. Це може бути як запит, у результаті якого повертаються дані і бази (наприклад, SELECT), так і запит не повертає даних (наприклад, INSERT).

TADOStoredProc - виклик збереженої процедури. На відміну від BDE і InterBase збережені процедури в ADO можуть повертати набір даних, по цьому компонент даного типу є нащадком від TDataSet і може виступати джерелом даних у компонентах типу TDataSource.

TADOCommand і TADODataSet є найбільше загальними компонентами для роботи з ADO, але і найбільш складними в роботі. Обидва компоненти дозволяють виконувати команди мовою провайдера даних (так у ADO називається драйвер бази даних).

Різниця між ними в тім, що команда, що виконується через TADODataSet, повинна повертати набір даних і цей компонент дозволяє працювати з ними засобами Delphi (наприклад, прив'язати компонент типу TDataSource). А компонент TADOCommand дозволяє виконувати команди не повертають набір даних, але не має штатних засобів Delphi для наступного використання повернутого набору даних.

Очевидно, що усі компоненти повинні зв'язуватися з базою даних. Робиться це двома способами або через компонент TADOConnection або прямим указівкою бази даних в інших компонентах. До TADOConnection інші компоненти прив'язуються за допомогою властивості Connection, до бази даних прямо через властивість ConnectionString.

База даних може бути зазначена двома способами через файл лінка до даних (файл у форматі Microsoft Data Link, розширення UDL), або прямим завданням параметрів з'єднання.

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

Рис.3.3 Вікно властивості ConnectionString

При виборі «Use data link file» і натисканні на кнопку «Browse...» з'являється стандартний діалог вибору файлу. Цей файл можна створити в будь-якому вікні explorer-а (у цьому вікні відкриття файлу, у самому explorer, на desktop і т.д.) викликавши контекстне меню і вибравши пункт «New/Microsoft Data Link». Потім викличте локальне меню для створеного файлу і виберіть у ньому пункт «Open». Після цього з'явиться property sheet описаний трохи нижче. Ці ж вкладки містить і property sheet, викликуваний через пункт «Property» локального меню UDL файлу, але в ньому ще є вкладки стосовні до самого файлу.

Використання файлів Microsoft Data Link спрощує підтримку додатків, тому що можливо використовувати засобу Windows для настроювання додатка.

При виборі в редакторі властивості «Use connection string» і натисканні на кнопку «Build...» з'являється такою же property sheet, як і при виборі «Open» для Microsoft Data Link файлу.

У цьому вікні вибирається тип бази даних, місце розташування бази і параметри з'єднання.

На першій сторінці вибирається тип бази даних або Provider, у термінах ADO.

Рис.3.4 Вибір типу бази даних (провайдера)

Бази MS Access доступні як через «Microsoft Jet OLE DB Provider», так і через «Microsoft OLE DB Provider for ODBC».

Наступна сторінка залежить від обраного типу бази, однак для всіх типів є кнопка «Test connection» що дозволяє перевірити правильність і повноту параметрів.

Для «Microsoft Jet OLE DB Provider» вона виглядає так:

Рис. 3.5 Вибір джерела бази даних

Checkbox «Blank password» придушує діалог введення ідентифікатора і пароля користувача при встановленні з'єднання, якщо поле пароля порожнє.

Checkbox «Allow saving password» зберігає пароль у рядку параметрів з'єднання. Якщо він не відзначений, то введений пароль буде використовуватися тільки при виконанні тестового з'єднання.

Для «Microsoft OLE DB Provider for ODBC» ця сторінка виглядає так:

Рис.3.6 Вибір джерела бази даних

Радіокнопка «Use data source name» дозволяє ввести аліас ODBC, а через «Use connection string» уводиться як аліаси так і тип ODBC драйвера і параметри з'єднання.

Параметри ідентифікації користувача аналогічні вище описаним.

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

Рис. 3.7 Встановлення додаткових параметрів

На сторінці «All» можна відредагувати всі параметри з попередніх сторінок і параметри залежні від провайдера, але не ввійшли на сторінку «Connection». Редагування здійснюється у виді параметр - значення, причому в текстовій формі, ніяких діалогів немає. Допомоги те ж ні, ці параметри описані тільки в документації на провайдер. Її можна знайти в MSDN Data Access Services/Microsoft Data Access Components (MDAC) SDK/Microsoft Active Data Objects (ADO)/Microsoft ADO Programmer's Reference/Using Providers with ADO.

Рис. 3.8 Сторінка з усіма доступними параметрами відкриття

У компоненті TADOConnection є властивості Provider, DefaultDatabase і Mode які є альтернативним методом завдання частин рядка параметрів з'єднання - провайдеру, бази даних (наприклад, шляхи до бази MS Access) і режиму спільного використання файлів бази даних. Ці значення цих властивостей автоматично включаються в рядок з'єднання, якщо були задані до активізації компонента й автоматично виставляються після з'єднання.

3.3.2 Інтерфейси архітектури ADO

Інтерфейс Connection

Об'єкти цього типу виконують наступні функції:

· зв'язок із сервером

· керування транзакціями

· одержання інформації про помилки, що відбулися, (властивість Errors)

· одержання інформації про схему даних (таблиці, поля і т.д.)

Рис 3.9 Схема взаємодії в ADO основних COM інтерфейсів

Інтерфейси Recordset і Field

Інтерфейс Recordset (на нижньому рівні ADO це IRowset) є аналогом TDataSet у Delphi.

Підтримує поточне положення і переміщення курсору, закладки (bookmarks), читання, зміна і видалення записів і так далі. Значення полів і їхніх типів доступні за допомогою властивості Fields.

Інтерфейс Field дозволяє одержувати значення полючи, його тип довжину і так далі.

Інтерфейси Command і Parameter

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

Інтерфейс Property

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

Бібліотека досить заплутана, багато функцій дубльовані в різних об'єктах. Наприклад, Recordset можна створювати прямо, методом Open, (причому попередньо створювати Connection не обов'язково), можна одержати як результат виконання методу Command.Execute, або після Connection.Execute задавши команду без параметрів.

Особливості інтерфейсу Command та RecordSet

Інтерфейс Command інкапсульований в усі компоненти за винятком TADOConnection. Це зроблено тому, що в ADO немає можливості одержати дані не виконавши команду.

Інтерфейс Recordset інкапсульований у компоненти похідні від TCustomADODataSet. Це компоненти TADODataSet, TADOTable, TADOQuery, TADOStoredProc. Одержувати дані з них можливо штатними засобами Delphi.

Можливе одержання даних і при виконанні компонента TADOCommand. Метод цього компонента Execute повертає тип _Recordset. Після чого його можна, наприклад, зв'язати з компонентом TADODataSet у такий спосіб

ADODataSet1.RecordSet := ADOCommand1.Execute;

Компоненти TADOTable, TADOQuery і TADOStoredProc є окремими випадками команди, відповідно для таблиці, SQL запиту і збереженої процедури.

Тип Connection інкапсулюється в компонент TADOConnection.

Коли ви виконуєте команду попередньо не відкриваючи з'єднання, воно все рівно створюється. Одержати до нього доступ можливо через властивість Recordset. Прив'язати компонент TADOConnection до уже відкритого з'єднання можливо через властивість ConnectionObject.

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

3.3.3 Використання компонента TADOConnection

У цьому прикладі розглядається робота з компонентом TADOConnection, SQL запитами з параметрами і трансакціями.

Створимо додаток з наступних компонентів

Connect типу TADOConnection

MasterSQL і DetailSQL типу TADODataSet

MasterDS і DetailDS типу TDataSource

MasterGrid і DetailGrid типу TDBGrid

Рис 3.10 Master-detail форма на етапі дизайну

Зв'язуємо MasterGrid, MasterDS, MasterSQL і DetailGrid, DetailDS, DetailSQL аналогічно попередньому прикладові, за винятком того, що замість типу TADOTable використовується тип TADODataSet.

Прив'язуємо Connect до бази даних. Для цього в редакторі властивості ConnectionString вибираємо ту ж базу даних, що й у попередньому прикладі.

Для введення SQL запитів необхідно відредагувати властивість CommandText компонентах MasterSQL і DetailSQL. Після натискання на кнопку "SQLString" з'явиться редактор компонентів, що виглядає в такий спосіб:

Рис. 3.11 Редактор SQL-запита

Кнопка «Add Table to SQL» додає в текст SQL запиту таблицю, обрану в списку «Tables», а «Add Field to SQL» поле таблиці, обране в списку «Fields».

Запит для MasterSQL

select VendorNo, VendorName, Country, City, State, Preferred

from vendors

select PartNo, OnOrder, OnHand, ListPrice, Description, Cost

from parts

where VendorNo = :VendorNo

Запит у DetailSQL повинний вибирати тільки ті деталі, постачальник яких є поточним у MasterSQL. Для цього установимо властивість DataSource компонента DetailSQL у значення MasterDS.

Запит для DetailSQL наступний:

VendorNo у частині where - параметр запиту. Параметри при встановленому DataSource беруться з нього.

Активізуємо MasterSQL і DetailSQL аналогічно попередньому прикладові.

Додаток можна запускати. Цей приклад можна знайти в директорії MasterDetail.

3.3.4 Використання параметрів запиту

Тепер обмежимо вибірку постачальників за значенням полючи State. Для цього додамо до форми наступні компоненти StateEdit типу TEdit c вкладки Standard, QueryButton типу TButton c вкладки Standard

Змінимо запит у MasterSQL на :StateID - параметр, замість якого при виконанні підставляється значення.

select VendorNo, VendorName, Country, City, State, Preferred

from vendors

where State = :StateID

procedure TForm1.QueryButtonClick(Sender: TObject);

begin

MasterSQL.Active := False;

DetailSQL.Active := False;

MasterSQL.Parameters.ParamByName('StateID').Value := StateEdit.Text;

MasterSQL.Active := True;

DetailSQL.Active := True;

end;

Додамо так само обработчик події OnClick у QueryButton наступного змісту

Програма готова. Цей приклад можна знайти в директорії Param.

3.3.5 Синхронізація даних клієнта і сервера

У ADO використовуються три методи синхронізації даних на клієнті і сервері.

Перший - c допомогою методу Resync, що повторно зчитує запису набору. Цей метод використовується при виконанні методу Refresh Delphi.

Другий - повторний запит методом Requery, що заново виконує запит на сервері. Виконання цього методу те ж саме, що і виконання підряд закриття і відкриття набору даних.

Третій - повідомлення сервером клієнта у випадку зміни даних.

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

3.3.6 Робота з транзакціями

У компонентах ADO робота з транзакціями здійснюється через компонент TADOConnection.

Тип транзакції встановлюється у властивості IsolationLevel однієї з наступних констант:

IlUnspecified

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

IlChaos

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

IlReadUncommitted

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

IlBrowse

Те ж саме що і IlReadUncommitted

IlReadCommitted

Читання даних змінених підтвердженими транзакціями. Тобто зміна даних буде очевидно після виконання Commit в інший транзакції.

IlCursorStability

Те ж саме що і IlCursorStability.

IlRepeatableRead

Зміни, зроблені іншими транзакціями не видимі, але при виконанні перезапиту вони транзакція може одержувати новий набір даних.

IlIsolated

Трансакція не бачить змін даних зроблених іншими транзакціями.

IlSerializable

Те ж саме що і IlIsolated.

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

Властивість Attributes установлює чи відкривати нову транзакцію автоматично

xaCommitRetaining - при підтвердженні транзакції

xaAbortRetaining - при скасуванні транзакції

Так само в компонента TADOConnection є три методи для роботи з транзакціями:

BeginTrans Починає транзакцію

CommitTrans Підтверджує зроблені зміни

RollbackTrans Відкочує транзакцію.

3.3.7 Атрибути доступу до даних

На відміну від BDE, ADO підтримує більше настроювань роботи даних.

У ADO є поняття набору даних (recordset) і тісно зв'язане з ним поняття курсору (cursor). Що таке курсор у документації на ADO не описане. Однак чому те місце розташування набору даних називається положенням курсору. Я думаю, що це термінологічна плутанина в Microsoft і курсор той же саме що набір даних.

В усіх компонентах що мають набір даних (тобто в TADODataSet, TADOTable, TADOQuery, TADOStoredProc) є властивості CursorLocation, CursorType, LockType і MarshalOptions, що встановлюють параметри обміну із сервером. Усі ці властивості повинні бути встановлені до того, як набір даних відкривається. Якщо ви установите їх пізніше, те ефекту не буде.

CursorLocation - визначає, де виконується робота з набором на клієнті (clUseClient) або на сервері (clUseServer). Якщо набір даних розташований на клієнті, то із сервера дані запитуються однократно (або до виконання повторного запиту), надалі уся вибірка даних і позиціювання йде на клієнті. Однак модифікація даних виробляється негайно.

CursorType - установлює тип курсору. Значення одне з:

ctUnspecified - бібліотека ADO сама визначає оптимальний тип блокування.

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

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

ctDynamic - динамічний курсор. Додавання, зміни і видалення іншими користувачами видимі і можливі всі типи пересування по наборі даних. Закладки (bookmarks) можливі тільки, якщо провайдер даних них підтримує.

ctKeyset - курсор набору даних. Аналогічний динамічному курсорові, за винятком того, що ви не побачите записи додані іншими користувачами, а записи вилучені іншими користувачами недоступні з вашого набору даних. Зміни даних іншими користувачами видимі.

Треба помітити, що TDBGrid і інші компоненти, що одночасно працюють з декількома записами, можуть працювати тільки коли закладки підтримуються. Тому для компонентів з якими ви будите зв'язувати такі компоненти повинні використовуватися типи ctKeyset або ctDynamic.

LockType - визначає тип блокування записів у наборі даних. Воно з:

ltUnspecified - бібліотека ADO сама визначає який тип буде використовуватися.

ltReadOnly - тільки читання, зміна даних неможливо.

ltPessimistic - песимістичне блокування. Запис блокується відразу після початку редагування і до збереження записів.

ltOptimistic - оптимістичне блокування. Запис блокується тільки коли зміни зберігаються.

ltBatchOptimistic - теж саме що і ltOptimistic, але використовується відкладене збереження змін записів. Більш докладно вона розглядається в наступному пункті.

MarshalOptions - це властивість визначає чи будуть відправлені на сервер ті полючи, що не були змінені. При значенні moMarshalAll будуть, а при moMarshalModifiedOnly не будуть.

4. ОПИС ФУНКЦІОНАЛЬНИХ МОЖЛИВОСТЕЙ І ПРОГРАМНОЇ РЕАЛІЗАЦІЇ СИСТЕМИ

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

Проектована система призначена для автоматизації процесу обліку використання та зберігання імунобіологічних препаратів (ІБП) у межах районної лікувально-профілактичної установи (ЛПУ). Основні задачі, покладені на систему, наступні:

· Створення різних довідників, необхідних для функціонування системи;

· Ведення журналу обліку та використання імунобіологічних препаратів;

· Ведення статистики руху ІБП у межах ЛПУ.

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

4.2 Апаратні вимоги, та вимоги до системного програмного забезпечення

При проектуванні гнучкої інтегрованої системи приймалися до уваги наступні вимоги.

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

· ПК типу IBM PC або сумісний з ним, продуктивністю не менше 166 МГц;

· Оперативна пам'ять не менше 32 МГбайт;

· Монітор із SVGA адаптером;

· НЖМД не менше 4,3 Гбайт;

· НГМД 3,5 дюйми;

· Компакт-дисковий носій (CD);

· Струменевий або лазерний принтер формату А4;

· Монітор, клавіатура, маніпулятор типу "миша".

2. Система не повинна мати прив'язки до апаратної частини для можливого переносу її на нову платформу через моральне старіння комп'ютерної техніки;

3. Програмна оболонка повинна мати інтуїтивно зрозумілий інтерфейс;

Система повинна функціонувати під керуванням операційних систем Windows 98 та Windows 2000, або Windows ХР.

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

Логіко-функціональна схема системи наведена на рис.4.1.

Рис.4.1 Логіко-функціональна схема системи

4.4 Опис інтерфейсу користувача

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

Рис.4.2 Вікно реєстрації користувача системи

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

Рис.4.3 Повідомлення про помилку реєстрації

Після успішної авторизації на екрані з'являється головне вікно системи. Програма має стандартний інтерфейс Windows. Головне меню системи має наступний вигляд:

Рис.4.4 Головне меню системи

Робота з системою починається з формування довідників.

Довідник типів препаратів має наступний вигляд:

Рис. 4.5 Довідник типів препаратів

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

Рис. 4.6 Довідник країн-виробників

Тут міститься інформація про країни-виробники імунобіологічних препаратів.

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

Рис. 4.7 Вікно довідника категорій об'єктів

Рис. 4.8 Вікно довідника дільниць

Вікно довідника дільниць містить інформацію про номер дільниці та ПІП дільничного лікаря.

Вікно довідника об'єктів має наступний вигляд.

Рис. 4.9 Вікно довідника об'єктів

Дані, що відображені в таблиці недоступні для редагування. При натисканні кнопки „Додати запис” на екрані з'являється наступне вікно:

Рис. 4.10 Вікно додавання запису довідника об'єктів

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

· Тип (категорія об'єкту). Вибирається з довідника за допомогою кнопки-підказки та заповнюється для тих об'єктів, які закріплені за відділенням. При цьому на екрані з'являється вікно довідника з додатковою панеллю.

Рис. 4.11 Вікно довідника у режимі вибору категорії об'єкту

· Номер дільниці. Аналогічним чином обирається із довідника.

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

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

Рис. 4.12 Вікно редагування інформації про об'єкт

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

Рис. 4.13 Панель фільтрації записів

Кнопка „Експорт” дозволяє експортувати дані про об'єкти в файл формату MS Word. Приклад цього документу наведений в додатку Б.

Пункт меню Облік - Паспортні дані виводить на екран вікно, що представлене на рис.

Для кожної серії препарату реєструються наступні паспортні дані:

· Вид препарату - вид імунобіологічного препарату із довідника видів ІБП.

· Серія - вказується серія препарату.

· Контрольний №- реєструється контрольний №ІБП.

· Вимір дози - вказується вимір дози (мл, краплі).

· Фасування - вказується кількість доз в ампулі, флаконі.

· Країна-виробник - фіксується країна-виробник препарату (обирається із довідника).

· Дата випуску - вказується дата виготовлення ІБП.

· Термін придатності - вказується дата, до якої можливо використовувати препарат.

· Примітка - довільний коментар до запису про ІБП.

Рис. 4.14 Вікно „Паспортні дані імунобіологічних препаратів”

При натисканні кнопки „Додати запис” на екрані з'являється наступне вікно:

Рис. 4.15 Вікно додавання запису паспортних даних

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

Кнопка „Експорт” дозволяє сформувати файл формату MS Word, приклад якого наведений в додатку Б.

Пункт меню Облік - Рух препаратів дозволяє вести статистику надходження та використання імунобіологічних препаратів.

Для формування запису про рух ІБП існує спеціальна форма (рис.), в якій відображені наступні дані:

· Дата - дата реєстрації запису в журналі (за умовчанням - це поточна дата).

· Серія - серійний номер препарату.

· Термін придатності - строк, до якого препарат можна використовувати.

Рис. 4.16 Вікно „Облік використання ІБП в ЛПУ”

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

· отримання препарату від постачальників;

· видача препарату на об'єкт (в якості об'єкту може виступати будь-яка одиниця із відповідного довідника);

· використання препарату у межах лікувально-профілактичної установи;

· списання препарату у зв'язку із закінченням строку гідності.

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

Рис. 4.17 Додавання запису про рух ІБП

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

Рис. 4.18 Додавання запису в режимі видання препарату на об'єкт

Закрити вікно за допомогою кнопки „Виконано” неможливо, якщо не здійснені наступні операції:

· обрано тип операції;

· якщо тип операції „Використано” не обраний тип використання;

· якщо в якості типа використання обрано „Видано на об'єкт” та не обрано об'єкт із довідника;

· якщо не обрана серія препарату із паспорту препаратів;

· якщо не введена кількість одиниць (флаконів або ампул препарату).

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

Рис.4.19 Повідомлення системи про відсутність препарату у необхідній кількості

Пункт меню Облік - Залишки, дозволяє отримати інформацію про кількість одиниць ІБП, що є на балансі ЛПУ.

Рис. 4.20 Вікно обліку залишків ІБП

Кнопка „Експорт” дозволяє створити звіт про залишки препаратів у форматі MS Word (додаток Б).

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

Рис. 4.21 Вікно „Перелік препаратів, що підлягає списанню”.

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

Рис.4.22 Діалогове вікно відкриття файлу бази даних

Підпункт меню Файл - Резервна копія дозволяє у будь - який момент зберегти резервну копію бази даних у форматі mdb. Діалогове вікно зберігання резервної копії наведено на рис..

Рис. 4.23 Діалогове вікно зберігання резервної копії бази даних

Підпункт меню Адміністратор - Користувачі дозволяє змінювати або додавати інформацію (логін та пароль) про користувачів. Інформація про користувачів системи зберігається у системному реєстрі. Цей підпункт меню доступний тільки тоді, коли користувачем системи є адміністратор.

Рис. 4.24 Вікно редагування відомостей про користувачів системи

Якщо натиснути кнопку „Додати запис”, на екрані з'являється додаткова панель. Таким чином адміністратор може додавати користувачів системи та визначати їх пароль.

Рис. 4.25 Вікно системи, в якому можна додати інформацію про користувача

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

Рис. 4.26 Вікно зміни інформації про користувача

4.5 Програмна реалізація гнучкої системи автоматизації

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

Додаток використовує базу даних в форматі mdb за наступною схемою:

Рис.4.27 Схема взаємозв'язку таблиць бази даних

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

Рис.4.28 Структура таблиці sp_type_pr - довідника видів імунобіологічних препаратів

Рис. 4.29 Структура таблиці sp_country - довідника країн - виробників

Рис. 4.30 Структура таблиці pasport_pr - „Паспортні дані препаратів”

Рис. 4.31 Структура таблиці sp_type_ob - довідника типів об'єктів

Рис. 4.32 Структура таблиці sp_dil - довідника дільниць ЛПУ

Рис. 4.33 Структура таблиці objects - довідника об'єктів

Рис. 4.34 Структура таблиці sp_dil, що містить відомості про рух препаратів

Програми містить 6 форм, за допомогою яких користувач має змогу заносити та змінювати інформацію у базі даних та застосовуючи надані засоби фільтрування даних вибирати потрібні дані. Ієрархія форм наведена на мал. 4.35.

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

Рис. 4.35 Ієрархія форм системи

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

Рис. 4.36 Вікно DataModule2

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

reg:=tregistry.Create(key_read); //створення ключа

try

reg.RootKey:=HKEY_CURRENT_USER;

if reg.OpenKey('\software\archive_doc\path',false) //відкриття ключа реєстру для зчитування

then

basename:=reg.ReadString('text') //зчитування значення ключа як текстового параметру

else

basename:='.\baza.mdb'; //якщо відповідний ключ в реєстрі не знайдений, система буде шукати файл бази в каталозі, в якому розташований виконавчий файл

DataModule1.ADOConnection1.Connected:=false;

DataModule1.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;'+'Data Source='+basename+';Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";';

except

showmessage(`Файл не найден');

Application.Terminate; //якщо файл бази не знайдено, система припиняє роботу

end;

reg.Free;

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

Інформація про логін користувача та пароль також зберігається у системному реєстрі (гілка password).

Рис. 4.37 Вікно редактора реєстру

Кожному користувачеві (ім'я параметру log[i] - відповідно до порядку додавання користувача до списку) відповідає власний пароль (pas[i]).

Система налаштована таким чином, що завжди першим користувачем у списку буде адміністратор системи (логін - admin). Тому ключ log1 у системі відсутній. Якщо в системному реєстрі не знайдена гілка password, єдиним користувачем системи є admin, пароль якого по умовчанню - „1”.

Випадаючий список користувачів формується наступним чином:

procedure Tpassword.FormCreate(Sender: TObject);

var i:integer;

begin

reg:=tregistry.Create(key_read); //відкриття реєстру для зчитування інформації

reg.RootKey:=HKEY_CURRENT_USER;

for i:=1 to 20 do

begin

try

if reg.OpenKey('\software\vak\password',false) then

if i=1 then begin log[1]:='admin'; ComboBox1.Items.Add(log[1]); //якщо це перший за номером користувач, його логін 'admin'

end else log[i]:=reg.ReadString('log'+inttostr(i)); //інакше логін зчитується із відповідного ключа реєстру

pas[i]:=reg.ReadString('pas'+inttostr(i));

if (log[i]<>'') and (i>1) then ComboBox1.Items.Add(log[i]);

except

end;

end;

end;

if pas[1]='' then pas[1]:='1'; //пароль користувача 'admin' по умовчанню

combobox1.ItemIndex:=0;

end;

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

procedure Tpassword.BitBtn1Click(Sender: TObject);

var s:string; i:integer;

begin

fl:=false; //ознака того, що пароль введений невірно

for i:=1 to 20 do

begin

if (Edit1.Text=pas[i]) and (ComboBox1.Text=log[i]) //якщо відповідні логін та пароль співпадають з тими, що введені користувачем

then fl:=true; //ознака того, що пароль введений вірно

end;

if fl then close //якщо пароль вірний, форма закривається

else begin //інакше на екран виводиться інформаційне вікно та користувачеві надається ще одна спроба

s:=Application.Title;

Application.Title:='Помилка реєстрації'; //зміна заголовку повідомлення

ShowMessage('Ім''я користувача або пароль введено невірно!');

Application.Title:=s; Edit1.Text:='';

Edit1.SetFocus; //фокус у вікні вводу пароля

end;

end;

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

procedure Tpassword.FormClose(Sender: TObject; var Action: TCloseAction);

begin

if not fl then main.Close //якщо пароль введений невірно, закривається головна форма

else

if ComboBox1.Text='admin' then main.N17.Enabled:=true //якщо користувач системи admin, пункт Користувачі головного меню системи доступний

else main.N17.Enabled:=false;

end;

Формування довідників відбувається при допомозі стандартних компонентів DBGrid та DBNavigator і не є цікавим з програмної точки зору.

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

Перелік об'єктів об'єднує записи з деяких таблиць та формується на основі наступного SQL-запиту:

select o.pib_k, o.tel,o.kod_type_obj,o.kod_dil,o.kod_ob,o.nazva, o.adresa, d.nomer from objects o left join sp_dil d on d.kod_dil=o.kod_dil

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

procedure Tsp_ob.DBGrid1DblClick(Sender: TObject);

begin

with DataModule2 do

begin

ADOTable5.Locate('kod_ob',ADOQuery3kod_ob.AsInteger,[]); //пошук у таблиці - довіднику об'єктів запису, що відповідає обраному в наборі ADOQuery3

ADOTable5.Edit; //перехід в режим редагування

end;

with vvod_ob do

begin

Caption:='Редагування запису'; //зміна назви форми

DataModule2.ADOTable6.Locate

('kod_dil',DataModule2.adoquery3kod_dil.asinteger,[]); //пошук відповідного запису у таблиці -довіднику дільниць

DataModule2.ADOTable4.Locate

('kod_type_ob',DataModule2.adoquery3kod_type_obj.asinteger,[]);,[]); //пошук відповідного запису у таблиці -довіднику типів об'єктів

Edit1.Text:=DataModule2.ADOTable4type_obj.AsString; //виводиться тип об'єкту у відповідному вікні

Edit2.Text:=inttostr(DataModule2.ADOTable6nomer.AsInteger); //виводиться номер дільниці

ShowModal;

end;

end;

При натисканні кнопки „Додати запис” з'являється аналогічна форма, але з іншою назвою. При цьому текстові поля очищуються.

procedure Tsp_ob.BitBtn2Click(Sender: TObject);

begin

DataModule2.adotable5.Insert; //додавання запису у таблицю

vvod_ob.Edit1.Text:='';

vvod_ob.Edit2.Text:='';

vvod_ob.Caption:='Додавання запису';

vvod_ob.ShowModal

end;

Рис. 4.38 Форма вводу даних про об'єкт на етапі проектування

інформаційний автоматизований облік імунобіологічний

При натисканні на кнопки з трьома крапками на екрані з'являються вікна довідників. При цьому в вікні довідника з'являється додаткова панель з кнопкою „Вибрати”

procedure Tvvod_ob.SpeedButton1Click(Sender: TObject);

begin

sp_type_ob.Panel1.Visible:=true; //візуалізація панелі

sp_type_ob.ShowModal;

end;

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

procedure Tsp_type_ob.BitBtn1Click(Sender: TObject);

begin

DataModule2.ADOTable5kod_type_obj.AsInteger:=DataModule2.ADOTable4kod_type_ob.AsInteger;

vvod_ob.Edit1.Text:=DataModule2.ADOTable4type_obj.AsString;

close; //закриття форми

end;

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

procedure Tvvod_ob.BitBtn1Click(Sender: TObject);

begin

sp_ob.ComboBox1.Items.Clear;

DataModule2.ADOTable5.Post;

DataModule2.ADOQuery3.Close;

DataModule2.ADOQuery3.Open;

with DataModule2 do

begin

ADOQuery4.Close;

ADOQuery4.Open;

while not ADOQuery4.Eof do

begin

sp_ob.ComboBox1.Items.Add(ADOQuery4type_obj.AsString);

ADOQuery4.Next;

end; end;

close;

end;

При натисненні кнопки фільтрація на екрані з'являється додаткова панель.

procedure Tsp_ob.SpeedButton1Click(Sender: TObject);

begin

CheckBox1.Checked:=true; //флажок „Фільтрація” ввімкнено

Panel2.Visible:=SpeedButton1.Down;

CheckBox1Click(sender);

end;

Список типів об'єктів формується на основі наступного SQL-запиту:

select distinct t.type_obj from objects o left join sp_type_ob t on t.kod_type_ob=o.kod_type_obj

Таким чином до набору додаються назви тільки тих типів об'єктів, які присутні в довіднику об'єктів. При цьому повторення виключаються (оператор distinct)

Формування списку відбувається при появі форми:

procedure Tsp_ob.FormShow(Sender: TObject);

begin

ComboBox1.Items.Clear; //очищення списку

with DataModule2 do

begin

ADOQuery4.Close;

ADOQuery4.Open;

while not ADOQuery4.Eof do //перебір усіх записів набору

begin

sp_ob.ComboBox1.Items.Add(ADOQuery4type_obj.AsString); //додавання назви типу об'єкту до списку

ADOQuery4.Next; //перехід на наступну запис

end;

end;

end;

Фільтрація записів відбувається після обрання значення із списку (подія OnChange компоненту):

procedure Tsp_ob.ComboBox1Change(Sender: TObject);

begin

with DataModule2 do

begin

ADOQuery3.Close;

ADOQuery3.SQL.Clear;

ADOQuery3.SQL.Add('select o.pib_k,

o.tel,o.kod_type_obj,o.kod_dil,o.kod_ob,o.nazva, o.adresa, d.nomer from objects

o left join sp_dil d on d.kod_dil=o.kod_dil where o.kod_type_obj=(select

kod_type_ob from sp_type_ob where type_obj='+''''+ComboBox1.Text+''''+')');

ADOQuery3.Open;

end;

CheckBox1.Checked:=false; // режим фільтрації ввімкнений

end;

Режим фільрації вимикається, якщо встановлено перемикач „Показати все”.

procedure Tsp_ob.CheckBox1Click(Sender: TObject);

begin

if CheckBox1.Checked then //якщо режим фільтраціїї відключено

with DataModule2 do

begin

ADOQuery3.Close;

ADOQuery3.SQL.Clear;

ADOQuery3.SQL.Add('select o.pib_k,

o.tel,o.kod_type_obj,o.kod_dil,o.kod_ob,o.nazva, o.adresa, d.nomer from objects o left join sp_dil d on d.kod_dil=o.kod_dil');

ADOQuery3.Open;

end

else ComboBox1Change(Sender);

end;

Розглянемо більш детально процедуру формування звіту (кнопка „Експорт”).

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

procedure Tsp_ob.BitBtn4Click(Sender: TObject);

const

wdalignPageNumberRight=1;

var i,j,k:integer;

s:string; mypagenumber:variant; mypagenumbers:variant;

mysection:variant;

begin

w:=createoleobject('word.application'); //створення об'єкту Word

w.documents.add; //додавання документу

w.activewindow.activepane.view.zoom.percentage:=100; //масштаб відображення вікна документу - 100%

mysection:=w.activedocument.range.sections.item(1); //встановлення поточного розділу документу

mypagenumbers:=mysection.headers.item(1).pagenumbers; //автоматична нумерація сторінок звіту

mypagenumber:=mysection.headers.item(1).pagenumbers.add(pagenumberalignment:=wdalignPageNumberRight,firstpage:=true); //встановлення параметрів нумерації - вгорі сторінки, по центру, номер на першій сторінці

myrange:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);

myrange.paragraphformat.alignment:=1; //вирівнювання тексу абзацу по центу

myrange.select; //виділення поточного абзацу

w.selection.font.bold:=1; //текст „жирний”

w.selection.font.underline:=1; //текст підкреслений

w.activedocument.range.insertafter('Перелік об''єктів'); //вставка заголовка звіту

w.activedocument.range.insertafter(#13); //додавання пустих строк

w.activedocument.range.insertafter(#13);

if CheckBox1.Checked then //якщо не ввімкнений режим фільтрації

k:=ComboBox1.Items.Count-1 else begin k:=0; //встановлення кількості груп (типів об'єктів0

s:=combobox1.text; //змінна, де зберігається назва типа об'єкту

end;

for j:=0 to k do //перебір усіх груп

begin

myrange:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);

myrange.paragraphformat.alignment:=1;

myrange.select;

w.selection.font.underline:=0;

w.selection.font.bold:=1;

if checkbox1.checked then

w.activedocument.range.insertafter(ComboBox1.Items[j]) else

w.activedocument.range.insertafter(s); //вивід заголовку групи - назви типа об'єкту

w.activedocument.range.insertafter(#13);

w.activedocument.range.insertafter(#13);

with DataModule2 do //вивід даних про об'єкту поточного типу

begin

ADOQuery3.Close;

ADOQuery3.SQL.Clear;

if CheckBox1.Checked then

s:=ComboBox1.Items[j];

ADOQuery3.SQL.Add

('select o.pib_k, o.tel,o.kod_type_obj,o.kod_dil,o.kod_ob,o.nazva, o.adresa, d.nomer from objects o left join sp_dil d on d.kod_dil=o.kod_dil where o.kod_type_obj=(select kod_type_ob from sp_type_ob where type_obj='+''''+s+''''+')');

//формування відповідного SQL-запиту

ADOQuery3.Open;

ADOQuery3.first;

end;

myrange:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);

w.activedocument.tables.add(range:=myrange,numrows:=1,numcolumns:=5); //додавання в документ таблиці - 1 рядок та 5 стовпців

table:=w.activedocument.tables.item(j+1);

table.AutoFormat(Format:=20,

ApplyBorders:=true,

ApplyShading:=false,

ApplyFont:=false,

ApplyColor:=false,

ApplyHeadingRows:= false,

ApplyLastRow:=false,

ApplyFirstColumn:= false,

ApplyLastColumn:=false,

AutoFit:=false); //форматування таблиці за основі заданого типу Автоформату

table.rows.item(1).range.paragraphformat.alignment:=1; //вирівнювання посередині

table.rows.item(1).shading.backgroundpatterncolorindex:=16; //заливка комірки таблиці

table.rows.item(1).select; //обираємо 1-й рядок

w.selection.font.bold:=1;

for i:=1 to table.columns.count do //формування заголовків

case i of // i - порядковий номер стовпця

1: begin

table.columns.item(i).width:=120; //встановлюємо ширину стовпця

table.cell(1,i).range.text:='Назва'; //виводимо заголовок

end;

2: begin

table.columns.item(i).width:=50;

table.cell(1,i).range.text:='№діл.';

end;

3: begin

table.columns.item(i).width:=100;

table.cell(1,i).range.text:='Адреса';

end;

4: begin

table.columns.item(i).width:=100;

table.cell(1,i).range.text:='ПІП керівника';

end;

5: begin

table.columns.item(i).width:=80;

table.cell(1,i).range.text:='Телефон';

end;

end;

table.rows.add; //додаємо рядок у таблицю

table.rows.item(2).shading.backgroundpatterncolorindex:=0; //відключення заливки

table.rows.item(2).select;

table.rows.item(2).range.paragraphformat.alignment:=3;

w.selection.font.bold:=0;

k:=2;

with DataModule2 do

while not ADOQuery3.eof do //перебір усіх записів набору

begin

//формування таблиці - занесення відповідних значень набору у комірки таблиці

table.cell(ADOQuery3.recno+1,1).range.text:=adoquery3nazva.asstring;

table.cell(ADOQuery3.recno+1,2).range.text:=adoquery3nomer.asinteger;

table.cell(ADOQuery3.recno+1,3).range.text:=adoquery3adresa.asstring;

table.cell(ADOQuery3.recno+1,4).range.text:=adoquery3pib_k.asstring;

table.cell(ADOQuery3.recno+1,5).range.text:=adoquery3tel.asstring;

k:=k+1; //номер рядка

ADOQuery3.next; //перехід на наступну запис

table.rows.add; //додавання рядку у таблицю

end;

table.rows.item(k).delete;

w.activedocument.range.insertafter(#13);

w.activedocument.range.insertafter(#13); //візуалізація документу

end;

w.visible:=true;

checkbox1.checked:=true;

CheckBox1Click(Sender);

end;

Видалення запису відбувається наступним чином:

procedure Tsp_ob.BitBtn3Click(Sender: TObject);

begin

with DataModule2 do

begin

ADOTable5.Locate('kod_ob',ADOQuery3kod_ob.AsInteger,[]); //пошук запису у таблиці-довіднику, щр відповідає поточній у набору

ADOTable5.Delete; //видалення запису

//оновлення набору

adoquery3.Close;

adoquery3.Open;

end;

end;

Реалізація інтерфейсу вікна „Паспортні дані ІБП” відбувається майже аналогічним чином. Наведемо тільки тексти SQL-запитів, на основі яких сформовані відповідні набори.

Перелік паспортних даних препаратів:

select p.kod_pr,p.kod_type_pr,p.seria, p.kontr_n, p.vol_d, p.vimir_d, p.kol_d, p.date_vip, p.termin_pr,c.country, p.note from pasport_pr p left join sp_country c on c.kod_c=p.kod_vir

Формування списку типів препаратів:

select distinct t.naz_type from pasport_pr p left join sp_type_pr t on t.kod_type_pr=p.kod_type_pr

Найголовнішою гілкою системи є облік руху ІБП. Відповідний набір даних формується на основі наступного SQL-запиту:

select o.kod_z,o.lpu,o.spisano, o.kod_pr,o.priznak, o.kilkist,p.seria,p.termin_pr,o.date_v from oblik o left join pasport_pr p on p.kod_pr=o.kod_pr


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

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