КУРСОВА РОБОТА

на тему:

База даних студентів факультету КСіТ

Зміст

1. Вступ. Постановка задачі

2. Теоретична частина

2.1 Огляд засобів Delphi, що використовуються

2.2 Об’єкти використані в курсовій роботі

3. Конструкторська частина

3.1 Схема взаємозв’язку проекту

3.2 Алгоритм програми

Висновок

Література

Додаток А

Додаток Б

1. Вступ. Постановка задачі

Поставлена ціль: створити програму бази даних студентів в середовищі
програмування Delphi 7. Створити панель пошуку по 4-м параметрам
(прізвище, номер студентського квитка, номер залікової книжки, дата
народження). Забезпечити захист інформації від користувачів які не
наділені правами редагування бази даних. Доступно розташувати інформацію
про студента з можливістю відображати і приховувати детальну інформацію.
Надати можливість завантажувати в базу фотографію студента.

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

2. Теоретична частина

2.1 Огляд засобів Delphi, що використовуються

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

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

Як відомо, бази даних обслуговуються спеціальними програмами – системами
керування базами даних (СУБД), які діляться на локальні, переважно
однокористувальницькі, призначені для настільних програм, і серверні –
мережні (часто вилучені), багатокористувальницькі, що функціонують на
виділених комп’ютерах – серверах. Головний критерій такої класифікації –
обсяг бази даних і середнє навантаження на СУБД.

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

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

Механізм одержання й відправлення даних забезпечує з’єднання із джерелом
даних (часто опосередковано). Він повинен «знати», куди йому звертатися
і який протокол обміну використати для забезпечення подвійного
направлення потоку даних.

Механізм внутрішнього подання даних є ядром програми бази даних. Він
забезпечує зберігання отриманих даних у програмі й надає їх по запиту
інших частин програми.

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

Бізнес–логіка програми являє собою набір реалізованих у програмі
алгоритмів обробки даних.

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

Джерело даних являє собою сховище даних (саму базу даних) і СУБД, що
керує даними, що забезпечують цілісність і несуперечність даних.

Далі докладно зупинюсь на способах розробки програми бази даних в
Delphi.

В Delphi 7 реалізована досить велика кількість різноманітних технологій
доступу до даних . Але послідовність операцій при конструюванні програм
баз даних залишається майже однаковою. І в роботі використаються по суті
ті самі компоненти, дороблені для застосування з тією або іншою
технологією доступу до даних.

Розглянемо наступні питання:

структура програми бази даних в Delphi;

базові компоненти, використовувані при розробці програм баз даних, і
їхній взаємозв’язок;

поняття набору даних і його участь в основних механізмах програми бази
даних;

модуль даних;

програмна реалізація частин програми бази даних

Структура програми бази даних

У Репозитарію Delphi відсутній окремий шаблон для програми бази даних.
Тому, як і будь–яка інша програма в Delphi, програма бази даних
починається зі звичайної форми. Безумовно, це виправданий підхід, тому
що програма бази даних має користувальницький інтерфейс. І цей інтерфейс
створюється з використанням стандартних і спеціалізованих візуальних
компонентів на звичайних формах.

Візуальні компоненти відображення даних розташовані на сторінці Data
Controls Палітри компонентів. У більшості вони являють собою модифікації
стандартних елементів керування, пристосованих для роботи з набором
даних.

Програма може містити довільне число форм і використати будь–який
інтерфейс (MDI або SDI). Звичайно одна форма відповідає за виконання
групи однорідних операцій, об’єднаних загальним призначенням.

В основі будь–якої програми бази даних лежать набори даних, які являють
собою групи записів (їх зручно представити у вигляді таблиць у пам’яті),
переданих з бази даних у програма для перегляду й редагування. Кожен
набір даних інкапсульований у спеціальному компоненті доступу до даних.
В VCL Delphi реалізований набір базових класів, що підтримують
функціональність наборів даних, і практично ідентичні по складу наборів
дочірніх компонентів для технологій доступу до даних. Їхній загальний
предок — клас TDataSet.

Для забезпечення зв’язку набору даних з візуальними компонентами
відображення даних використається спеціальний компонент TDataSource.
Його роль полягає в керуванні потоками даних між набором даних і
пов’язаними з ним компонентами відображення даних. Цей компонент
забезпечує передачу даних у візуальні компоненти й повернення
результатів редагування в набір даних, відповідає за зміну стану
візуальних компонентів при зміні стану набору даних, передає сигнали
керування від користувача (візуальних компонентів) у набір даних.
Компонент TDataSource розташований на сторінці Data Access Палітри
компонентів.

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

 компоненти, інкапсулюючі набір даних (нащадки класу TDataSet);

 компоненти TDataSource;

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

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

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

