Розробка гнучкої системи автоматизації обліку методичних матеріалів видавничого центру КМФ НМетАУ (ADO+Delphi)

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

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

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

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

3.2 Основні конструкції OLE DB

На верхньому рівні абстракції можна виділити три головних компоненти:

споживачі;

провайдери даних;

провайдери сервісів.

Будь-який додаток, що використовує інтерфейси OLE DB, є споживачем. У ролі споживача може виступати прикладна програма бази даних, засіб розробки, засіб створення звітів або ж об'єктна модель Active Data Object (ADO).

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

Прийняття запитів на доступ до даних, що надходять від споживача.

Виконання вибірки й відновлення даних.

Передача результатів споживачеві (дані або коди помилок).

Провайдер сервісів (Service provider) реалізує розширені можливості, які не підтримуються звичайними провайдерами даних, і сам не “володіє” даними. Цей провайдер, приміром, забезпечує сортування, фільтрацію, керування транзакціями, обробку SQL-запитів та ін. Провайдер сервісів може працювати з масивами даних прямо або через провайдер даних. На Рис. 3.1 представлена схема, що відбиває суть сказаного.

Рис. 3.1 Компоненти OLE DB

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

Ядро об'єктної моделі OLE DB становлять чотири об'єкти:

DataSource;

Session;

Command;

Rowset.

Як видно з Рисунка, об'єкт DataSource, викликавши інтерфейс IDBCreateSession, створює нову сесію. У свою чергу об'єкт Session викликає інтерфейс IDBCreateCommand і створює об'єкт Command, що містить певну команду. Далі об'єкт Command викликає інтерфейс ICommand і створює об'єкт Rowset, що містить отримані результати.

Об'єкт DataSource викоРистовується споживачем даних 0LE DB для зв'язку із провайдером даних.. Також об'єкт може бути створений за допомогою виклику Сомів-функції CoCreatelnstance. Кожен провайдер OLE DB привласнює свій власний ідентифікатор класу об'єкту, що є джерелом даних. Об'єкт DataSource містить інформацію про параметри з'єднання, включаючи ім'я коРистувача й пароль. Основне завдання об'єкта - надати інформацію з масиву даних. Він підтримує кілька інтерфейсів, необхідних для взаємодії з SQL-сервером:

Інтерфейс IDBInitialize ініціалізує і встановлює середовища даних і безпеки (аутентифікація та інші дії).

Інтерфейс IDBCreateSession створює об'єкт Session.

Інтерфейс IDBProperties дозволяє одержувати інформацію про можливості провайдера й робити ініціалізацію необхідних властивостей.

Об'єкт Session містить дані транзакцій і генерує набори рядків із джерела даних, а також команди для запитів до джерела й маніпулювання їм. Якщо провайдер підтримує команди, об'єкт Session виступає в ролі фабрики класів об'єкта Command. Для створення сесії з об'єкта DataSource варто викликати інтерфейс IDBCreateSession::CreateSession. З одним об'єктом DataSource може бути асоційоване відразу кілька сесій.

Об'єкт Session теж підтримує кілька інтерфейсів:

Інтерфейс IOpenRowset дозволяє відкривати набір рядків з таблиці, індексу або діаграми.

Інтерфейс IGetDataSource повертає об'єкт DataSource з об'єкта Session.

Інтерфейс IDBCreateCommand створює об'єкт Command.

Об'єкт Command служить для обробки команд, які являють собою рядки, передані від споживача до провайдера для виконання. У більшості випадків така команда містить у собі SQL-оператор SELECT, але може містити й інші оператори. Один сеанс (об'єкт Session) може містити трохи пов'язаних з ним команд. Результатом виконання команди є новий об'єкт Rowset.

Об'єкт Command підтримує свій набір інтерфейсів:

Інтерфейс ICommand викоРистовується для виконання запитів або команд.

Інтерфейс ICommandText викоРистовується для визначення тексту запиту.

Інтерфейс ICommandProperties визначає необхідні властивості набору рядків, що повертає по команді.

Інтерфейс ICommandWithParameters дозволяє виконувати запити з параметрами.

Об'єкт Rowset дозволяє провайдерам даних представляти дані із джерел у табличному форматі. Цей об'єкт представляється як деяка безліч рядків, у кожній з яких утримується один або кілька стовпців. Такий об'єкт може бути створений у результаті виклику інтерфейсу IOpenRowset::OpenRowset або згенерований провайдером даних при настанні певної події. Цей об'єкт може застосовуватися для відновлення, вставки й видалення рядків, якщо провайдер має відповідні інтерфейси.

Найбільш часто викоРистовувані інтерфейси об'єкта Rowset перераховані нижче:

Інтерфейс IRowset дозволяє об'єкту сканувати осередку.

