Реляційна база данних трудової книжки
Міністерство освіти і науки України
ФАКУЛЬТЕТ ІНФОРМАТИКИ
КАФЕДРА
Реєстраційний №________
Дата ___________________
КУРСОВА РОБОТА
Тема:
Реляційна база данних трудової книжки
Рекомендована до захисту
“____” __________ 2008р.
Робота захищена
“____” __________ 2008р.
з оцінкою
_____________________
Підписи членів комісії
Зміст
Вступ
Теорія
Практична частина
Висновки
Література
Вступ
Головною задачею нашою роботи є створення програми роботи реляційної БД трудової книжки, причому в якості мови реалізації була вибрана мова програмування С++.
Що стосується загальної термінології реляційного підходу, ми будемо активно користуватися відповідними термінами. До таких термінів ставляться назви реляційних операцій: селекція, проекція, з'єднання; назви теоретико-множинних операцій: об'єднання, перетинання, різниця й т.д.
ТЕОРІЯ
Основні цілі розроблювачів БД можна сформулювати в такий спосіб:
забезпечити ненавігаційний інтерфейс високого рівня користувача із системою, що дозволяє досягти незалежності даних і дати можливість користувачам працювати максимально ефективно;
забезпечити різноманіття припустимих способів використання СУБД, включаючи програмувальні транзакції, діалогові транзакції й генерацію звітів;
підтримувати динамічно змінюване середовище баз даних, у якій відносини, індекси, подання, транзакції й інші об'єкти можуть легко додаватися й знищуватися без припинення нормального функціонування системи;
забезпечити можливість паралельної роботи з однією базою даних багатьох користувачів з допущенням паралельної модифікації об'єктів бази даних при наявності необхідних засобів захисту цілісності бази даних;
забезпечити засобу відновлення погодженого стану баз даних після різного роду збоїв апаратури або програмне забезпечення;
забезпечити гнучкий механізм, що дозволяє визначати різні подання збережених даних й обмежувати цими поданнями доступ користувачів до бази даних по вибірці й модифікації на основі механізму авторизації;
забезпечити продуктивність системи при виконанні згаданих функцій, порівнянну із продуктивністю існуючих СУБД низького рівня (наприклад, ієрархічних або мережних).
Насамперед відзначимо, що в переважній більшості поставлені цілі при розробці System R були досягнуті. Розглянемо тепер, якими засобами були досягнуті ці мети і як більш точно можна інтерпретувати їх у контексті System R.
Основою System R є реляційна мова SQL. Іноді його називають мовою запитів або мовою маніпулювання даними, але насправді його можливості набагато ширше. Засобами SQL (з відповідною системною підтримкою) вирішуються багато хто з поставлених цілей. Мова SQL включає засобу динамічної компіляції запитів, на основі чого можлива побудова діалогових систем обробки запитів. Допускається динамічна параметризація статично відкомпільованих запитів, у результаті чого можливе побудова ефективних (не потребуючої динамічної компіляції) діалогових систем зі стандартними наборами (параметризуємих) запитів.
Засобами SQL визначаються всі доступні користувачеві об'єкти баз даних: таблиці, індекси, подання. В System R були й засобу для знищення будь-якого такого об'єкта. Відповідні оператори мови можуть виконуватися в будь-який момент, і можливість виконання операції цим користувачем залежить від раніше наданих йому прав.
Що стосується цілісності баз даних, то в System R під цілісним станом бази даних розуміється стан, що задовольняє набору даних предикатів, що зберігають при базі, цілісності. Ці предикати, називані в System R умовами цілісності (assertions), задаються також засобами мови SQL. Будь-яка пропозиція мови виконується в межах деякої транзакції - неподільної в змісті стану бази дані послідовності операторів мови. Неподільність означає, що всі зміни, зроблені в межах однієї транзакції, або цілком відображаються в стані бази даних, або повністю в ньому відсутні. Остання можливість виникає при відкоті транзакції, що може відбутися з ініціативи користувача (при виконанні відповідного оператора SQL) або з ініціативи системи. Однієї із причин відкоту транзакції з ініціативи системи є саме порушення цілісності бази даних у результаті дій даної транзакції (інші можливі умови відкоту транзакції з ініціативи системи ми розглянемо пізніше). Мова SQL System R містить засіб установки так званих крапок збереження (savepoint). При ініциируємом користувачем відкоті транзакції можна вказати номер крапки збереження, вище якої відкіт не поширюється. Ініциіруємий системою відкіт транзакції виробляється до найближчої крапки збереження, у якій умова, що викликала відкіт, уже відсутній. Зокрема, відкіт, ініційований через порушення умови цілісності, виробляється до найближчої крапки збереження, у якій умови цілісності дотримані. (Помітимо, що засобу установки крапок збереження відсутні в комерційних розширеннях System R.)
Природно, що для реального виконання відкоту транзакції необхідне запам'ятовування деякої інформації про виконання транзакції. В System R для цих й інших цілей використається спеціальний набір даних - журнал, у який містяться записи об всіх змініючих стан бази даних операціях всіх транзакцій. При відкоті транзакції відбувається процес зворотного виконання транзакції (undo), у ході якого у зворотному порядку виконуються всі зміни, зафіксовані в журналі.
У мові SQL є засіб визначення так званих умовних впливів (triggers), що дозволяють автоматично підтримувати цілісність бази даних при модифікаціях її об'єктів. В System R умовний вплив - це каталогізована операція модифікації, для якої задане умова її автоматичного виконання. Особливо істотна наявність такого апарата у зв'язку з наявністю розглянутих нижче подань бази даних, який може бути обмежений доступ до бази даних для ряду користувачів. Можлива ситуація, коли такі користувачі просто не можуть дотримувати цілісності бази даних без автоматичного виконання умовних впливів, оскільки вони "не бачать" всієї бази даних й, зокрема, не можуть представити всіх обмежень її цілісності. Помітимо, що за винятком ранніх публікацій по System R реалізація механізму умовних впливів ніде не описувалася, хоча в принципі підходи до реалізації досить зрозумілі. Цей механізм не реалізований у комерційних системах, що виникли на базі System R. Видимо, це пов'язане з виникаючими додатковими непередбаченими для користувачів накладними витратами при виконанні транзакцій. (Помітимо, що деякі еквівалентні по можливостях засобу реалізовані, наприклад, у СУБД Ingres й Oracle, а тепер обговорюється можливість включення подібних механізмів у наступний стандарт мови SQL - SQL-3.)
Мова SQL містить засобу визначення подань. Подання - іменований запит, що зберігає це в базі даних, на вибірку даних (з однієї або декількох таблиць). Оскільки SQL - це реляционный мова, то результатом виконання будь-якого запиту на вибірку є таблиця, і тому концептуально можна ставитися до будь-якого подання як до таблиці (при визначенні подання можна, зокрема, привласнити імена полям цієї таблиці). У мові допускається використання раніше певних подань практично скрізь, де допускається використання таблиць (з деякими обмеженнями із приводу можливостей модифікації бази даних через подання). Наявність можливості визначати подання в сукупності з розвитий системою авторизації дозволяє обмежити доступ деяких користувачів до бази даних виділеним набором подань.
Авторизація доступу до бази даних заснована також на засобах SQL. При створенні будь-якого об'єкта бази даних виконуючу цю операцію користувач стає повновладним власником цього об'єкта, тобто може виконувати стосовно цього об'єкта будь-яку функцію з визначеного набору. Далі цей користувач може виконати оператор SQL, що робить передачу всіх його прав на цей об'єкт (або їхньої підмножини) будь-якому іншому користувачеві. Зокрема, цьому користувачеві може бути передане право на передачу всіх переданих йому прав (або їхньої частини) третьому користувачеві й т.д. Одним із прав користувача стосовно об'єкта є право на вилучення в інших користувачів всіх або деяких прав, які раніше їм були передані. Ця операція поширюється транзитивно на всіх подальших спадкоємців цих прав.
Наявність у мові засобів визначення подань й авторизації в принципі дозволяє обійтися при експлуатації System R без традиційного адміністратора баз даних, оскільки практично всі системні дії виробляються на основі засобів SQL. Проте якщо організаційно адміністратор баз даних потрібно, то його робота досить спрощується за рахунок уніфікованого набору засобів керування. Крім того, в System R каталоги баз даних підтримуються також у вигляді таблиць, і до них застосовані всі запити мови SQL. Помітимо, що в комерційних СУБД з'явився ряд додаткових утиліт, не пов'язаних з мовою SQL (наприклад, утиліти збору статистики або масове завантаження бази даних), і в цих системах, видимо, без адміністратора бази даних не обійтися.
Що стосується забезпечення паралельної роботи багатьох користувачів з однією базою даних, те основний підхід System R полягає в тому, що користувач не зобов'язаний знати про наявність інших, конкуруючих з ним за доступ до бази даних, користувачів, тобто система відповідальна за забезпечення ізольованості користувачів з гарантією їхнього взаємного невпливу в межах транзакцій. Із цього треба, по-перше, що в інтерфейсі користувача із системою (тобто в мові SQL) не повинне бути засобів регулювання взаємодій з іншими користувачами й, по-друге, що система повинна забезпечити автоматичну сериализацию набору транзакцій, тобто забезпечити режим виконання цього набору транзакцій, еквівалентний за кінцевим результатом деякому послідовному виконанню цих транзакцій. Ця проблема вирішується в System R за рахунок автоматичного виконання синхронизационных захватів (багато хто воліють використати термін "блокування") стосовно всім измененяемым об'єктам бази даних. Є ряд тонкостей, пов'язаних з такою синхронізацією, на яких ми зупинимося нижче.
Одним з основних вимог до СУБД, взагалі, і до System R, зокрема, є забезпечення надійності баз даних стосовно різного роду збоям. До таких збоїв можуть ставитися програмні помилки прикладного й системного рівня, збої процесора, поломки зовнішніх носіїв і т.д. Зокрема, до одному з видів збоїв можна віднести згадувані вище порушення цілісності бази даних й автоматичний, ініциіруємий системою відкіт транзакції - це системний засіб відновлення бази даних після збоїв такого роду. Як ми відзначали, відновлення відбувається шляхом зворотного виконання транзакції на основі інформації про внесені нею змінах, зафіксованих у журналі. На інформації журналу засноване відновлення бази даних і після збоїв іншого роду. Керування журнализацией і відновленням в System R досить цікаво, застосовувані методи в ряді випадків відрізняються від методів, використовуваних в інших СУБД.
Що стосується природних вимог до ефективності системи, те тут основні рішення зв'язані зі специфікою фізичної організації баз даних на зовнішній пам'яті, буферизацієй використовуваних сторінок бази даних в оперативній пам'яті й розвитий технікою оптимізації запитів, сформульованих на SQL, виробленої на стадії їхньої компіляції.
Структурна організація System R цілком погодиться з поставленими при її розробці цілями й обраними рішеннями. Основними структурними компонентами System R є система керування реляционной пам'яттю (Relational Storage System - RSS) і компілятор запитів мови SQL. RSS забезпечує інтерфейс досить низького, але достатнього для реалізації SQL рівня для доступу до збережених даних. Синхронізація транзакцій, журнализация змін і відновлення баз даних після збоїв також ставляться до числа функцій RSS. Компілятор запитів використає інтерфейс RSS для доступу до різноманітної довідкової інформації (каталоги відносин, індексів, прав доступу, умов цілісності, умовних впливів і т.д.) і робить робочі програми, виконувані надалі також з використанням інтерфейсу RSS. Таким чином, система природно розділяється на два рівні: рівень керування пам'яттю й синхронізацією, фактично, що не залежить від базової мови запитів системи, і мовний рівень (рівень SQL), на якому вирішується більшість проблем System R. Помітимо, що ця незалежність скоріше умовна, чим абсолютна: мова SQL можна замінити на іншу мову, але він повинен мати приблизно таку ж семантику.
Далі ми послідовно розглянемо особливості організації RSS, процес компіляції й оптимізації запитів і техніку виконання відкомпільованих транзакцій (включаючи відзначену вище можливість динамічної компіляції запитів).
Практична частина
Лістінг програм
Головний програма БД – ТРУДОВА КНИЖКА.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit9.h"
#include "Unit22.h"
#include "Unit23.h"
#include "Unit4.h"
#include "Unit24.h"
#include "Unit27.h"
#include "Unit28.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tzarplata *zarplata;
Tz_nastr *z_nastr;
extern TOKBottomDlg *OKBottomDlg;
extern TForm4 *Form4;
extern Talgo *algo;
//---------------------------------------------------------------------------
__fastcall Tzarplata::Tzarplata(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N9Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_const_nar";
z_nastr->Table1->Open();
z_nastr->Caption = "Настроювання констант нарахування";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N6Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_vch_stavka_osv";
z_nastr->Table1->Open();
z_nastr->Caption = "Ставка за освітою";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N10Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_vch_visluga";
z_nastr->Table1->Open();
z_nastr->Caption = "Надбавка за вислугу років";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N13Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_const_vidr";
z_nastr->Table1->Open();
z_nastr->Caption = "Настроювання констант відрахування";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N12Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_likarnyani";
z_nastr->Table1->Open();
z_nastr->Caption = "Нарахування лікарняних";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N14Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_derzsluz_visluga";
z_nastr->Table1->Open();
z_nastr->Caption = "Держслужбовці - вислуга";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N7Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_vch_kateg";
z_nastr->Table1->Open();
z_nastr->Caption = "Вчителі - надбавка за категорію";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N8Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_vch_kruzok";
z_nastr->Table1->Open();
z_nastr->Caption = "Вчителі - за кружок";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N11Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_vch_perevirkazosh";
z_nastr->Table1->Open();
z_nastr->Caption = "Вчителі - перевірка зошитів";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N15Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_spivrob_posadi";
z_nastr->Table1->Open();
z_nastr->Caption = "Співробітники (інші) - посади";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N16Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_derzsluz_rang";
z_nastr->Table1->Open();
z_nastr->Caption = "Держслужбовці - ранг";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N17Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_derzsluz_intensiv";
z_nastr->Table1->Open();
z_nastr->Caption = "Держслужбовці - інтенсивність";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N18Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_derzsluz_premiya";
z_nastr->Table1->Open();
z_nastr->Caption = "Держслужбовці - премія";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N3Click(TObject *Sender)
{
Form4->sub>kid = 22;
Form4->Button4->Enabled=true;
Form4->ShowModal();
vhidzarp->potoch=0;
vhidzarp->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N4Click(TObject *Sender)
{
Form4->sub>kid = 22;
Form4->Button4->Enabled=true;
Form4->ShowModal();
algo->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N20Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_derzsluz_posada";
z_nastr->Table1->Open();
z_nastr->Caption = "Держслужбовці - посади";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N5Click(TObject *Sender)
{
z_nastr->Table1->Close();
z_nastr->Table1->TableName = "z_nastr_adm_posadi";
z_nastr->Table1->Open();
z_nastr->Caption = "Співробітники (адміністрація) - посади";
z_nastr->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N2Click(TObject *Sender)
{
z_oper->Show();
}
//---------------------------------------------------------------------------
void __fastcall Tzarplata::N19Click(TObject *Sender)
{
vhidzarp->potoch=1;
vhidzarp->ShowModal();
}
//---------------------------------------------------------------------------
Додаткові модулі для роботи з SQL запитами.
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include "Unit24.h"
#include "Unit25.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "wwdblook"
#pragma resource "*.dfm"
Talgo *algo;
extern Tplusalgo *plusalgo;
int activeflag=1;
//---------------------------------------------------------------------------
__fastcall Talgo::Talgo(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall Talgo::Button1Click(TObject *Sender)
{
knopka();
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo1Change(TObject *Sender)
{
if(activeflag){
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add(
"select constanta from z_nastr_vch_stavka_osv where id="+wwDBLookupCombo1->Text
);
Query1->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::DBCheckBox1Click(TObject *Sender)
{
Table1->Edit();
if(CheckBox1->Checked){
Table1->Fields->FieldByName("isvchitel")->AsInteger = 1;
GroupBox1->Visible=true;
}
else
{
Table1->Fields->FieldByName("isvchitel")->AsInteger = 0;
GroupBox1->Visible=false;
}
Table1->Post();
}
//---------------------------------------------------------------------------
void __fastcall Talgo::FormActivate(TObject *Sender)
{
activeflag=1;
AnsiString x="";
Query21->Close();
Query21->SQL->Clear();
Query21->SQL->Add(
"select content from variables where variables.var='sub>kobid'"
);
Query21->Open();
int skobid = Query21->Fields->FieldByName("content")->AsInteger;
Query21->Close();
Query21->SQL->Clear();
Query21->SQL->Add(
"select count(z_algo.id) as cnt from z_algo,variables where z_algo.skobid=variables.content and variables.var='sub>kobid'"
);
Query21->Open();
if(!(Query21->Fields->FieldByName("cnt")->AsInteger>0)){
Query21->Close();
Query21->SQL->Clear();
Query21->SQL->Add(
x+"insert into z_algo values( 0,"+skobid+",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) "
);
Query21->ExecSQL();
}
//Table1->Close();
Table1->Filtered=false;
Table1->Filter=x+"skobid = "+skobid;
Table1->Filtered=true;
Table1->Open();
Table2->Close();
Table2->Open();
// vchiteli
CheckBox1->Checked = Table1->Fields->FieldByName("isvchitel")->AsInteger ? true:false;
CheckBox3->Checked = Table1->Fields->FieldByName("iskategoriya")->AsInteger ? true:false;
CheckBox2->Checked = Table1->Fields->FieldByName("isnachskgod")->AsInteger ? true:false;
CheckBox4->Checked = Table1->Fields->FieldByName("isstklasigod")->AsInteger ? true:false;
CheckBox5->Checked = Table1->Fields->FieldByName("isgpdgod")->AsInteger ? true:false;
CheckBox6->Checked = Table1->Fields->FieldByName("iskruzok")->AsInteger ? true:false;
CheckBox7->Checked = Table1->Fields->FieldByName("isklasruk")->AsInteger ? true:false;
CheckBox8->Checked = Table1->Fields->FieldByName("iskabinet")->AsInteger ? true:false;
CheckBox9->Checked = Table1->Fields->FieldByName("isproverkatet")->AsInteger ? true:false;
CheckBox10->Checked = Table1->Fields->FieldByName("ispsiholog")->AsInteger ? true:false;
CheckBox11->Checked = Table1->Fields->FieldByName("isorganizator")->AsInteger ? true:false;
CheckBox23->Checked = Table1->Fields->FieldByName("ismuzskola")->AsInteger ? true:false;
//utrimannya
CheckBox12->Checked = Table1->Fields->FieldByName("isprofsoyuz")->AsInteger ? true:false;
CheckBox13->Checked = Table1->Fields->FieldByName("islgotnik")->AsInteger ? true:false;
CheckBox14->Checked = Table1->Fields->FieldByName("ismnogodetmama")->AsInteger ? true:false;
CheckBox15->Checked = Table1->Fields->FieldByName("isodinokmama")->AsInteger ? true:false;
CheckBox16->Checked = Table1->Fields->FieldByName("isvdova")->AsInteger ? true:false;
CheckBox17->Checked = Table1->Fields->FieldByName("isvdovec")->AsInteger ? true:false;
CheckBox18->Checked = Table1->Fields->FieldByName("isdetiinvalidi")->AsInteger ? true:false;
CheckBox21->Checked = Table1->Fields->FieldByName("ispens")->AsInteger ? true:false;
//sotrudniki
CheckBox19->Checked = Table1->Fields->FieldByName("issotrudnik")->AsInteger ? true:false;
RadioButton1->Checked = Table1->Fields->FieldByName("isadminsotr")->AsInteger ? true:false;
//derzsluzbovci
CheckBox20->Checked = Table1->Fields->FieldByName("isderzsluzbovec")->AsInteger ? true:false;
}
//---------------------------------------------------------------------------
void __fastcall Talgo::FormClose(TObject *Sender, TCloseAction &Action)
{
activeflag=0;
Table1->Close();
Table2->Close();
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo2Change(TObject *Sender)
{
if(activeflag){
Query2->Close();
Query2->SQL->Clear();
Query2->SQL->Add(
"select constanta from z_nastr_vch_kateg where id="+wwDBLookupCombo2->Text
);
Query2->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo3Change(TObject *Sender)
{
if(activeflag){
Query3->Close();
Query3->SQL->Clear();
Query3->SQL->Add(
"select constanta from z_nastr_vch_perevirkazosh where id="+wwDBLookupCombo3->Text
);
Query3->Open();
}
}
//---------------------------------------------------------------------------
void Talgo::knopka()
{
AnsiString x="";
vbazu();
Query8->SQL->Clear();
Query8->SQL->Add(" delete from z_algo_result ");
Query8->ExecSQL();
Query8->SQL->Clear();
Query8->SQL->Add(" insert into z_algo_result values(1,0,0,0,0)");
Query8->ExecSQL();
//vchiteli
Query4->Close();
Query4->Open();
char buf[30];
sprintf(buf,"%f",Query4->Fields->FieldByName("res")->AsFloat);
Query8->SQL->Clear();
Query8->SQL->Add(
x+" update z_algo_result set vchzarp="+buf
);
Query8->ExecSQL();
//sotrudnik inshi
if(Table1->Fields->FieldByName("issotrudnik")->AsInteger && RadioButton2->Checked){
sprintf(buf,"%f", DBText26->Caption.ToDouble() );
Query8->SQL->Clear();
Query8->SQL->Add(
x+" update z_algo_result set spivrobzarp = "+buf
);
Query8->ExecSQL();
}
//sotrudnik admin
if(Table1->Fields->FieldByName("issotrudnik")->AsInteger && RadioButton1->Checked){
sprintf(buf,"%f",Table1->Fields->FieldByName("admsotrstavka")->AsFloat * (1+DBText32->Caption.ToDouble()/100));
Query8->SQL->Clear();
Query8->SQL->Add(
x+" update z_algo_result set spivrobzarp = "+buf
);
Query8->ExecSQL();
}
//derzsluzbovec
if(Table1->Fields->FieldByName("isderzsluzbovec")->AsInteger){
sprintf(buf,"%f",(DBText15->Caption.ToDouble()+DBText17->Caption.ToDouble())*(1+DBText19->Caption.ToDouble()/100+DBText21->Caption.ToDouble()/100+DBText29->Caption.ToDouble()/100));
Query8->SQL->Clear();
Query8->SQL->Add(
x+" update z_algo_result set derzsluzzarp = "+buf
);
Query8->ExecSQL();
}
//utrimano
if(wwDBLookupCombo6->Text.ToInt() == 1 ){
Query9->Close();
Query9->Open();
sprintf(buf,"%f",Query9->Fields->FieldByName("res")->AsFloat);
}
if(wwDBLookupCombo6->Text.ToInt() == 2 ){
Query16->Close();
Query16->Open();
sprintf(buf,"%f",Query16->Fields->FieldByName("res")->AsFloat);
}
Query8->SQL->Clear();
Query8->SQL->Add(
x+" update z_algo_result set utrim="+buf
);
Query8->ExecSQL();
Query10->Close();
Query10->Open();
}
void Talgo::vbazu(){
Table1->Refresh();
Table1->Edit();
// uchiteli
Table1->Fields->FieldByName("iskategoriya")->AsInteger = CheckBox3->Checked;
Table1->Fields->FieldByName("isnachskgod")->AsInteger = CheckBox2->Checked ? 1:0;
Table1->Fields->FieldByName("isstklasigod")->AsInteger = CheckBox4->Checked ? 1:0;
Table1->Fields->FieldByName("isgpdgod")->AsInteger = CheckBox5->Checked ? 1:0;
Table1->Fields->FieldByName("iskruzok")->AsInteger = CheckBox6->Checked ? 1:0;
Table1->Fields->FieldByName("isklasruk")->AsInteger = CheckBox7->Checked ? 1:0;
Table1->Fields->FieldByName("iskabinet")->AsInteger = CheckBox8->Checked ? 1:0;
Table1->Fields->FieldByName("isproverkatet")->AsInteger = CheckBox9->Checked ? 1:0;
Table1->Fields->FieldByName("ispsiholog")->AsInteger = CheckBox10->Checked ? 1:0;
Table1->Fields->FieldByName("isorganizator")->AsInteger = CheckBox11->Checked ? 1:0;
Table1->Fields->FieldByName("ismuzskola")->AsInteger = CheckBox23->Checked ? 1:0;
//sotr
Table1->Fields->FieldByName("isadminsotr")->AsInteger = RadioButton1->Checked ? 1:0;
// urtimannya
Table1->Fields->FieldByName("isprofsoyuz")->AsInteger=CheckBox12->Checked ? 1:0;
Table1->Fields->FieldByName("islgotnik")->AsInteger =CheckBox13->Checked ? 1:0;
Table1->Fields->FieldByName("ismnogodetmama")->AsInteger=CheckBox14->Checked ? 1:0;
Table1->Fields->FieldByName("isodinokmama")->AsInteger=CheckBox15->Checked ? 1:0;
Table1->Fields->FieldByName("isvdova")->AsInteger=CheckBox16->Checked ? 1:0;
Table1->Fields->FieldByName("isvdovec")->AsInteger=CheckBox17->Checked ? 1:0;
Table1->Fields->FieldByName("isdetiinvalidi")->AsInteger=CheckBox18->Checked ? 1:0;
Table1->Fields->FieldByName("ispens")->AsInteger=CheckBox21->Checked ? 1:0;
Table1->Post();
}
void __fastcall Talgo::CheckBox3Click(TObject *Sender)
{
vbazu();
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo4Change(TObject *Sender)
{
if(activeflag){
Query5->Close();
Query5->SQL->Clear();
Query5->SQL->Add(
"select constanta from z_nastr_vch_klasruk where id="+wwDBLookupCombo4->Text
);
Query5->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo5Change(TObject *Sender)
{
if(activeflag){
Query6->Close();
Query6->SQL->Clear();
Query6->SQL->Add(
"select constanta from z_nastr_vch_visluga where id="+wwDBLookupCombo5->Text
);
Query6->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo6Change(TObject *Sender)
{
if(activeflag){
Query7->Close();
Query7->SQL->Clear();
Query7->SQL->Add(
"select constanta from z_nastr_sposobpensfond where id="+wwDBLookupCombo6->Text
);
Query7->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::Button2Click(TObject *Sender)
{
vbazu();
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo7Change(TObject *Sender)
{
if(activeflag){
Query11->Close();
Query11->SQL->Clear();
Query11->SQL->Add(
"select constanta,znach from z_nastr_adm_posadi where id="+wwDBLookupCombo7->Text
);
Query11->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::CheckBox19Click(TObject *Sender)
{
Table1->Edit();
if(CheckBox19->Checked){
Table1->Fields->FieldByName("issotrudnik")->AsInteger = 1;
GroupBox18->Visible=true;
}
else
{
Table1->Fields->FieldByName("issotrudnik")->AsInteger = 0;
GroupBox18->Visible=false;
}
Table1->Post();
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo8Change(TObject *Sender)
{
if(activeflag){
Query12->Close();
Query12->SQL->Clear();
Query12->SQL->Add(
"select constanta,znach from z_nastr_derzsluz_posada where id="+wwDBLookupCombo8->Text
);
Query12->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo9Change(TObject *Sender)
{
if(activeflag){
Query13->Close();
Query13->SQL->Clear();
Query13->SQL->Add(
"select constanta,znach from z_nastr_derzsluz_rang where id="+wwDBLookupCombo9->Text
);
Query13->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::CheckBox20Click(TObject *Sender)
{
Table1->Edit();
if(CheckBox20->Checked){
Table1->Fields->FieldByName("isderzsluzbovec")->AsInteger = 1;
GroupBox20->Visible=true;
}
else
{
Table1->Fields->FieldByName("isderzsluzbovec")->AsInteger = 0;
GroupBox20->Visible=false;
}
Table1->Post();
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo10Change(TObject *Sender)
{
if(activeflag){
Query14->Close();
Query14->SQL->Clear();
Query14->SQL->Add(
"select constanta,znach from z_nastr_derzsluz_intensiv where id="+wwDBLookupCombo10->Text
);
Query14->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo11Change(TObject *Sender)
{
if(activeflag){
Query15->Close();
Query15->SQL->Clear();
Query15->SQL->Add(
"select constanta,znach from z_nastr_derzsluz_premiya where id="+wwDBLookupCombo11->Text
);
Query15->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo13Change(TObject *Sender)
{
if(activeflag){
Query17->Close();
Query17->SQL->Clear();
Query17->SQL->Add(
"select constanta,znach from z_nastr_vch_visluga where id="+wwDBLookupCombo13->Text
);
Query17->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo12Change(TObject *Sender)
{
if(activeflag){
Query18->Close();
Query18->SQL->Clear();
Query18->SQL->Add(
"select a.constanta, a.znach, greatest(a.znach,b.znach) as superznach from z_nastr_spivrob_posadi a,z_nastr_const_nar b where a.id="+wwDBLookupCombo12->Text+
" and b.id=1 "
);
Query18->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo14Change(TObject *Sender)
{
if(activeflag){
Query19->Close();
Query19->SQL->Clear();
Query19->SQL->Add(
"select constanta,znach from z_nastr_derzsluz_visluga where id="+wwDBLookupCombo14->Text
);
Query19->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall Talgo::wwDBLookupCombo15Change(TObject *Sender)
{
if(activeflag){
Query20->Close();
Query20->SQL->Clear();
Query20->SQL->Add(
"select constanta,znach from z_nastr_likarnyani where id="+wwDBLookupCombo15->Text
);
Query20->Open();
}
}
//---------------------------------------------------------------------------
Робота з програмою
Головне вікно управління персоналом
Вікно введення та редагування персональних даних
Всі листинги а також приклади роботи програми знаходяться на дискеті
Висновки
Основні ідеї сучасної інформаційної технології базуються на концепції, відповідно до якої дані повинні бути організовані в бази даних з метою адекватного відображення реального миру, що змінюється, і задоволення інформаційних потреб користувачів. Ці бази даних створюються й функціонують під керуванням спеціальних програмних комплексів, називаних системами керування базами даних (СУБД).
Збільшення обсягу й структурної складності збережених даних, розширення кола користувачів інформаційних систем привели до широкого поширення найбільш зручних і порівняно простих для розуміння реляційних (табличних) СУБД. Для забезпечення одночасного доступу до даних безлічі користувачів, нерідко розташованих досить далеко друг від друга й від місця зберігання баз даних, створені мережні версії СУБД. У них тим або іншим шляхом вирішуються специфічні проблеми паралельних процесів, цілісності (правильності) і безпеки даних, а також санкціонування доступу.
Література
Дейт К. Руководство по реляционной СУБД DB2. - М.: Финансы и статистика, 1988. - 320 с.
Кириллов В.В. Основы проектирования реляционных баз данных. Учебное пособие. - СПб.: ИТМО, 1994. - 90 с.
Мейер М. Теория реляционных баз данных. -М.: Мир, 1987. - 608 с.
Ульман Дж. Базы данных на Паскале. -М.: Машиностроение, 1990. - 386 с.