Ще одна функція компонента TDataSource полягає в синхронізації
поводження компонентів відображення даних зі станом набору даних.
Наприклад, якщо набір даних не активний, то компонент TDataSource
забезпечує видалення даних з компонентів відображення даних й їхній
переклад у неактивний стан. Або, якщо набір даних працює в режимі
«тільки для читання», то компонент TDataSource зобов’язаний передати в
компоненти відображення даних заборона на зміну даних.

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

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

Рис. 1.1. Механізм доступу до бази даних

Користувач за допомогою компонентів відображення даних може переглядати
й редагувати дані. Змінені значення відразу ж передаються з елемента
керування в набір даних за допомогою компонента TDataSource. Потім зміни
можуть бути передані в базу даних або скасовані.

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

Модуль даних

Для розміщення компонентів доступу до даних у програмі бази даних бажано
використати спеціальну «форму» — модуль даних (клас TDataModule).
Зверніть увагу, що модуль даних не має нічого спільного зі звичайною
формою програми, адже його безпосереднім предком є клас TComponent. У
модулі даних можна розміщати тільки не візуальні компоненти. Модуль
даних доступний розроблювачеві, як і будь–який інший модуль проекту, на
етапі розробки. Користувач програми не може побачити модуль даних під
час виконання.

Для створення модуля даних можна скористатися Репозитарієм об’єктів або
головним меню Delphi. Значок модуля даних Data Module розташований на
сторінці New.

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

Для створення структури (моделі, діаграми) даних, з якою працює
програма, можна скористатися можливостями, які надає сторінка Diagram
Редактори коду. Будь-який елемент із ієрархічного дерева компонентів
модуля даних можна перенести на сторінку діаграми й задати зв’язок між
ними.

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

Для створення модуля даних можна скористатися Репозитарієм об’єктів або
головним меню Delphi. Значок модуля даних Data Module розташований на
сторінці New.

Для обігу компонентів доступу до даних, розташованим у модулі даних, з
інших модулів проекту необхідно включити ім’я модуля в секцію uses:

unit InterfaceModule;

 implementation

uses DataModule; 

DataModule.Tablel.Open;

Рис. 1.2. Модуль даних

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

Підключення набору даних

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

Для створення нового проекту досить вибрати команду New Application з
меню File або скористатися Репозиторием об’єктів, що відкривається
командою New з меню File.

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

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

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

3. Перейменувати компонент. Це не обов’язкова дія. Проте, у будь–яких
випадках бажано привласнювати компонентам доступу до даних осмислені
імена, що відповідають назвам підключених таблиць. Звичайна назва
компонента копіює назву таблиці (наприклад, Orders або OrdTable, або
tblOrders).

4. Активізувати зв’язок між компонентом і таблицею БД. Для цього
використається властивість Active. Якщо в Інспекторі об’єктів
привласнити цій властивості значення True, то зв’язок активізується. Цю
операцію можна виконати й у вихідному коді програми. Також існує метод
open, що відкриває набір даних, і метод close, що закриває його.

Примітка 

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

Настройка компонента TDataSource

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

Для настроювання властивостей компонента необхідно виконати наступні
дії.

1. Зв’язати набір даних і компонент TDataSource. Для цього
використовується властивість DataSet компонента TDataSource, доступна
через Інспектор об’єктів. Це покажчик на екземпляр компонента доступу до
даних. У списку цієї властивості в Інспекторі об’єктів перераховані всі
доступні компоненти наборів даних.

2. Перейменувати компонент. Це не обов’язкова дія. Проте бажано
привласнювати компонентам осмислені імена, що відповідають назвам
зв’язаних наборів даних. Звичайна назва компонента комбінує ім’я набору
даних (наприклад OrdSource або dsOrders).

Примітка

Компонент TDataSource можна підключити не тільки до набору даних з тієї
ж форми, але й будь–якої іншої, модуль якої зазначений у секції uses.

Компонент TDataSource має ряд корисних властивостей і методів. Отже,
зв’язування з компонентом набору даних виконує властивість

property DataSet: TDataSet;

а визначити поточний стан набору даних можна, використавши властивість

type TDataSetState = (dslnactive, dsBrowse, dsEdit, dslnsert, dsSetKey,
dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
dsInternalCalc); property State: TDataSetState;

За допомогою властивості

property Enabled: Boolean;

можна включити або відключити всі зв’язані візуальні компоненти. При
значенні False жоден зв’язаний компонент відображення даних не буде
працювати.

Властивість

property AutoEdit: Boolean;

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

Аналогічно, метод

procedure Edit;

переводить зв’язаний набір даних у режим редагування.

Метод

function IsLinkedTo(DataSet: TDataSet): Boolean;

повертає значення True, якщо компонент, зазначений у параметрі DataSet,
дійсно пов’язаний з даним компонентом TDataSource.

Метод–оброблювач

type TDataChangeEvent = procedure(Sender: TObject; Field: TField)

of object;

property OnDataChange: TDataChangeEvent;

викликається при редагуванні даних в одному зі зв’язаних візуальних
компонентів.

Метод–оброблювач