Інтерфейс IAccessor привласнює стовпці наборам рядків.

Інтерфейс IColumnsInfo дозволяє одержувати інформацію про стовпці набору рядків.

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

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

Інтерфейс IConvertType робить перевірку на можливість перетворення стовпця набору рядків одного типу до іншого.

До складу OLE DB входять й інші об'єкти, крім розглянутих вище. Об'єкт Enumerator викоРистовується для перерахування доступних об'єктів джерел даних (провайдерів OLE DB), а також вказівки інших перечисельників, наявних у системі. У більшості випадків інформація, що повертає об'єктом, витягається з реєстру. Об'єкт Enumerator надає інтерфейс ISourceRowset і повертає об'єкт Rowset з описом всіх джерел даних і перечисельників, які він містить у собі. Одержати цю інформацію можна за допомогою методу GetSourcesRowset інтерфейсу ISourceRowset. Існує кореневий об'єкт Enumerator, що повертає джерела даних верхнього рівня, і інші перечисельники, які можуть використатися для витягу інформації, до якої має доступ конкретний провайдер.

Об'єкт Transaction підтримує транзакції із джерелами даних. Розрізняють локальні й розподілені транзакції. Локальними транзакціями називаються такі транзакції, які виконуються за участю локального провайдера даних. Провайдер даних, що підтримує локальні транзакції, надає інтерфейс ITransactionLocal за допомогою об'єкта Session.

Властивості транзакцій провайдера можна з'ясувати через інтерфейс IDBProperties. Для виконання розподілених транзакцій, тобто транзакцій, що використовують кілька розподілених провайдерів даних, споживачі використовують інтерфейс ITransactionJoin. Цей інтерфейс може застосовуватися лише в тому випадку, якщо провайдер підтримує розподілені транзакції. Додаток викликає метод JoinTransaction для включення в сеанс розподіленої транзакції. Після включення в розподілену транзакцію використовується інтерфейс ITransaction для завершення або скасування транзакції.

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

3.3 Стандартні провайдери OLE DB

Деякі виробники СУБД поставляють зі своїми продуктами драйвери OLE DB для доступу до баз даних. Майкрософт поставляє стандартні провайдери OLE DB у пакеті Microsoft Data Access Components (MDAC). Основні провайдери перераховані нижче:

Провайдер Microsoft OLE DB Provider for ODBC надає можливість одержати доступ до джерела даних ODBC. Але викоРистати дане рішення не рекомендується, тому що драйвери ODBC самі по собі не відрізняються швидкодією, а додатковий рівень швидкості роботи не додасть.

Провайдер Microsoft OLE DB Provider for Microsoft Indexing Service дозволяє одержати доступ (у режимі тільки для читання) до файлових систем й інтернет-ресурсів, проіндексованим за допомогою Microsoft Indexing Service.

Провайдер OLE DB Provider for Microsoft Directory Services дозволяє одержати доступ до ресурсів служби каталогів (Active Directory Services).

Провайдер Microsoft Jet4.0 OLE DB Provider використовується для роботи з базами даних MS Access.

Провайдер Microsoft OLE DB Simple Provider призначений для з'єднання із джерелами даних, підтримуючі тільки базисні можливості технології OLE DB.

Провайдер Microsoft OLE DB Provider for Internet Publishing призначений для забезпечення доступу до веб-серверів й одержання інформації від ресурсів, побудованих на базі Microsoft FrontPage й Microsoft Internet Information Server.

Провайдер Microsoft OLE DB Provider Oracle забезпечує з'єднання із сервером Oracle.

Провайдер Microsoft OLE DB Provider SQL Server забезпечує з'єднання із сервером Microsoft SQL Server.

Провайдер Microsoft OLE DB Provider for OLAP Services викоРистовується для забезпечення доступу до служб OLAP сервера MS SQL.

3.4 Високорівнева об'єктна надбудова ADO

Технологія Microsoft Active Data Objects (ADO) являє собою високорівневу об'єктну надбудову над OLE DB. Незважаючи на те що OLE DB надає повний набір інтерфейсів для маніпулювання даними, більшість розроблювачів не має потреби в низькорівневом контролі за процесом з'єднання з даними й керування ними, що надає OLE DB. У той же час розроблювачі часто використовують високорівневі мови, які не підтримують покажчики на функції й інші механізми C++. ADO може використовуватися для роботи з будь-якими провайдерами OLE DB. Схема наведена на Рис.3.3.

Рис. 3.3 Доступ до даних за допомогою ADO

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

3.4.1 Об'єктна модель ADO

Об'єктна модель ADO складається із сіми об'єктів, ієрархія яких показана на Рис.3.4.

