Реферат: Зміст
Зміст
Зміст 2
1. Вступ 3
2. Розробка програмного забезпечення для АІС “Облік автомобілів” 5
2.1. Постановка задачі 5
2.2. Створення проекту «АІС Облік автомобілів» 6
2.3. Реалізація проекту “АІС Облік автомобілів” 9
3. Висновки 18
4. Література 19
5. Додатки 20
1. Вступ
Метою даного курсового проекту є поглиблення знань з дисципліни "Технологія створення програмного забезпечення". Одним з базових понять методології проектування інформаційних систем є поняття життєвого циклу його програмного забезпечення (ЖЦ ПЗ). Життєвий цикл програмного забезпечення — це безперервний процес, який починається з моменту прийняття рішення про необхідність його створення і закінчується в момент його повного вилучення з експлуатації.
Структуру життєвого циклу може базуватися на таких групах процесів:
основні процеси ЖЦ ПЗ (придбання, постачання, розробка, експлуатація, супровід);
допоміжні процеси, що забезпечують виконання основних процесів
(документування, управління конфігурацією, забезпечення якості, верифікація, атестація, оцінка, аудит, розв'язання проблем);
організаційні процеси (управління проектами, створення інфраструктури проекту, визначення, оцінка і поліпшення самого ЖЦ, навчання).
Хотів би зупинитися на такому важливому процесі як розробка. Розробка включає в себе всі роботи по створенню програмного забезпечення і його компонентів відповідно до заданих вимог, включаючи оформлення проектної і експлуатаційної документації, підготовку матеріалів, необхідних для перевірки працездатності і відповідної якості програмних продуктів, матеріалів, необхідної для організації навчання персоналу і т.д
Розробка ПЗ включає в себе такі три основні етапи:
аналіз;
проектування;
реалізацію (програмування)
Саме ці три основні етапи я хотів би пройти при вирішенні поставленої задачі, а саме "АІС Облік автомобілів".
Курсовий проект складає ться з трьох частин висновків та додатків. У перші й частині проводиться постановка задачі, тобто іншими словами можна сказати аналізується поставлена задача У другій частині відбувається проектування цієї задачі, на основі постановки відбувається процес проектування. У третій частині подається опис реалізації.
Я вибрав дану тему тому, що я, як і кожна людина, подорожую і мене вразила недосконала система реєстрації автомобілів.
Я ж зупинився на розробці прикладного програмного забезпечення для автоматизації пошуку інформації в базах даних, використавши за об'єкт дослідження дані, що зберігаються в базі даних ДАІ України. Я зупинився на ції темі з кількох причин:
• сама база даних представляє собою великий інтерес як поле для плідної творчої діяльності
• накопичення великої кількості інформації, обробка якої стандартними методами забирала б багато часу та робочої сили
• існуюча програма, що повинна забезпечувати потрібні можливості не виконує все, що від неї вимагається
• потрібна програма, яка б працювала в операційній системі Microsoft Windows і була сумісна з такими відомими типами серверів як Oracle, Sybase, InterBase, ODBC Socket та іншими.
Отже, сьогоднішній стан справ на комп'ютерному ринку вимагає негайного написання прикладної програми, яка б дозволяла здійснювати накопичення, збереження, обробку та швидкий пошук потрібної інформації в базі даних ДАІ України.
Саме такою і є “АІС Облік атомобілів“ (надалі просто СУБД) розроблена мною.
^ 2. Розробка програмного забезпечення для АІС “Облік автомобілів” 2.1. Постановка задачі
За більш ніж 25-річну історію розвитку реляційних баз даних виробився ряд нових вимог до методів та засобів доступу до даних. За таку довгу історію в промисловому використанні найшли своє місце велика кількість форматів зберігання даних. Тому одним з наступних питань подальшого розвитку СУБД стало питання про створення єдиного середовище обробки даних. Вирішенням такої проблеми займаються консорціуми провідних постачальників засобів обробки даних X/Open, SAG (SQL Accesss Group), що розвивають на базі стандартів ANSI/ISO єдину специфікацію доступу до даних CLI (call-level interface). На базі цих специфікацій і багаторічного досвіду створення інструментальних засобів компанія Borland представила розробникам свою технологію доступу до даних-BDE (Borland Database Engine), відому також під назвою IDAPI (Integrated Database API). Ідеологія доступу до локальних і клієнт/серверних даних помітно . відрізняються (в одному випадку використовується навігаційний підхід, а в іншому-мова SQL, що орієнтована на множину даних). BDE об'єднує ці підходи без зменьшення функціональних можливостей кожного з них. Тому BDE покладений в основу створення масштабованих систем обробки даних, одним з яких і є Delphi.
СУБД являє собою програму для ведення бази даних в ДАІ України і дозволяє виконувати такі функції:
• проводити реєстрацію автомобілів
• здійснювати корегування документів вже зареєстрованих автомобілів
• зняття з обліку автомобілів
• ведення бази викрадених автомобілів
• здійснення пошуку даних в базі
• ведення довідників
• встановлення гнучкої системи паролів
• передача та отримання інформації
• друк журналу реєстрацій
Прикладна програма досить проста в експлуатації і не вимагає від користувача великих знань. Якщо ви не перший раз сіли за комп'ютер і хоч колись працювали в операційній системі Microsoft Windows 95, то ви зразу можете приступати до роботи з програмою.
Якщо ж ви самі не можете розібратися з програмою, то в цьому вам допоможе розділ "Робота з програмою", в якому ви знайдете повну інформацію про використання СУБД.
Для повного розуміння принципів роботи програми та опису її структури в даній науково-дослідній роботі необхідне ознайомлення з програмуванням в операційній системі Microsoft Windows та з принципами організації роботи з реляційними базами даних.
^ 2.2. Створення проекту «АІС Облік автомобілів»
Необхідно одразу визначитися з якими даними ми будемо мати справу.
Я використав таблиці Paradox for Windows, оскільки вони мають найбільш широкі можливості, нажаль далеко не всі ці властивості доцільно використати при розробці даної АІС.
В даній СУБД об'єктом накопичення та обробки виступає інформація, що використовується для ведення обліку зареєстрованих та викрадених автомобілів. Дана база даних складається з чотирьох таблиць та десяти довідників.
Таблиці:
• Users, db-таблиця приватних власників автомобілів
• Orgs.db-таблиця підприємств-власників автомобілів
• Usercars.db-таблиця приватних автомобілів
• Orgcars.db-таблиця держівних автомобілів
Таблиці аналогічної структури використовуються для зберігання даних про викрадені автомобілі та для збереження даних про автомобілі зняті з обліку.
Довідники:
• Areas, db-довідник регіонів
• Colours.db-довідник кольорів
• Cusovs.db- довідник типів кузовів
• Docs.db- довідник типів документів
• Models, db- довідник моделей автомобілів
• Numbers.db- довідник типів номерних знаків
• Organs, db- довідник підприємств
• States.db- довідник станів автомобілів
• Tecops.db- довідник технічних операцій
• Types.db- довідник типів АМТ
^ Таблиця Users, db
Дана таблиця призначена для зберігання в ній інформації провласників автомобілів і має таку структуру:
NZA
6
Поле, за допомогою якого зв’язані всі таблиці
^ SURENAM Е
18
Прізвище
NAME
15
Ім'я
BYFATHER
15
По-батькові
DATE В
Дата народження
PASSPORT
14
№ та серія паспорта
DRIVE
9
№ та серія посвідчення водія
STREET
25
Вулиця проживання
HOUSE
6
Будинок
SUBHOUSE
2
Корпус
FLAT
4
Квартира
PHONE H
7
Домашній телефон
PHONE W
7
Робочий телефон
WORK
15
Де працює
WHOM
10
Ким працює
Таблиця Orgs.db
Дана таблиця призначена для збереження в ній інформації про підприємства-власники автомобілів і має таку структуру:
NZA
6
Поле, за допомогою якого зв'язані всі таблиці
ORG AREA
Код підпрємства Код регіону
STREET 0
25
Вулиця підприємства
HOUSE 0
6
Будинок
SUBHOUSE 0
3
Корпус
PHONE 0
7
Телефон
STREET G
25
Вулиця гаража
HOUSE G
6
Будинок
^ SUBHOUSE G
3
Корпус
PHONE G
7
Телефон
Таблиця Usercars.db
Дана таблиця призначена для зберігання інформації про зареєстровані приватні автомобілі і має таку структуру:
NZ
A
6
Поле, за допомогою якого зв'язані всі таблиці
TECPAS
9
№ техпаспорту
AREA
Регіон
ТЕС ОР
Технічна операція
DATE ОР
Дата ставлення на облік
NUM ID
7
Номер знаку
TYPE ID
1
Тип знаку
MODEL
20
Марка автомобіля
TYPE AMT
Тип AMT
TYPE CUSO V
Тип кузова
YEAR
Рік випуску
N MOTOR
18
№ мотора
N SHASY
18
№ шасі
N CUSOV
18
№ кузова
COLOUR
Колір
DOC
Тип документу за яким ставиться па
^ Таблиця Orgcars.db
Дана таблиця призначена для зберігання інформації про зареєстровані державні автомобілі і має структуру таку як таблиця Usercars.db.
Довідники
Всі довідники, крім довідника моделей автомобілів мають однакову структуру:
CD
Код
ТХТ
45
Значення
^ 2.3. Реалізація проекту “АІС Облік автомобілів”
Моя програма написана на мові програмування Delphi 2.0, що розроблена фірмою Borland International. Чому саме Delphi?
Щоб пояснити, чому я вибрав Delphi наведу слова одного з визнаних авторитетів в області клієнт-серверних розробок Кріса Морау: "Delphi posesses by the power of language hooks of C++, into also the time hand-in-hand ussing shockking efficiency and tlie simplicity of training of. Delphi is a most fast and by the comfortable facility of the development of annexs on the modern market of tools. The object-oriented architecture Delphi lets to us really twice utilize existing code and integrate our standards into self tool." ("Delphi володіє потужністю мовних засобів С + +, комбінуючи в той же час високу виробничу спроможність та простоту навчання. Delphi є найбільш швидким та зручним засобом розробки програм на сьогоднішньому ринку інструментальних засобів. Об'єктно-орієнтована архітектура Delphi дозволяє нам дійсно повторно використовувати вже існуючий код та інтегрувати наші стандарти в сам інструмент.")
Іншою причиною є те, що Delphi дозволяє створювати програми для роботи з базами даних на основі BDE.
^ Інтерфейс програми
Інтерфейс програми є важливим критерієм при оцінюванні програми. Адже ви не захочете працювати з програмою, в якої недосконалий інтерфейс і вам незручно виконувати вашу роботу. Програма повинна якнайбільше забезпечити комфорт користувача при роботі з нею. Керуючись цим правилом я і створював інтерфейс своєї програми.
Весь інтерфейс був розроблений засобами Delphi за допомогою візуального проектування форм. Були використані Windows елементи (компоненти) управління, що зменшує програмний код, тому що самі елементи управління в програмі не реалізовані, а реалізовані тільки додаткові можливості цих елементів, що значно скорочує програмний код.
Головна форма нагадує дещо панель запуску Microsoft Office 95 і містить: меню та кілька функціональних кнопок. З даної форми можна відкрити форма реєстрації автомобілів, форму редагування та перегляду документів зареєстрованих автомобілів, форму зняття автомобілів з обліку, форму для роботи з вкраденими автомобілями та форму для організації функцій адміністратора. Також тут можна викликати допомогу та вікна з інформацією про автора та про програму.
Головна форма (як і всі форми в програмі) є нащадком класу TForm.
З головної форми є доступ до схожих з нею форм; форма для забезпечення функцій адміністратора та форми для ведення обліку викладених автомобілів.
Опис роботи всіх форм описаний в розділі "Робота з програмою", тому перейдемо до опису функціонквання системи доступу та обробки бази даних.
^ Система обробки бази даних
Як вже було сказано моя програма працює з базами даних за допомогою BDE. За своєю архітектурою BDE є об'сктно-орієнтованим інтерфейсом доступу до даних. Під час виконання програми створюються різні об'єкти BDE. Кожний об'єкт володіє набором властивостей. Відповідно, через функції IDAPI розробник керує наступними об'єктами BDE:
• System-системний об'єкт, що контролює ресурси BDE для всіх програм, що працюютьна даній машині
• Clients-об'єкт клієнт створюється в процесі ініціалізації IDAPI для доної клієнтської програми. Об'єкт клієнт є тим контекстом, в якому виконуються виклики всіх функцій IDAPI і знаходяться системні ресурси BDE даної програми
• Session-сесія. Сесія містить всі інші об'єкти BDE. Будь-який з них, будучи створеним в контексті однієї сесії не може бути використаний в іншій. Сесія також є власником всіх курсорів і блокіровок таблиць/записів створених н її контексті. Іншою особливістю сесії є private-каталог, в якому розміщуються всі тимчасові таблиці та файли
• Drivers-кожний драйвер БД завантажується при першому звертанні до його сервісу
• Datadases-база даних, представлена набором взаємозв'язаних таблиць. Внаслідок такої організації доступа до різних типів БД, в якості основного ідентифікатора бази даних в BDE використовується поняття псевдоніма бази даних
• Cursors-BDE здійснює доступ до вмістимого таблиць або результатів запросів за допомогою курсору, що представляє собою колекцію записів. Всі операції з даними виконуються за допомогою курсору. Крім того, курсор відповідає за операції переміщення по набору записів незалежно від природи джерела данихю Це дозволяє назвати курсор інструментом контролю над множиною даних Як я вже згадував, особливе місце в VCL (Visual Component Library) посідає TDataSource. Це положення пояснюється тип, що він ізолює низкорівневу логіку доступу до даних від компонент інтерфецсу користувача.
Основним засобом передачі даних Data Aware-компонентами через джерела даних є обробники повідомлень TDataChangeEvent, що оголошенні як функції класів.
^ Робота з програмою
Д
ане вікно є основним вікном програми і в ньому проводиться основна робота з програмою.
В
даному вікні проводиться реєстрація автомобілів, а при потребі з нього можна вийти на інші вікна-довідники.
Д
овідник власників авто, в нтому, як і в всіх довідниках можна робити пошук, створювати записи, знищувати і т. д.
Д
овідник областей призначений дл якорегування областей.
Д
овідник моделей авто призначений для корегування моделей авто.
Д
овідник типів АМТ призначений для корегування типів АМТ.
Д
овідник кузовів призначений для корегування типів кузовів авто.
Д
овідник кольорів авто призначений для корегування кольорів авто.
В
даному вікні можна створювати користувачів програми з різними рівнями доступу.
В
даному вікні можна зробити основні установки програми.
Д
ане вікно появляється при під’єднанні до бази для ідентифікації користувача.
Д
ане вікно дає інформацію про автора програми.
Ц
е вікно з’являється при виклику допомоги і тут можна отримати додаткову інформацію про програму.
3. Висновки
Отже метою даного курсового проекту є поглиблення знань з дисципліни "Технологія програмування".
Підсумовуючи свою роботу над проектом можу сказати, що для окремого робочого місця система в значній мірі підвищить продуктивність праці операторів і рівень обслуговування клієнтів. Впровадження цієї системи буде ще одним етапом інформатизації нашої країни. Сподіваюся, що хоча б основна ідея програми буде перейнята і запроваджена на всіх ДАІ для реєстрації авто.
Щодо самої програми, то використовуючи знання, набуті на численних лекціях та лабораторних заняттях з дисципліни “Технологія програмування”, я зміг реалізувати її на досить високому рівні, що само по собі свідчить як про високий професіоналізм викладачів, так і про непогані здібності студента.
В цілому АІС досить зручна в роботі, Для перетворення цієї локальної версії АІС в мережеву потрібно доопрацювати роботу з базою даних і внести ще кілька несуттєвих змін та доповнень.
4. Література
Бердышев Е.М. Новые возможности при использовании RAD систем – М.: ДИАЛОГ-МИФИ, 1998
Бродин В.Б. Программирование интерфейсов современных програм – М.: ДИАЛОГ-МИФИ, 1994
Гук М. Dephi 3.0. Руководство по разработке баз дынных – СПб.: Питер, 1997
Програмирование в среде Inprise Delphi – К.: Логос, 1998
Разработка приложений модели клиент-сервер: особенности и трудности – М.: Намедни, 1998
Персональные вычисления в 1999 году // Компьютерное обозрение.-№50, 1998
Многообразие возможностей обьектно-ориентированного програмирования //Компьютер World.-№22, 1998
5. Додатки
unit Data;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBTables, Db, RxQuery;
type
TdmData = class(TDataModule)
dbMain: TDatabase;
qrHumans: TRxQuery;
qrAutoHumans: TRxQuery;
dsHumans: TDataSource;
dsAutoHumans: TDataSource;
qrAutoView: TRxQuery;
qrHumansID: TIntegerField;
qrHumansSURNAME: TStringField;
qrHumansNAME: TStringField;
qrHumansBYFATHER: TStringField;
qrHumansBIRTHDAY: TDateTimeField;
qrHumansPASSPORT: TStringField;
qrHumansCERTIFICATE: TStringField;
qrHumansSTREET: TStringField;
qrHumansHOUSE: TSmallintField;
qrHumansSUBHOUSE: TStringField;
qrHumansFLAT: TSmallintField;
qrHumansHOMEPHONES: TStringField;
qrHumansWORKPHONES: TStringField;
qrHumansWHEREWORK: TStringField;
qrHumansWHOMWORK: TStringField;
qrAutoHumansID: TIntegerField;
qrAutoHumansTEHPASSPORT: TStringField;
qrAutoHumansAREA: TIntegerField;
qrAutoHumansREGDATE: TDateTimeField;
qrAutoHumansREGNUMBER: TStringField;
qrAutoHumansMODEL: TIntegerField;
qrAutoHumansAMT: TIntegerField;
qrAutoHumansCUSOV: TIntegerField;
qrAutoHumansMAKEYEAR: TSmallintField;
qrAutoHumansMOTORN: TStringField;
qrAutoHumansSHASSYN: TStringField;
qrAutoHumansCUSOVN: TStringField;
qrAutoHumansCOLOUR: TIntegerField;
qrAutoHumansTEHVIEW: TDateTimeField;
qrAutoHumansGOLEGTH: TIntegerField;
dsAutoView: TDataSource;
qrAreas: TRxQuery;
qrModels: TRxQuery;
qrAMTs: TRxQuery;
qrCusovs: TRxQuery;
qrColours: TRxQuery;
dsAreas: TDataSource;
dsModels: TDataSource;
dsAMTs: TDataSource;
dsCusovs: TDataSource;
dsColours: TDataSource;
qrAreasID: TIntegerField;
qrAreasNAME: TStringField;
qrModelsID: TIntegerField;
qrModelsNAME: TStringField;
qrAMTsID: TIntegerField;
qrAMTsNAME: TStringField;
qrColoursID: TIntegerField;
qrColoursNAME: TStringField;
qrCusovsID: TIntegerField;
qrCusovsNAME: TStringField;
qrAutoViewID: TIntegerField;
qrAutoViewREGDATE: TDateTimeField;
qrAutoViewREGNUMBER: TStringField;
qrAutoViewAUTOOWNER: TStringField;
qrAutoViewCERTIFICATE: TStringField;
qrAutoViewTEHPASSPORT: TStringField;
qrAutoViewMODELNAME: TStringField;
qrAutoViewAMTNAME: TStringField;
qrAutoViewMAKEYEAR: TSmallintField;
qrAutoViewCOLOURNAME: TStringField;
qrAutoViewAREANAME: TStringField;
qrAutoViewTEHVIEW: TDateTimeField;
qrUsers: TRxQuery;
qrUsersUserName: TStringField;
qrUsersCPassword: TStringField;
qrUsersAccessLevel: TIntegerField;
dsUsers: TDataSource;
procedure dmDataDestroy(Sender: TObject);
procedure qrHumansNewRecord(DataSet: TDataSet);
procedure qrHumansAfterPost(DataSet: TDataSet);
procedure qrAutoHumansAfterPost(DataSet: TDataSet);
procedure qrAutoHumansNewRecord(DataSet: TDataSet);
procedure qrAreasNewRecord(DataSet: TDataSet);
procedure qrModelsNewRecord(DataSet: TDataSet);
procedure qrAMTsNewRecord(DataSet: TDataSet);
procedure qrColoursNewRecord(DataSet: TDataSet);
procedure qrCusovsNewRecord(DataSet: TDataSet);
procedure qrAreasAfterPost(DataSet: TDataSet);
procedure qrModelsAfterPost(DataSet: TDataSet);
procedure qrAMTsAfterPost(DataSet: TDataSet);
procedure qrColoursAfterPost(DataSet: TDataSet);
procedure qrCusovsAfterPost(DataSet: TDataSet);
procedure dmDataCreate(Sender: TObject);
procedure qrFilterRecord(DataSet: TDataSet; var Accept: Boolean);
procedure qrAreasBeforeDelete(DataSet: TDataSet);
procedure qrModelsBeforeDelete(DataSet: TDataSet);
procedure qrAMTsBeforeDelete(DataSet: TDataSet);
procedure qrColoursBeforeDelete(DataSet: TDataSet);
procedure qrCusovsBeforeDelete(DataSet: TDataSet);
procedure qrUsersAfterPost(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
procedure OpenDatabase(AUser:String='');
procedure Closedatabase;
function OpenSQL(SQL:String):TDataSet;
procedure RunSQL(SQL:String);
function GetMaxCode(TableName:String):Integer;
function InputHuman:Integer; // -1 mrCancel
function InputArea:Integer;
function InputModel:Integer;
function InputAMT:Integer;
function InputCusov:Integer;
function InputColour:Integer;
end;
var
dmData: TdmData;
Filters: TStrings;
implementation
uses Humans, Areas, Models, AMTs, Colours, Cusovs, Global, InputPassword;
{$R *.DFM}
procedure TdmData.OpenDatabase(AUser:String='');
begin
try
Screen.Cursor:=crHourGlass;
dbMain.Open;
Filters.Clear;
qrUsers.Open;
if qrUsers.RecordCount>0 then
begin
with TfmInputPassword.Create(Application) do
try
edName.Text:=AUser;
if edName.Text<>'' then
ActiveControl:=edPassword;
Screen.Cursor:=crDefault;
if ShowModal=mrCancel then
begin
CloseDatabase;
Exit;
end;
finally
Free;
end;
end
else
begin
UserName:='=хтiфюьшщ юяхЁрЄюЁ';
Password:='';
AccessLevel:=-1;
end;
Screen.Cursor:=crDefault;
except
Screen.Cursor:=crDefault;
Application.MessageBox('Tшэшъыр яюьшыър яЁш я¦ф''¦фэрээ¦ фю срчш.',PChar(Application.Title),MB_ICONSTOP or MB_OK);
end;
end;
procedure TdmData.CloseDatabase;
begin
dbMain.Close;
end;
procedure TdmData.dmDataDestroy(Sender: TObject);
begin
CloseDatabase;
if Assigned(Filters) then
Filters.Free;
end;
function TdmData.OpenSQL(SQL:String):TDataSet;
var
ResDataSet:TQuery;
begin
Result:=nil;
if SQL='' then
raise Exception.Create('=х ьюцє тшъюэрЄш яєёЄшщ SQL чряшЄ.');
ResDataSet:=TQuery.Create(Self);
ResDataSet.Name:='OpenSQL'+IntToStr(Random(1000000000));
ResDataSet.DatabaseName:=dbMain.DatabaseName;
ResDataSet.SQL.Add(SQL);
ResDataSet.Open;
Result:=ResDataSet;
end;
procedure TdmData.RunSQL(SQL:String);
var
ResDataSet:TQuery;
begin
if SQL='' then
raise Exception.Create('=х ьюцє тшъюэрЄш яєёЄшщ SQL чряшЄ.');
ResDataSet:=TQuery.Create(Self);
ResDataSet.Name:='RunSQL'+IntToStr(Random(1000000000));
ResDataSet.DatabaseName:=dbMain.DatabaseName;
ResDataSet.SQL.Add(SQL);
ResDataSet.ExecSQL;
ResDataSet.Free;
end;
function TdmData.GetMaxCode(TableName:String):Integer;
var
SQL:TDataSet;
begin
try
SQL:=OpenSQL('SELECT MAX(ID) AS MAXID FROM '+TableName);
Result:=SQL.FieldByName('MAXID').AsInteger;
finally
if Assigned(SQL) then
begin
SQL.Active:=False;
SQL.Free;
end;
end;
end;
procedure TdmData.qrHumansNewRecord(DataSet: TDataSet);
begin
qrHumans.FieldByName('ID').AsInteger:=GetMaxCode('HUMANS')+1;
end;
function TdmData.InputHuman:Integer;
begin
Screen.Cursor:=crHourGlass;
Result:=-1;
with TfmHumans.Create(Application) do
try
Screen.Cursor:=crDefault;
if ShowModal=mrOK then
Result:=qrHumans.FieldByName('ID').AsInteger;
finally
Screen.Cursor:=crDefault;
end;
end;
procedure TdmData.qrHumansAfterPost(DataSet: TDataSet);
var
ID:Integer;
begin
try
Screen.Cursor:=crHourGlass;
qrHumans.DisableControls;
ID:=qrHumans.FieldByName('ID').AsInteger;
qrHumans.Close;
qrHumans.Open;
qrHumans.Locate('ID',ID,[]);
finally
qrHumans.EnableControls;
Screen.Cursor:=crDefault;
end;
end;
procedure TdmData.qrAutoHumansAfterPost(DataSet: TDataSet);
var
ID:Integer;
RegNumber:String;
begin
try
Screen.Cursor:=crHourGlass;
qrAutoHumans.DisableControls;
ID:=qrAutoHumans.FieldByName('ID').AsInteger;
RegNumber:=qrAutoHumans.FieldByName('REGNUMBER').AsString;
qrAutoHumans.Close;
qrAutoHumans.Open;
qrAutoHumans.Locate('ID;REGNUMBER',VarArrayOf([ID,RegNumber]),[]);
finally
qrAutoHumans.EnableControls;
Screen.Cursor:=crDefault;
end;
end;
procedure TdmData.qrAutoHumansNewRecord(DataSet: TDataSet);
begin
qrAutoHumans.FieldByName('RegDate').AsDateTime:=Date;
end;
procedure TdmData.qrAreasNewRecord(DataSet: TDataSet);
begin
qrAreas.FieldByName('ID').AsInteger:=GetMaxCode('AREAS')+1;
end;
procedure TdmData.qrModelsNewRecord(DataSet: TDataSet);
begin
qrModels.FieldByName('ID').AsInteger:=GetMaxCode('MODELS')+1;
end;
procedure TdmData.qrAMTsNewRecord(DataSet: TDataSet);
begin
qrAMTs.FieldByName('ID').AsInteger:=GetMaxCode('AMT')+1;
end;
procedure TdmData.qrColoursNewRecord(DataSet: TDataSet);
begin
qrColours.FieldByName('ID').AsInteger:=GetMaxCode('COLOURS')+1;
end;
procedure TdmData.qrCusovsNewRecord(DataSet: TDataSet);
begin
qrCusovs.FieldByName('ID').AsInteger:=GetMaxCode('CUSOVS')+1;
end;
function TdmData.InputArea:Integer;
begin
Screen.Cursor:=crHourGlass;
Result:=-1;
with TfmAreas.Create(Application) do
try
Screen.Cursor:=crDefault;
if ShowModal=mrOK then
Result:=qrAreas.FieldByName('ID').AsInteger;
finally
Screen.Cursor:=crDefault;
end;
end;
procedure TdmData.qrAreasAfterPost(DataSet: TDataSet);
var
ID:Integer;
begin
try
Screen.Cursor:=crHourGlass;
qrAreas.DisableControls;
ID:=qrAreas.FieldByName('ID').AsInteger;
qrAreas.Close;
qrAreas.Open;
qrAreas.Locate('ID',ID,[]);
finally
qrAreas.EnableControls;
Screen.Cursor:=crDefault;
end;
end;
procedure TdmData.qrModelsAfterPost(DataSet: TDataSet);
var
ID:Integer;
begin
try
Screen.Cursor:=crHourGlass;
qrModels.DisableControls;
ID:=qrModels.FieldByName('ID').AsInteger;
qrModels.Close;
qrModels.Open;
qrModels.Locate('ID',ID,[]);
finally
qrModels.EnableControls;
Screen.Cursor:=crDefault;
end;
end;
procedure TdmData.qrAMTsAfterPost(DataSet: TDataSet);
var
ID:Integer;
begin
try
Screen.Cursor:=crHourGlass;
qrAMTs.DisableControls;
ID:=qrAMTs.FieldByName('ID').AsInteger;
qrAMTs.Close;
qrAMTs.Open;
qrAMTs.Locate('ID',ID,[]);
finally
qrAMTs.EnableControls;
Screen.Cursor:=crDefault;
end;
end;
procedure TdmData.qrColoursAfterPost(DataSet: TDataSet);
var
ID:Integer;
begin
try
Screen.Cursor:=crHourGlass;
qrColours.DisableControls;
ID:=qrColours.FieldByName('ID').AsInteger;
qrColours.Close;
qrColours.Open;
qrColours.Locate('ID',ID,[]);
finally
qrColours.EnableControls;
Screen.Cursor:=crDefault;
end;
end;
procedure TdmData.qrCusovsAfterPost(DataSet: TDataSet);
var
ID:Integer;
begin
try
Screen.Cursor:=crHourGlass;
qrCusovs.DisableControls;
ID:=qrCusovs.FieldByName('ID').AsInteger;
qrCusovs.Close;
qrCusovs.Open;
qrCusovs.Locate('ID',ID,[]);
finally
qrCusovs.EnableControls;
Screen.Cursor:=crDefault;
end;
end;
procedure TdmData.dmDataCreate(Sender: TObject);
begin
dbMain.Params.Values['PATH']:=ExtractFilePath(ExpandFileName(ParamStr(0)));
if dbMain.Params.Values['PATH'][Length(dbMain.Params.Values['PATH'])]='\' then
dbMain.Params.Values['PATH']:=dbMain.Params.Values['PATH']+'DATA\'
else
dbMain.Params.Values['PATH']:=dbMain.Params.Values['PATH']+'\DATA\';
Filters:=TStringList.Create;
end;
procedure TdmData.qrFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
var
I:Integer;
S,FName,FValue:String;
begin
Accept:=True;
FName:='';
FValue:='';
I:=Filters.IndexOf('['+DataSet.Name+']');
if I<>-1 then
begin
S:=Filters[I+1];
FName:=Copy(S,1,Pos('=',S)-1);
Delete(S,1,Pos('=',S));
FValue:=S;
end;
if FName<>'' then
begin
case DataSet.FieldByName(FName).DataType of
ftFixedChar,
ftWideString,
ftString:Accept:=Pos(AnsiUpperCase(FValue),AnsiUpperCase(DataSet.FieldByName(FName).AsString))>0;
ftSmallint,
ftInteger,
ftLargeint,
ftWord:Accept:=StrToInt(FValue)=DataSet.FieldByName(FName).AsInteger;
ftBoolean:Accept:=(AnsiUpperCase(FValue)='TRUE')=DataSet.FieldByName(FName).AsBoolean;
ftFloat,
ftCurrency:Accept:=StrToFloat(FValue)=DataSet.FieldByName(FName).AsCurrency;
ftDate:Accept:=StrToDate(FValue)=DataSet.FieldByName(FName).AsDateTime;
ftTime:Accept:=StrToTime(FValue)=DataSet.FieldByName(FName).AsDateTime;
ftDateTime:Accept:=StrToDateTime(FValue)=DataSet.FieldByName(FName).AsDateTime;
else
raise Exception.Create('=х ьюцэр тёЄрэютшЄш Ї¦ы№ЄЁ эр тшсЁрэх яюых.');
end;
end;
end;
function TdmData.InputModel:Integer;
begin
Screen.Cursor:=crHourGlass;
Result:=-1;
with TfmModels.Create(Application) do
try
Screen.Cursor:=crDefault;
if ShowModal=mrOK then
Result:=qrModels.FieldByName('ID').AsInteger;
finally
Screen.Cursor:=crDefault;
end;
end;
function TdmData.InputAMT:Integer;
begin
Screen.Cursor:=crHourGlass;
Result:=-1;
with TfmAMTs.Create(Application) do
try
Screen.Cursor:=crDefault;
if ShowModal=mrOK then
Result:=qrAMTs.FieldByName('ID').AsInteger;
finally
Screen.Cursor:=crDefault;
end;
end;
function TdmData.InputCusov:Integer;
begin
Screen.Cursor:=crHourGlass;
Result:=-1;
with TfmCusovs.Create(Application) do
try
Screen.Cursor:=crDefault;
if ShowModal=mrOK then
Result:=qrCusovs.FieldByName('ID').AsInteger;
finally
Screen.Cursor:=crDefault;
end;
end;
function TdmData.InputColour:Integer;
begin
Screen.Cursor:=crHourGlass;
Result:=-1;
with TfmColours.Create(Application) do
try
Screen.Cursor:=crDefault;
if ShowModal=mrOK then
Result:=qrColours.FieldByName('ID').AsInteger;
finally
Screen.Cursor:=crDefault;
end;
end;
procedure TdmData.qrAreasBeforeDelete(DataSet: TDataSet);
begin
if Application.MessageBox('Tш тяхтэхэ¦, •ю срцр¦Єх чэш•шЄш тшсЁрэшщ чряшё.',PChar(Application.Title),MB_ICONQUESTION or MB_YESNO)<>IDYES then
Abort;
end;
procedure TdmData.qrModelsBeforeDelete(DataSet: TDataSet);
begin
if Application.MessageBox('Tш тяхтэхэ¦, •ю срцр¦Єх чэш•шЄш тшсЁрэшщ чряшё.',PChar(Application.Title),MB_ICONQUESTION or MB_YESNO)<>IDYES then
Abort;
end;
procedure TdmData.qrAMTsBeforeDelete(DataSet: TDataSet);
begin
if Application.MessageBox('Tш тяхтэхэ¦, •ю срцр¦Єх чэш•шЄш тшсЁрэшщ чряшё.',PChar(Application.Title),MB_ICONQUESTION or MB_YESNO)<>IDYES then
Abort;
end;
procedure TdmData.qrColoursBeforeDelete(DataSet: TDataSet);
begin
if Application.MessageBox('Tш тяхтэхэ¦, •ю срцр¦Єх чэш•шЄш тшсЁрэшщ чряшё.',PChar(Application.Title),MB_ICONQUESTION or MB_YESNO)<>IDYES then
Abort;
end;
procedure TdmData.qrCusovsBeforeDelete(DataSet: TDataSet);
begin
if Application.MessageBox('Tш тяхтэхэ¦, •ю срцр¦Єх чэш•шЄш тшсЁрэшщ чряшё.',PChar(Application.Title),MB_ICONQUESTION or MB_YESNO)<>IDYES then
Abort;
end;
procedure TdmData.qrUsersAfterPost(DataSet: TDataSet);
var
User:String;
begin
try
Screen.Cursor:=crHourGlass;
qrUsers.DisableControls;
User:=qrUsers.FieldByName('USERNAME').AsString;
qrUsers.Close;
qrUsers.Open;
qrUsers.Locate('USERNAME',User,[]);
finally
qrUsers.EnableControls;
Screen.Cursor:=crDefault;
end;
end;
initialization
Randomize;
end.
еще рефераты
Еще работы по разное