property OnUpdateData: TNotifyEvent;

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

property OnStateChange: TNotifyEvent;

викликається при зміні стану зв’язаного набору даних

Відображення даних

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

Компоненти відображення даних повинні бути пов’язані з компонентом
TDataSource і через нього з компонентом набору даних. Для цього
використовується їхня властивість DataSource. Вона присутня у всіх
компонентах відображення даних.

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

Особливе значення для програм баз даних грає компонент TDBGrid, що
представляє дані у вигляді таблиці. У стовпцях таблиці розміщаються поля
набору даних, а в рядках – запису. Для цього компонента не має змісту
визначати конкретне поле.

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

1. Зв’язати компонент відображення даних і компонент TDataSource. Для
цього використовується властивість Datasource, що повинна вказувати на
екземпляр необхідного компонента TDataSource. Один компонент
відображення даних можна зв’язати тільки з одним компонентом
TDataSource. Необхідний компонент можна вибрати в списку властивостей в
Інспекторі об’єктів.

2. Задати поле даних. Для цього використовується властивість DataField
типу TFields. У ньому необхідно вказати ім’я поля зв’язаного набору
даних. Після завдання властивості Datasource поле можна вибрати зі
списку. Цей етап застосовується тільки для компонентів, що відображають
єдине поле.

Окреме місце серед компонентів відображення даних займає компонент
TDBNavigator. Він призначений для переміщення по записах набору даних.

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

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

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

 не візуальні компоненти набору даних;

 не візуальні компоненти TDataSource;

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

2.2 Об’єкти використані в курсовій роботі

Класифікація компонентів відображення даних

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

Більшість компонентів призначені для роботи з окремим полем, тобто при
переміщенні по записах набору даних такі компоненти показують поточні
значення тільки одного поля. Для з’єднання з набором даних через
компонент TDataSource призначена властивість DataSource. Поле задається
властивістю DataField.

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

Найбільш часто в практиці програмування використовуються компоненти
TDBGrid, TDBEdit И TDBNavigator.

Рис. 1.7 Класифікація компонентів відображення даних

Для подання й редагування інформації, що міститься в полях типу Memo,
використовуються спеціальні компоненти TDBMemo й TDBRichEdit.

Для перегляду (без редагування) зображень призначений компонент
TDBImage.

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

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

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

Таблиця 1.1 Загальні властивості компонентів відображення даних

Властивість Опис

property DataField: string; Поле пов’язане з компонентом набору даних

property DataSource: TDataSource; Компонент, що зв’язує з компонентом
TDataSource

property Field: Tfield; Забезпечує доступ до класу TField, що
відповідає полю набору даних, заданою властивістю DataField

property Readonly: Boolean; Керує роботою режиму «тільки для читання»

Навігація по набору даних

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

Але що робити, якщо на формі перебувають тільки компоненти, що
відображають одне поле тільки поточного запису набору даних (TDBEdit,
TDBCombовох і т.д.)? Очевидно, що в цьому випадку на формі повинні бути
розташовані додаткові елементи керування, відповідальні за переміщення
по записах.

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

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

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

Рис. 1.8 Призначення кнопок компонента TDBNavigator

Компонент TDBNavigator містить набір кнопок, кожна з яких відповідає за
виконання однієї операції над набором даних. Усього є 10 кнопок,
розроблювач може залишити в наборі будь–яку кількість кнопок у
будь–якому сполученні. Видимістю кнопок керує властивість
visibleButtons:

type

TNavigateBtn = (nbFirst, nbPrior, nbNext, nbLast, nblnsert, nbDelete, 

nbEdit, nbPost, nbCancel, nbRefresh);

TButtonSet = set of TNavigateBtn; 

property VisibieButtons: TButtonSet;

Кожен елемент типу TNavigateBtn представляє одну кнопку, їхнє
призначення описується нижче:

nbFirst – переміщення на перший запис набору даних; 

nbPrior – переміщення на попередній запис набору даних;

nbNext – переміщення на наступний запис набору даних;

nbLast – переміщення на останній запис набору даних; 

nblnsert – вставка нового запису в поточній позиції набору даних;

nbDelete – видалення поточного запису, курсор переводиться на наступний
запис;

nbEdit – набір даних переводиться в режим редагування;

nbPost – у базу даних переносяться всі зміни в поточному записі;

nbcancel – всі зміни в поточному записі скасовуються;

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

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

Натискання будь–якої кнопки можна створити програмно за допомогою методу
BtnClick.

Якщо буде потреба виконання додаткових дій при натискуванні на будь–якій
кнопці можна скористатися оброблювачами подій BeforeAction й Onclick, у
яких параметр Button визначає натиснуту кнопку. Властивості й методи
компонента TDBNavigator представлені в табл. 1.2.

Таблиця 1.2 Властивості й методи компонента TDBNavigator

Оголошення Тип Опис

Властивості