Об'єкт Connection інкапсулюює у собі об'єкти OLE DB DataSource й Session. Він містить єдину сесію із джерелом даних. Об'єкт Connection визначає властивості з'єднання, визначає можливості локальних транзакцій, надає централізований об'єкт для одержання інформації про помилки Error і покажчики для викоРистання схем запитів.

Об'єкт Command інкапсулюює однойменний об'єкт OLE DB Command. Об'єкт використовується для виконання команд визначення й маніпуляції даними. Якщо як джерело даних виступає реляційна СУБД, об'єкт може виконати деякі SQL-оператори. Об'єкт Command дозволяє визначити параметри й установити порядок виконання запитів. Колекція об'єктів Parameter надає доступ до параметрів.

Рис. 3.4 Об'єктна модель ADO

Об'єкт Recordset інкапсулюює функціональність об'єкта OLE DB Rowset. Об'єкт Recordset є поточним інтерфейсом доступу до даних, що може бути отриманий у результаті обробки запиту або яким-небудь іншим способом. Об'єкт дозволяє контролювати використовуваний механізм блокувань, тип використовуваного курсору, число рядків, що повертають в одному пакеті, та ін. Об'єкт Recordset надає доступ до колекції об'єктів Field, які містять метаданні про властивості стовпців набору даних, таких як ім'я, тип, довжина й точність. Також утримуються поточні значення записів. Об'єкт Recordset також використовується для переміщення по наборі даних й їхньої модифікації.

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

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

3.4.2. Компонент TADOConnection

Компонент TADOConnection інкапсулюює об'єкт ADO Connection. Даний компонент призначений для з'єднання зі сховищами даних. З одним компонентом TADOConnection може бути пов'язано кілька компонентів TADOTableHTADOQuery.

З'єднання зі сховищем даних відкривається й закривається за допомогою властивості Connected або методу Open. Методу Open можна передати параметри UserID й Password, у яких зберігаються логін і пароль. Закрити з'єднання можна, викликавши метод Close.

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

Властивість CursorLocation визначає порядок функціонування курсорів. Якщо для властивості задати значення clUseServer, то обробка рядків буде вироблятися на сервері. Клієнтський додаток буде одержувати лише готові результати запитів. Якщо викоРистати значення clUseClient, то додатку пересилається весь набір даних, і курсор буде оброблятися на клієнті. Однак викоРистати клієнтський курсор для більших наборів даних невигідно. Серверний курсор є ледве більш повільним у порівнянні із клієнтським, але знімає обов'язок по обробці даних з клієнта й значно знижує навантаження на мережу.

Властивість IsolationLevel визначає рівень ізоляції транзакції. Цей рівень визначає, як транзакції взаємодіють із іншими з'єднаннями, що одночасно звертаються до таблиці, і визначає область видимості транзакції.

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

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

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

Значення ilReadUncommitted вказує, що незбережені зміни, внесені іншими транзакціями, є видимими.

Значення ilBrowse показує, що незбережені зміни, внесені іншими транзакціями, є видимими.

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

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

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

Значення iISerializable змушує сервер ізолювати транзакції друг від друга.

Властивість Provider містить ім'я провайдера, що у цей момент використовується об'єктом Connection. Права доступу, приписані з'єднанню, визначаються за допомогою властивості Mode. Значення властивості Mode вказує на те, які операції можуть бути виконані в даному з'єднанні. Це властивість прямо зв'язана із властивістю ConnectModeEnum об'єкта ADO Connection.

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

Значення cmRead вказує, що дане з'єднання може читати дані, але не змінювати їх.

Значення cmWrite дозволяє з'єднанню тільки змінювати дані, але не читати їх.

Значення cmReadWrite дозволяє з'єднанню читати й змінювати дані.

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

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

Значення cmShareExclusive забороняє іншим користувачам відкривати з'єднання.

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

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

Для одержання прямого доступу до об'єкта помилок ADO варто звернутися до властивості Errors. Властивість DataSets містить масив активних наборів даних, пов'язаних з компонентом. А властивість DataSetCount дозволяє одержати число активних наборів даних, пов'язаних з компонентом.

var

i:Integer:

begin

for i:=0 to (ADOConnection1.DataSetCount - 1) do

ListBox1.Items.Add(ADOConnection1.DataSets[i].Name)

Властивість State дозволяє довідатися, у якому стані перебуває набір даних. А властивість ConnectionString містить рядок, у якій вказується інформація, необхідна для установки з'єднання із джерелом даних.

До і після відкриття й закриття з'єднання виникають методи-оброблювачі подій AfterConnect, BeforeConnect, AfterDisconnect й BeforeDisconnect відповідно. Методи BeginTrans, CommitTrans й RollbackTrans ініціюють транзакцію, підтверджують її й роблять відкат транзакції відповідно. Ці методи варто помістити в блоки секцій try-finally й try-except.