property ConfirmDelete: Boolean; Pb Включає або відключає підтвердження
видалення запису

property Hints: TStrings; Pb Містить список підказок для кожної кнопки

property Flat: Boolean; Pb Визначає зовнішній вигляд кнопок компонента

type TNavigateBtn = (nbFirst, nbPrior, nbNext, nbLast, nblnsert,
nbDelete, nbEdit, nbPost, nbCancel, nbRefresh);

TButtonSet = set of TNavigateBtn ;

property VisibleButtons: TButtonSet; Pb Список видимих кнопок

Методи

procedure BtnClick (Index:  TNavigateBtn) ; Pu створює натискання на
кнопці index

procedure SetBounds (ALeft,  ATop, AWidth, AHeight:  Integer) ;  Pu
Задає положення (параметри ALeft, АТор) і розмір компонента (параметри
AWidth, AHeight)

Методи–оброблювачі подій

ENavClick = procedure (Sender: TObject; Button: TNavigateBtn) of object;
Iproperty BeforeAction:  ENavClick;  Pb  Виконується при натисканні на
кнопці Button перед виконанням операції, пов’язаної із кнопкою

ENavClick = procedure  (Sender: TObject; Button:  TNavigateBtn) of
object; 

property OnClick:  ENavClick; Pb Виконується при натисканні на кнопці
Button після виконання операції, пов’язаної із кнопкою

 

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

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

Залежно від типу даного поля можуть використовувати різні компоненти.
Для більшості стандартних полів використовуються компоненти TDBText,
TDBEdit, TDBComboBox, TDBListBox.

Дані у форматі Memo відображаються компонентами TDBMemo й TDBRichEdit.
Для показу зображень призначений компонент TDBImage.

Компонент TDBText

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

Безпосереднім предком компонента є клас TCustomLabel, тому він дуже
схожий на компонент TLabel.

При використанні компонента варто звернути увагу на можливу довжину
відображуваних даних. Для запобігання обрізання тексту можна використати
властивості AutoSize И Wordwrap.

Компонент TDBEdit

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

Прямий предок компонента – клас TCustomMaskEdit, що також є прямим
предком компонента TEdit.

Компонент може здійснювати перевірку даних, що редагують, по заданій для
поля масці. Безпосередньо для редактора задати маску не можна, тому що
утримуючу маску властивість EditMask у класі TCustomMaskEdit є
захищеним, а в TDBEdit не перекрито. Проте механізм контролю повністю
успадкований. Саму ж маску можна задати в пов’язаному з редактором полі.
Об’єкт TField має власну властивість EditMask, що і використовується при
перевірці даних у редакторі.

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

У компоненті можна використати буфер обміну. Це робиться засобами
операційної системи користувачем або програмно за допомогою методів
CopyToClipboard, CutToClipboard, PasteFromClipboard.

Компонент TDBComboBox

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

Компонент може працювати в п’ятьох різних стилях, які визначаються
властивістю Style.

Спеціальних методів компонент не містить.

Компонент TDBImage

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

Редагувати зображення можна тільки в якому–небудь графічному редакторі,
переносячи вихідне й змінене зображення за допомогою буфера обміну. Це
робиться засобами операційної системи користувачем або програмно за
допомогою методів CopyToClipboard, CutToClipboard, PasteFromClipboard.

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

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

Властивість AutoDisplay дозволяє керувати процесом завантаження нових
зображень із набору даних у компонент. При значенні True будь–яке нове
значення поля автоматично відображається в компоненті. При значенні
False нове значення з’являється тільки після подвійного щиглика на
компоненті або після натискання клавіші при активному
компоненті.

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

3. Конструкторська частина

3.1 Схема взаємозв’язку проекту

На рис. 1.4 (додаток А) можна побачити як виглядає програма у
розгорнутому вигляді.

Вибравши меню About відображається вікно про того, хто виконав роботу і
версія програми (рис 1.6, додаток А).

Щоб переглядати базу даних студентів факультету КСіТ справа зверху
знаходяться 4 кнопки: перший запис, попередній запис, наступний запис та
останній запис. Для редагування бази даних потрібно натиснути на кнопку
„Редагувати базу”, після чого з’явиться вікно ідентифікації, де потрібно
ввести пароль для можливості редагування і натиснути „ОК”. У разі
невірного введення паролю буде запропоновано спробувати повторно його
ввести. Після успішного введення паролю (Admin) буде доступно ще 5
кнопок, що дозволяють редагувати базу: вставити запис, видалити запис,
редагувати запис, підтвердити зміни, відмінити зміни. Кнопка редагування
бази змінить назву на „Відмінити редагування”, натиснувши яку кнопки
„редагування” зникають і будуть доступні після повторного введення
паролю. Щоб почати редагування потрібно натиснути кнопку „редагувати
запис”, а після введення змін натиснути „Підтвердити зміни”.

Кнопка „завантажити” працює як стандартна кнопка завантаження у
середовищі операційної системи Windows.

Щоб реалізувати пошук по базі даних потрібно спочатку обрати параметр
пошуку. А потім написати шукане слово і натиснути „пошук”. Якщо програма
не знайде такого запису або він вже відображений, то вона про це
повідомить у вікні Warning.

Щоб отримати детальнішу інформацію про студента, варто натиснути кнопку
„докладніше >>”, а щоб згорнути до попереднього вигляду – „<< звернути”. 3.2 Алгоритм програми Перед тим як створювати програму, потрібно утворити базу даних в якій будуть знаходитись дані про студентів. Це можна зробити за допомогою Database Desktop. Заходимо в меню File?New?Table, вибираємо тип бази (в даному проекті – Paradox 7) і створюємо поле з типом даних, розміром та якщо потрібно – індексацією. Таким чином створивши потрібну кількість полів зберігаємо базу даних в окремому файлі до якого згодом буде звертатись програма. Наступним кроком є створення псевдоніму бази, що можна зробити за допомогою BDE Administrator. Вибираємо Object?New і серед запропонованих варіантів обираємо STANDART, а потім перейменуємо його на Kurs. Рис. 1.3 BDE Administrator В розділі PATH вказуємо шлях до бази даних з якою буде працювати програма. В DEFAULT DRIVER вказуємо PARADOX. 3.3 Проект роботи в середовищі програмування Delphi 7 Завантаживши середовище Delphi 7, створюємо проект, який називається BDStudents. В першу чергу на форму потрібно перетягнути компонент Table із закладки BDE, який буде мати ім’я змінної Table1. Тепер його потрібно зв’язати з базою даних, для цього у вікні Object Inspector вибираємо властивість DatabaseName, як показано на рис. 1.4 і вибираємо псевдонім бази. Рис. 1.4 А в TableName вибираємо Stud.db (База даних з якою буде працювати компонент Table1). Далі з панелі Data Access розташовуємо компонент DataSource (змінна DataSource1) та у властивості DataSet підключаємо Table1. Щоб завантажити фото в базу даних було використано таку процедуру: procedure TForm1.Button2Click(Sender: TObject); var FName: string; begin if OpenPictureDialog1.Execute=True {якщо відкрито діалогове вікно вибору файлу} then begin Fname:=OpenPictureDialog1.FileName; {Змінній Fname присвоїти значення ім’я цього файлу} dbImage1.Picture.LoadFromFile(FName); {завантаження вибраного фото в базу даних} end end; Пошук по базі даних було організовано наступним чином: if RadioButton1.Checked {якщо активовано параметр пошуку по прізвищу} Then begin a:=Dbedit36.Text; {змінній „а” присвоюємо значення рядка редагування прізвища} Table1.Locate('Prizv', Edit1.Text, [loCaseInsensitive]); {Робимо пошук введеного прізвища без урахування регістру по полю Prizv у базі даних} IF a=dbEdit36.Text {якщо ім’я в рядку відображення прізвища не змінилось} Then {тоді виводимо нижче вказане повідомлення} MessageDlg('Такого прізвища немає або вже відображено!', mtWarning, [mbok],0); Edit1.Text:=''; {витираємо рядок пошуку} end; Так само організовується пошук по іншим полям. Як робиться розгортання та згортання додаткової інформації про студента можна побачити в процедурі TForm1.Button3Click в лістингу програми (Додаток В). Висновок Існує багато подібних програмних продуктів, які є більш функціональними і зручними у використанні, проте вони мають досить високу ціну, і не завжди потрібні всі функції якими вони наділяються. Як приклад, можна привести пакет програм „Деканат” в якому є багато підпрограм і зокрема – „Студент”. Вона призначена для організації обліку студентів та відповідних подій, що фіксуються наказами, контролю успішності студентів з можливістю аналізу даних. Забезпечує друк великої кількості звітів щодо розподілу студентів та їх успішності за різними критеріями. Окремо ця програма коштує 1800 грн. І вона не є Open-Source. Щоб зробити поновлення програми потрібен доступ до Інтернету. Та й саме обновлення програми не завжди безкоштовне. В моєму ж проекті відкритий код програми, що дозволяє вільно редагувати і доповнювати програму в будь-який час. Також в цій програмі присутні лише найголовніші функції, які роблять її компактною та зрозумілою без зайвих витрат коштів. Література 1. Архангельский А. Я. Delphi 7. Справочное пособие –М: ЗАО „Издательство БИНОМ”, 2003 2. Архангельский А. Я. Программирование в Delphi 7. Справочное пособие –М: ЗАО „Издательство БИНОМ”, 2003 3. Довідка з програмного середовища Delphi 7 Додаток А Перетягуючи компоненти DBEdit, DBComboBox, DBImage встановлюємо у властивостях DataSource параметри DataSource1 та в DataField ім’я поля в таблиці бази даних і розташовуємо їх на формі у зручному порядку. Після розташування потрібних компонентів форма виглядає як на рис. 1.4 Рис.1.4 Редагування бази даних зроблено з урахуванням безпеки даних, тільки після введення паролю можливе редагування бази даних. Це зроблено за допомогою додаткового вікна „Ідентифікація” (рис. 1.5) Рис 1.5 в якому пропонується ввести пароль доступу, якщо ви натиснули кнопку „редагувати базу”. Обравши меню About можна отримати коротку інформацію про виконавця цієї програми, що виглядає наступним чином (рис 1.6): Рис. 1.6 Як це організовано можна побачити з процедури Button4Click та коду модуля Unit3. Додаток В program DBStudents; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {AboutBox}, Unit3 in 'Unit3.pas' {PasswordDlg}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TAboutBox, AboutBox); Application.CreateForm(TPasswordDlg, PasswordDlg); Application.Run; end. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask, DB, DBTables, Buttons, Menus, ExtDlgs, ActnMan, ActnColorMaps; type TForm1 = class(TForm) Table1: TTable; DataSource1: TDataSource; Label2: TLabel; DBEdit2: TDBEdit; Label3: TLabel; DBEdit3: TDBEdit; Label4: TLabel; DBEdit4: TDBEdit; DBComboBox1: TDBComboBox; DBNavigator1: TDBNavigator; Label5: TLabel; DBComboBox2: TDBComboBox; Label6: TLabel; Label7: TLabel; DBEdit5: TDBEdit; Label8: TLabel; DBEdit6: TDBEdit; Label9: TLabel; DBEdit7: TDBEdit; Label10: TLabel; DBEdit8: TDBEdit; Label11: TLabel; DBEdit9: TDBEdit; DBComboBox3: TDBComboBox; Label12: TLabel; DBComboBox4: TDBComboBox; Label13: TLabel; Button1: TButton; Edit1: TEdit; Label14: TLabel; DBEdit10: TDBEdit; Label15: TLabel; DBEdit11: TDBEdit; Label16: TLabel; DBEdit12: TDBEdit; Label17: TLabel; DBEdit13: TDBEdit; Label18: TLabel; DBEdit14: TDBEdit; Label19: TLabel; DBEdit15: TDBEdit; Label20: TLabel; DBEdit16: TDBEdit; Label21: TLabel; DBEdit17: TDBEdit; Label22: TLabel; DBEdit18: TDBEdit; Label23: TLabel; DBEdit19: TDBEdit; Label24: TLabel; DBEdit20: TDBEdit; DBComboBox5: TDBComboBox; Label25: TLabel; Label26: TLabel; DBEdit21: TDBEdit; Label27: TLabel; DBEdit22: TDBEdit; Label28: TLabel; DBEdit23: TDBEdit; Label29: TLabel; DBEdit24: TDBEdit; Label30: TLabel; DBEdit25: TDBEdit; Label31: TLabel; DBEdit26: TDBEdit; Label32: TLabel; DBEdit27: TDBEdit; Label33: TLabel; DBEdit28: TDBEdit; Label34: TLabel; DBEdit29: TDBEdit; Label35: TLabel; DBEdit30: TDBEdit; Label36: TLabel; DBEdit31: TDBEdit; Label37: TLabel; DBEdit32: TDBEdit; Label38: TLabel; DBEdit33: TDBEdit; Label39: TLabel; DBEdit34: TDBEdit; Label40: TLabel; DBEdit35: TDBEdit; RadioButton1: TRadioButton; GroupBox1: TGroupBox; RadioButton2: TRadioButton; RadioButton3: TRadioButton; RadioButton4: TRadioButton; MainMenu1: TMainMenu; About1: TMenuItem; Label41: TLabel; DBImage1: TDBImage; Button2: TButton; Memo1: TMemo; Label42: TLabel; Label43: TLabel; DBEdit37: TDBEdit; Button3: TButton; DBComboBox6: TDBComboBox; Bevel1: TBevel; Label44: TLabel; Bevel2: TBevel; Label45: TLabel; Button4: TButton; Button5: TButton; OpenPictureDialog1: TOpenPictureDialog; Table1Zalikova: TStringField; Table1DaniStudKvytok: TStringField; Table1Prizv: TStringField; Table1DataNarod: TDateField; Table1Imya: TStringField; Table1PoBatkovi: TStringField; Table1Stat: TStringField; Table1DokumentOsoby: TStringField; Table1DokumentSeriya: TStringField; Table1DokumentNomer: TFloatField; Table1DokumentData: TDateField; Table1DokementVydan: TStringField; Table1MisceNarod: TStringField; Table1SimejnyjStan: TStringField; Table1SimejnyjStanBat: TStringField; Table1BazaOsvity: TStringField; Table1InozemnaMova: TStringField; Table1DataZarah: TDateField; Table1NomerNakazuZarah: TFloatField; Table1DataZakinchNavch: TDateField; Table1Kvalifikaciya: TStringField; Table1ZakladDoVstupu: TStringField; Table1DaniAtestatS: TStringField; Table1DaniAtestatN: TFloatField; Table1DaniAtestatInsheS: TStringField; Table1DaniAtestatInsheN: TFloatField; Table1Medal: TStringField; Table1DyplomMolSpec: TStringField; Table1DyplomBAC: TStringField; Table1DyplomSpec: TStringField; Table1DyplomMag: TStringField; Table1Batko: TStringField; Table1Maty: TStringField; Table1Prozhyvannya: TStringField; Table1Propyska: TStringField; Table1MisceRoboty: TStringField; Table1Posada: TStringField; Table1IndefCOD: TIntegerField; Table1Telefon: TFloatField; Table1NomerOsobSpravy: TIntegerField; Table1Foto: TBlobField; Table1GrupaS: TStringField; Table1GrupaN: TFloatField; Label46: TLabel; DBEdit36: TDBEdit; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure About1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit2, Unit3; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Table1.Active:=True; Form1.Height:=286; end; procedure TForm1.FormDestroy(Sender: TObject); begin Table1.Active:=False end; procedure TForm1.Button1Click(Sender: TObject); var a: string; begin a:=''; If (RadioButton1.Checked=False) and (RadioButton2.Checked=False) and (RadioButton3.Checked=False) and (RadioButton4.Checked=False) {Перевірка, чи активний будьякий RadioButton} Then MessageDlg('Вкажіть параметр пошуку!',mtWarning,[mbok],0); if RadioButton1.Checked Then begin a:=Dbedit36.Text; Table1.Locate('Prizv', Edit1.Text, [loCaseInsensitive]); IF a=dbEdit36.Text then MessageDlg('Такого прізвища немає або вже відображено!', mtWarning, [mbok],0); Edit1.Text:=''; end; if RadioButton2.Checked Then Begin a:=Dbedit25.Text; Table1.Locate('Zalikova', Edit1.Text, [loCaseInsensitive]); IF a=dbEdit25.Text then MessageDlg('Такої залікової немає або вже відображено!', mtWarning, [mbok],0); Edit1.Text:=''; end; if RadioButton3.Checked Then Try a:=Dbedit4.Text; Table1.Locate('DataNarod', Edit1.Text, [loCaseInsensitive]); IF a=dbEdit4.Text then MessageDlg('Така дата народження відсутня або вже відображено!', mtWarning, [mbok],0); Edit1.Text:=''; Except on EconvertError do MessageDlg('Введіть повну дату "дд.мм.рррр"!',mtWarning,[mbOK],0); end; if RadioButton4.Checked Then Begin a:=Dbedit35.Text; Table1.Locate('DaniStudKvytok', Edit1.Text, [loCaseInsensitive]); IF a=dbEdit35.Text then MessageDlg('Такий номер студенського відсутній або вже відображено!', mtWarning, [mbok],0); Edit1.Text:=''; end; end; procedure TForm1.About1Click(Sender: TObject); begin AboutBox.show end; procedure TForm1.Button2Click(Sender: TObject); var FName: string; begin if OpenPictureDialog1.Execute=True then begin Fname:=OpenPictureDialog1.FileName; dbImage1.Picture.LoadFromFile(FName); end end; procedure TForm1.Button3Click(Sender: TObject); begin If Button3.Caption='Детальніше >>’ then