3.4.3 Механізм з'єднання зі сховищем даних ADO

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

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

У цьому вікні можна настроїти з'єднання, використовуючи поле Use Connection String, або завантажити параметри з'єднання з файлу в розділі Use Data Link File.

Рис. 3.5 Вікно редактора рядка з'єднання

Для того щоб настроїти з'єднання з даним провайдером, необхідно нажати на кнопку Build. З'явиться вікно, зображене на Рис. 3.6, у якому буде опублікований список доступних провайдерів.

Рис. 3.6 Настроювання параметрів з'єднання

На вкладці Provider можна вибрати підходящий провайдер даних OLE DB для конкретного джерела даних. У списку провайдерів також пРисутні провайдери, призначені для доступу до конкретних служб операційної системи. На вкладці Connection необхідно вказати шлях до бази даних або сервер. Вкладка Advanced призначена для вказівки режиму доступу, аналогічно властивості Mode. Вкладка All призначена для більш “тонкого” настроювання специфічних властивостей провайдера. Для подальшої роботи потрібно вибрати провайдер MicrosoftJet4.0 OLE DB Provider. Потім потрібно перейти на вкладку Connection. З'явиться вікно, показане на Рис. 3.7

Рис. 3.7 Настроювання параметрів джерела даних

У вікні, що з'явилося, необхідно вказати шлях до бази даних. В полі Select or enter a database name потрібно вказати шлях до демонстраційної бази dbdemos.mdb.

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

3.4.4 Клас TCustomADODataSet

Клас TCustomADODataSet є базовим класом, на основі якого побудовані компоненти наборів даних ADO. Клас інкапсулює властивості, методи й повідомлення для роботи із провайдером даних через провайдер ADO. Додатки не можуть безпосередньо працювати з об'єктами класу TCustomADODataSet, але можуть взаємодіяти з компонентами, породженими від даного класу, такими як ADODataSet, TADOTable, TADOQuery або TADOStoredProc. Клас TCustomADODataSet є прямим нащадком класу TDataSet. Отже, він успадковує його методи й властивості й додає власні. Тому повторно розглядати успадковані можливості немає необхідності.

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

Властивість LockType дозволяє визначити блокування, що накладають на набір даних при його відкритті:

Значення ltUnspecified вказує, що тип блокування не визначений, тому вона буде встановлена джерелом даних.

Значення ltReadOnly використовується для відкриття набору даних у режимі “тільки для читання”.

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

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

Значення ltBatchOptimistic накладає блокування на пакет записів під час запису в сховище даних.

Для того щоб одержати відомості про стан набору даних, варто звернутися до властивості RecordsetState. Дана властивість прямо зв'язана із властивістю State об'єктів ADO Connection, Command й Recordset.

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

Для цієї властивості передбачений свій жорстко заданий набір значень:

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

Значення ctOpenForwardOnly задає використання односпрямованого курсору, що допускає переміщення по записах тільки вперед.

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

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

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

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

Після відновлення набору даних викликається метод-оброблювач події OnFetchComplete. Як параметр метод може одержувати об'єкт Error, що є посиланням на однойменний об'єкт ADO Error. Через параметр EventStatus набору даних повертається повідомлення, що сповіщає про успішне або неуспішне виконання даної операції.

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

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

Для одержання розміру запису варто звернутися до властивості RecordSize. А властивість BlockReadSize дозволяє визначити число записів, що поміщають у буфер при пакетній передачі. За замовчуванням властивість має нульове значення і є неактивним. Якщо значення властивості містить ненульове значення, то набір даних переводиться в режим dsBlockRead.

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

Значення rsOK вказує, що запис був успішно збережений.

Значення rsNew свідчить, що запис був успішно доданий.

Значення rsModified вказує, що запис був змінений.

Значення rsDeleted вказує, що запис був вилучений.

Значення rsUnmodified вказує, що запис не був змінений.

Значення rsInvalid вказує, що запис не був збережений.

Значення rsMultipleChanges сигналізує, що запис не може бути збережений через множинні зміни.

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

Значення rsCanceled вказує, що операція із записом була скасована.

Значення rsCantRelease вказує, що запис був заблокований.

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

Значення rsIntegrityViolation вказує на порушення посилальної цілісності.

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

Значення rsObjectOpen вказує на конфлікт із відкритим об'єктом сховища даних.

Значення rsOutOfMemory свідчить про недолік оперативної пам'яті.

Значення rsPermissionDenied вказує, що даний користувач не має прав на здійснення даної операції.

Значення rsSchemaViolation вказує на порушення структури бази даних.

Значення rsDBDeleted вказує, що запис був раніше вилучений.