Begin

Form1.Height:=654;

Button3.Caption:=’<< Звернути'; Label44.Visible:=True; Bevel1.Visible:=True; Bevel2.Visible:=True; Label45.Visible:=True; DBComboBox2.Visible:=True; DbEdit8.Visible:=True; DbEdit5.Visible:=True; DbEdit6.Visible:=True; DbEdit7.Visible:=True; DbEdit29.Visible:=True; DbEdit9.Visible:=True; DbComboBox3.Visible:=True; DbEdit10.Visible:=True; DbEdit14.Visible:=True; DbEdit21.Visible:=True; DbEdit17.Visible:=True; DbEdit18.Visible:=True; DbEdit24.Visible:=True; DbEdit30.Visible:=True; DbEdit25.Visible:=True; DbEdit12.Visible:=True; DbEdit15.Visible:=True; DbEdit19.Visible:=True; DbEdit20.Visible:=True; DbEdit22.Visible:=True; DbEdit11.Visible:=True; DbEdit31.Visible:=True; DbEdit35.Visible:=True; DbEdit13.Visible:=True; DbEdit16.Visible:=True; DbComboBox5.Visible:=True; DbEdit23.Visible:=True; DbEdit32.Visible:=True; DbComboBox4.Visible:=True; DbEdit34.Visible:=True; Label6.Visible:=True; Label10.Visible:=True; Label7.Visible:=True; Label8.Visible:=True; Label9.Visible:=True; Label34.Visible:=True; Label11.Visible:=True; Label12.Visible:=True; Label14.Visible:=True; Label18.Visible:=True; Label21.Visible:=True; Label22.Visible:=True; Label26.Visible:=True; Label29.Visible:=True; Label35.Visible:=True; Label30.Visible:=True; Label16.Visible:=True; Label19.Visible:=True; Label23.Visible:=True; Label24.Visible:=True; Label27.Visible:=True; Label15.Visible:=True; Label36.Visible:=True; Label40.Visible:=True; Label17.Visible:=True; Label20.Visible:=True; Label25.Visible:=True; Label28.Visible:=True; Label37.Visible:=True; Label13.Visible:=True; L???????????†??†††???†††??? Button3.Caption:='Детальніше >>’;

Label44.Visible:=False;

Bevel1.Visible:=False;

Bevel2.Visible:=False;

Label45.Visible:=False;

DbEdit6.Visible:=False;

DBComboBox2.Visible:=False;

DbEdit8.Visible:=False;

DbEdit5.Visible:=False;

DbEdit7.Visible:=False;

DbEdit29.Visible:=False;

DbEdit9.Visible:=False;

DbComboBox3.Visible:=False;

DbEdit10.Visible:=False;

DbEdit14.Visible:=False;

DbEdit21.Visible:=False;

DbEdit17.Visible:=False;

DbEdit18.Visible:=False;

DbEdit24.Visible:=False;

DbEdit30.Visible:=False;

DbEdit25.Visible:=False;

DbEdit12.Visible:=False;

DbEdit15.Visible:=False;

DbEdit19.Visible:=False;

DbEdit20.Visible:=False;

DbEdit22.Visible:=False;

DbEdit11.Visible:=False;

DbEdit31.Visible:=False;

DbEdit35.Visible:=False;

DbEdit13.Visible:=False;

DbEdit16.Visible:=False;

DbComboBox5.Visible:=False;

DbEdit23.Visible:=False;

DbEdit32.Visible:=False;

DbComboBox4.Visible:=False;

DbEdit34.Visible:=False;