Метод UpdateStatus повертає поточний стан запису. Цей метод сигналізує про зміни в кеші, якщо вони відбулися. Значення, що повертають даним методом, наведені в списку:

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

Значення usModified свідчить про те, що запис містить незбережені зміни.

Значення usInserted вказує, що поточний запис був доданий у таблицю, але не був збережений в сховище даних.

Значення usDeleted вказує, що запис був вилучений, але зміни не були збережені.

Метод-оброблювач події OnWiilChangeRecord викликається перед внесенням змін у запис набору даних. А подія OnRecordChangeComplete ініціюється відразу після внесення змін. Параметр RecordCount методу, що обробляє ця подія, містить число змінених записів.

Властивість CommandType визначає тип виконуваної команди. У ньому визначається тип команди, що втримується у властивості CommandText. Значення властивості CommandType повинне узгоджуватися зі значенням властивості CommandText. Наприклад, якщо властивість CommandText містить назву таблиці, то властивість CommandType повинна мати значення cmdTable або cmdTableDirect. За замовчуванням властивості CommandType привласнюється значення cmdUnknown. Якщо тип команди визначений на етапі розробки, то істотно заощаджується час, необхідне для визначення типу команди по її значенню. Дана властивість прямо з'єднується із властивістю ADO CommandTypeEnum. Значення цієї властивості зазначені в списку:

Значення cmdUnknown вказує, що тип команди не визначений.

Значення cmdText вказує, що виконується текстова команда, що інтерпретується джерелом даних (SQL-запит або збережена процедура).

Значення cmdTable вказує, що дана команда повертає набір даних зі сховища по імені таблиці.

Значення cmdStoredProc вказує, що використовується збережена процедура.

Значення cmdFile вказує, що застосовується команда одержання набору даних, збережених у файлі

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

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

Для настроювання параметрів процесу виконання команд варто звернутися до властивості ExecuteOptions. Дана властивість може приймати чотири значення:

Значення eoAsyncExecute вказує, що команди виконуються асинхронно.

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

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

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

Під час розробки властивість Parameters викоРистовується для доступу до параметрів SQL-запитів, використовуваних компонентами ADO, інкапсулюючими набори даних. Властивості Parameters можна використати для установки й одержання значень параметрів або для установки й перевірки їхніх атрибутів. Властивість TParameters містить колекцію об'єктів Parameters.

До будь-якого параметра, що зберігається в даному екземплярі класу TParameters, можна звернутися по його індексу через властивість Items. А значення параметра можна одержати за допомогою властивості ParamValues, що повертає варіантний масив, що містить значення параметрів. Ім'я параметра передається через константу ParamName. Якщо необхідно одержати доступ більш ніж до одного параметра, то їхні назви розділяються крапкою з комою.

До параметра можна також звернутися по його імені, використовуючи метод ParamByName. Ім'я параметра задається параметром Value.

Для додавання параметра в колекцію необхідно викоРистати метод СгеаteParameter. Ім'я параметра втримується у властивості Name. А тип даних параметра задається властивістю DataType. Тип даних параметра пов'язаний з полем, з яким він взаємодіє. У цілочисельній властивості Size вказується розмір значення параметра строкового типу.

Вид параметра визначається властивістю TParameterDirection. Значення цього списку зазначені далі:

Значення pdUnknown застосовується, коли тип параметра не був заданий.

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

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

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

Значення pdReturnValue вказує, що даний параметр повертає значення.

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

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

Значення psNullable вказує, що значення параметра може бути порожнім.

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

Також параметру можна привласнити значення, завантаживши їх з файлу або з потоку методами LoadFromFile й LoadFromStream відповідно.

Для одержання прямого доступу до об'єкта ADO Parameter можна звернутися до властивості ParameterObject. Звичайно, звертатися прямо до цього об'єкта не рекомендується, але в деяких випадках клас TParameter не надає потрібні властивості або методи.

Клас TCustomADODataSet підтримує крім звичайної фільтрації, успадкованої від класу TDataSet, фільтрацію записів по їхньому стану. Властивість FilterGroup задає умову фільтрації записів, ґрунтуючись на їхньому стані. Можливі значення властивості зазначені в списку:

Значення fgUnassigned показує, що умови фільтрації не задані.

Значення fgNone вказує, що умови фільтрації знімаються. Всі записи стають видимими. ВикоРистання цього значення рівноцінно пРисвоюванню властивості Filtered значення False.

Значення fgPendingRecords показує, що відображаються ті записи, які були змінені, але не були збережені в сховище даних (UpdateBatch), або ті, зміни яких були скасовані (CancelBatch).

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

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

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

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

Для того щоб фільтрація могла бути виконана, необхідно властивості LockType привласнити значення ltBatchOptimistic і включити її, привласнивши властивості Filter значення True.

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