Label6.Visible:=False;

Label10.Visible:=False;

Label7.Visible:=False;

Label8.Visible:=False;

Label9.Visible:=False;

Label34.Visible:=False;

Label11.Visible:=False;

Label12.Visible:=False;

Label14.Visible:=False;

Label18.Visible:=False;

Label21.Visible:=False;

Label22.Visible:=False;

Label26.Visible:=False;

Label29.Visible:=False;

Label35.Visible:=False;

Label30.Visible:=False;

Label16.Visible:=False;

Label19.Visible:=False;

Label23.Visible:=False;

Label24.Visible:=False;

Label27.Visible:=False;

Label15.Visible:=False;

Label36.Visible:=False;

Label40.Visible:=False;

Label17.Visible:=False;

Label20.Visible:=False;

Label25.Visible:=False;

Label28.Visible:=False;

Label37.Visible:=False;

Label13.Visible:=False;

Label39.Visible:=False;

Form1.Height:=286;

End

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

If Button4.Caption=’Редагувати базу’ Then

PasswordDlg.show

Else

begin

DbNavigator1.VisibleButtons:=[nbFirst,nbPrior,nbNext,nbLast];

Button4.Caption:=’Редагувати базу’;

end;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

close

end;

end.

unit Unit2;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls, jpeg;

type

TAboutBox = class(TForm)

Panel1: TPanel;

ProgramIcon: TImage;

ProductName: TLabel;

Version: TLabel;

Copyright: TLabel;

OKButton: TButton;

procedure OKButtonClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

AboutBox: TAboutBox;

implementation

{$R *.dfm}

procedure TAboutBox.OKButtonClick(Sender: TObject);

begin

Close

end;

end.

unit Unit3;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, DBCtrls, Messages, Dialogs;

type

TPasswordDlg = class(TForm)

Label1: TLabel;

Password: TEdit;

OKBtn: TButton;

CancelBtn: TButton;

procedure OKBtnClick(Sender: TObject);

procedure CancelBtnClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

PasswordDlg: TPasswordDlg;

implementation

uses Unit1;

{$R *.dfm}

procedure TPasswordDlg.OKBtnClick(Sender: TObject);

begin

If Password.Text=’Admin’ then

begin

Form1.DBNavigator1.VisibleButtons:=[nbFirst,nbPrior,nbNext,nbLast,nbInse
rt, nbDelete, nbEdit,nbPost,nbCancel];

Form1.Button4.Caption:=’Відмінити редагування’;

ShowMessage(‘Приємної роботи! Ви отримали доступ до редагування’);

Password.Text:=»;

Close

end

Else

begin

MessageDlg(‘Пропоную спробувати ще, бо ви помилились
паролем!’,mtWarning,[mbOk],0);

Password.Text:=»

end

end;

procedure TPasswordDlg.CancelBtnClick(Sender: TObject);

begin

Close

end;

end.

PAGE

PAGE 8

Похожие записи