Значення soFirstEQ вказує, що курсор установлюється на перший знайдений запис. Якщо запис не знайдений, то курсор переводиться на останній запис набору.

Значення soLastEQ вказує, що курсор установлюється на останній знайдений запис. Якщо запис не знайдений, то курсор переводиться на останній запис набору.

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

Значення soAfter вказує, що курсор встановлюється за знайденим записом.

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

Значення soBefore вказує, що курсор встановлюється перед знайденим записом.

Для того щоб використати даний метод, необхідно виконати кілька умов:

Індекс, по якому буде робитися пошук, повинен бути обраний у властивості IndexName.

Властивість CommandType повинне мати значення cmdTableDirect(для TADOTable властивості TableDirect необхідно привласнити значення True).

Властивість CursorLocation повинне мати значення clUseServer.

Властивість CursorType повинне мати значення ctKeySet.

Дані, що зберігаються в кеші набору даних, можна зберегти у файл і завантажити їх з файлу, викоРистовуючи методи SaveToFile й LoadFromFile відповідно. Параметр FiIeName містить ім'я файлу, з яким будуть оперувати методи. У параметрі Format вказується формат, у якому буде збережений набір даних. За замовчуванням викоРистовується значення pfADTG.

3.4.5 Компонент TADODataSet

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

Використовуючи властивість CommandText, можна вказати текст команди, за допомогою якої будуть отримані дані. Це може бути SQL-запит, назва таблиці або назва збереженої процедури. А у властивості CommandType вказується тип команди. Даний компонент не може виконувати SQL-оператори, що не повертають результуючі набори (оператори DELETE, INSERT й UPDATE). З'єднання з базою даних задається властивостями Connection або ConnectionString. Компонент зв'язується з компонентами відображення даних стандартним способом.

3.4.6 Компонент TADOTable

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

Ім'я таблиці вказується у властивості TableName. Властивість TableDirect вказує, яким образом набір даних зв'язується зі сховищем даних. Тому що не всі провайдери підтримують пряме з'єднання з набором даних, то в деяких випадках для зв'язку зі сховищем даних доводиться викоРистати SQL-оператори. При установці властивості значення True компонент викоРистовує фонові SQL-запити для доступу до даних.

Використовуючи властивість Readonly, можна встановити обмеження “тільки для читання” на дану таблицю, заборонивши, таким чином, можливість змінювати дані. У властивості MasterSource вказується компонент TDataSource, викоРистовуваний для створення відносини посилальної цілісності Master-Detail.

Метод GetIndexNames повертає список індексів, доступних компоненту як список.

3.4.7 Компонент TADOQuery

Компонент TADOQuery дозволяє виконувати SQL-запити при роботі з даними через ADO. З'єднання зі сховищем даних здійснюється стандартним методом. Текст запиту втримується у властивості SQL.

Параметри запиту втримуються у властивості Parameters. У випадку, якщо компонент повертає набір даних, його варто відкривати методом Open або привласнити властивості Active значення True. Якщо запит не повинен повертати набір даних (оператори INSERT, UPDATE, DELETE й CREATE TABLE), то запит варто виконувати викликом методу ExecSQL. Метод повертає число оброблених запитом записів.

Властивість RowsAffected містить число записів, які торкнув останній запит, що виконувався.

3.4.8 Компонент TADOStoredProc

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

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

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

У випадку, якщо збережена процедура буде викликатися безліч разів з тими самими аргументами, рекомендується заздалегідь підготувати її до виконання. СУБД розмістить її в оперативній пам'яті. Для цього властивості Prepared варто привласнити значення True.

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

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

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

Розроблена гнучка система автоматизації обліку методичних матеріалів була реалізована з використанням системи програмування Delphi 2006 Explorer та технології доступу до бази даних ADO. В ході реалізації проекту також використовувався безкоштовний пакет альтернативних компонентів Development Express, призначений для швидкого проектування інтерфейсу СКБД.

Склад розробленої системи:

IVC.exe - виконуємий файл розробленої системи;

Met_baza.mdb - файл бази даних MS Access, який може знаходитись у будь якому мережевому каталозі;

Шаблон.dot - шаблон документу для створення каталогу методичних матеріалів;

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

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

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

робота в середовищі операційних систем Windows 2000/XP/Vista/7;Размещено на http://www.allbest.ru/

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

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

IBM-сумісний комп'ютер, не нижче Pentium III, RAM-512Mb, SVGA-монітор 17 дюймів, вільний простір на жорсткому диску біля 3 Мб.

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

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

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

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

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

Рис. 4.2 Зовнішній вигляд головного вікна системи

Як вже було зазначено вище, інтерфейс системи був спроектований за допомогою пакету альтернативних компонентів Development Express. Однією з особливостей використання цього пакету є можливість настроювати зовнішній вигляд панелей інструментів (додавати або видаляти кнопки (Рис. 4.4), переміщувати панелі). Головне вікно системи має наступні панелі:

Головна

Навігація

Рис. 4.3 Зовнішній вигляд панелей інструментів

Рис. 4.4 Настроювання зовнішнього вигляду панелей інструментів

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

Рис. 4.5 Вікно довідника ВНЗ, до яких належать методичні матеріали

За допомогою кнопки «Отрыть БД» користувач системи має можливість змінити шлях до розташування фалу бази даних. Звернемо увагу на те, що файл бази даних може бути розташований на будь - якій ЕОМ, що підключена до локальної мережі КМФ НМетАУ. При відкритті файлів використовується фільтр - файли формату mdb. Діалогове вікно відкриття файлу наведено на Рис. 4.7.

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

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

Реєстрація методичних матеріалів відбувається наступним чином. Спочатку необхідно ввести номер „методички” (при цьому, якщо вона друкується частинами, використовують додатковий префікс, наприклад - 1777-1, 1777-2 ...). Потім вводиться основна інформація (дисципліна, автори, примітки). Тип методичного матеріалу обирається із випадаючого списку (Рис. 4.8), що формується на основі довідника типів методичних матеріалів.

Рис. 4.8 Випадаючий список типів методичних матеріалів

Аналогічним чином обираємо із списку ВНЗ:

Рис. 4.9 Випадаючий список ВНЗ

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

Рис. 4.10 Фрагмент робочого вікна у режимі визначення шляху до файлу

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

Рис. 4.11 Вікно відкриття файлу документа

Дата створення файлу визначається автоматично та буде занесена до бази даних. Якщо є активним режим „Определить количество страниц”, тобто натиснута відповідна кнопка на панелі інструментів (див. Рис. 4.3), в базу даних також буде занесена необхідна для друку кількість аркушів.

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

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

Рис. 4.12 Фільтрація по автору методичного видання

Якщо в наведеному списку вибрати значення «Условие», на екрані з'явиться вікно (Рис. 4.13), за допомогою якого можна здійснити швидкий пошук необхідного документу. При цьому можна використовувати символи заміни для пошуку по частковому збігу.

Рис. 4.13 Вікно визначення параметрів пошуку

Наприклад, якщо ми введемо умови пошуку, які наведені на Рис. 4.13, то отримаємо наступний результат:

Рис. 4.14 Результати пошуку

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

Рис. 4.15 Зовнішній вигляд панелі фільтрації

Кнопка „Настройка” призначена для побудови складного фільтру з багатьма умовами. При цьому створений фільтр можна зберегти у зовнішньому файлі та завантажити потім при необхідності.

Рис. 4.16 Вікно побудови складного фільтра

За допомогою кнопки «Экспорт» можна створити каталог на основі шаблону, який зберігається в тому ж каталозі, що і виконавчий файл системи. Приклад створеного каталогу наведений в Додатку А.

4.4 Програмна реалізація системи

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

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

Таблиця “main” є головною і містить всю необхідну інформацію про методичні матеріали. Таблиця “type” є довідником до головної таблиці і містить інформацію про типи документів. Таблиця “sp_vuz” є довідником до головної таблиці і містить інформацію про ВНЗ, до яких відносяться методичні матеріали видавничого центру.

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

Рис. 4.18 Структура таблиці “main” - головної таблиці, що містить інформацію про методичні матеріали

Рис. 4.19 Структура таблиці “type” - довідника типів документів

Рис. 4.20 Структура таблиці “sp_vuz” - таблиці для зберігання інформації про ВНЗ, до якого належить видання

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

Рис. 4.21 Вікно DataModule2

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

Рис. 4.22 Вікно настройки параметрів компоненту dxBarManager

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

Рис. 4.23 Вікно, що дозволяє редагувати категорії та набір кнопок

Інформація про розташування файла бази даних зберігається в ini-файлі і зчитується в глобальну змінну path за допомогою процедур, що містяться в модулі inifiles. При створенні головної форми системи ini-файл відкривається для зчитування даних. Якщо він відсутній, за замовченням система здійснює пошук файлу бази в поточному каталозі.

procedure Tmain.FormCreate(Sender: TObject);

begin

F := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'path.ini'); //створення ini-файлу (пошук здійснюється в поточному каталозі)

path:=f.ReadString('path','baza','.\met_baza.mdb');//заносимо в змінну path повний шлях до файлу бази даних

DataModule2.ADOConnection1.Connected:=false;

//змінюємо параметри строки з'єднання компоненту ADOConnection1

DataModule2.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+path+';Mode=Share Deny None;';

DataModule2.ADOConnection1.ConnectionString:=DataModule2.ADOConnection1.ConnectionString+' Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";';

...

//підключаємось до файлу бази даних

DataModule2.ADOConnection1.Connected:=true;

//активізуємо робочі таблиці бази даних

DataModule2.ADOTable1.Active:=true;

DataModule2.ADOTable2.Active:=true;

DataModule2.ADOTable3.Active:=true;

F.free ;

end;

В будь який момент роботи системи коРистувач має можливість змінити шлях до робочого файлу бази даних. Це здійснюється за допомогою наступного коду:

procedure Tmain.dxBarButton4Click(Sender: TObject);

begin

with OpenDialog2 do //викоРистовуємо OpenDialog2 компонент OpenDialog2 для реалізації діалогу про відкриття файл. Поточним фільтром компоненту є „База даних” - файли формату *.mdb.

if Execute then

path:=filename;

DataModule2.ADOConnection1.Connected:=false;

DataModule2.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+path+';Mode=Share Deny None;';

...

DataModule2.ADOConnection1.Connected:=true;

DataModule2.ADOTable1.Active:=true;

DataModule2.ADOTable2.Active:=true;

DataModule2.ADOTable3.Active:=true;

end;

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

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

begin

F := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'path.ini');//створення ini-файлу

f.WriteString('path','baza',path); //запис текстових даних в ini-файл

F.free

end;

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

function GetFileDateTime(FileName: string): TDateTime;

var

intFileAge: LongInt;

begin

intFileAge := FileAge(FileName);

if intFileAge = -1 then

Result := 0

else

Result := FileDateToDateTime(intFileAge)

end;

Для цього використовується API-функція FileAge, що міститься в модулі shellapi.

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

procedure Tmain.cxGrid1DBTableView1DBColumn9PropertiesButtonClick(

Sender: TObject; AButtonIndex: Integer);

var s:string;

a:integer;

PCount:longint;

begin

with OpenDialog1 do //використовуємо компонент-діалог з фільтром „документи Word” для відкриття файлу методичних вказівок

if Execute then

begin

s:=ExtractFilePath(filename); //виділяємо шлях до каталогу з повного імені відкритого файлу

DataModule2.ADOTable1.Edit; //переводимо таблицю в режим редагування

DataModule2.ADOTable1path.AsString:=s; //у відповідне поле бази даних заносимо інформацію про шлях

if dxBarButton2.Down then //якщо активний режим автоматичного визначення кількості сторінок

begin

w:=createoleobject('word.application'); //створюємо об'єкт-посилання на MS Word

w.documents.add(filename); //відкриваємо обраний документ без візуалізації його на екрані

PCount:=w.activedocument.ComputeStatistics($00000002); //визначаємо кількість сторінок в документі

pcount:=pcount div 4 +1; //визначаємо згідно формули кількість аркушів, що необхідні для друку

DataModule2.ADOTable1prn.AsInteger:=PCount; //зберігаємо визначену кількість в відповідному полі бази даних

w.activedocument.close(false); //закриваємо документ без запиту на збереження змін

w.quit;//закриваємо MS Word

W:=UnAssigned; //звільняємо пам'ять

end;

DataModule2.ADOTable1date.AsDateTime:=GetFileDateTime(filename);

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

DataModule2.ADOTable1.Post; //вносимо зміни в файл бази даних

end;

end;

Розглянемо процес створення каталогу методичних видань на основі шаблону 'Шаблон.dot', що міститься в поточному каталозі системи.

procedure Tmain.dxBarButton5Click(Sender: TObject);

var i,j:integer;

s:string;

begin

w:=createoleobject('word.application');

w.documents.add(ExtractFilePath(ParamStr(0)) + 'Шаблон.dot'); //створюємо документ MS Word на основі вказаного шаблону

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

table:= w.activedocument.tables.item(1); //створюємо посилання на таблицю, міститься в документі

//Далі ми перебираємо усі записи, що містяться в наборі (і - номер рядка, j - номер стовпчика

for i:=0 to cxGrid1DBTableView1.DataController.RecordCount-1 do

begin

//додаємо до таблиці Word рядок

table.rows.add;

//перебираємо в циклі усі стовпчики

for j:=0 to cxGrid1DBTableView1.ColumnCount-1

do begin

case j of //в залежності від номеру стовпчика здійснюються відповідні операції

0: //перший стовпчик - номер методичних вказівок

if cxGrid1DBTableView1.DataController.Values[i,j]<>null //перевірка на відсутність даних в комірці

then

//якщо комірка не є порожньою

s:=inttostr(cxGrid1DBTableView1.DataController.Values[i,j])//перетворення типів - чисельне значення, що міститься в комірці перетворюється в строкове


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

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