Проектування дволанкової розподіленої інформаційної системи для роботи з базами даних із використанням SQL Interbase
Створення і використання індексів та переглядів БД. Створення і використання тригерів, генераторів та збережених процедур на боці SQL-сервера. Отримання практичних навичок обміну даними між прикладенням і БД. Перегляд записів зв’язаних таблиць БД.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | украинский |
Дата добавления | 08.06.2009 |
Размер файла | 1,9 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
FieldName = 'SEX'
Origin = 'PERS.SEX'
Size = 1
end
object pr_QueryAGE: TSmallintField
Alignment = taCenter
DisplayLabel = 'Возраст'
DisplayWidth = 7
FieldKind = fkCalculated
FieldName = 'AGE'
Calculated = True
end
end
object insert_StoredProc: TStoredProc
ObjectView = True
DatabaseName = 'dbP'
StoredProcName = 'INSERTDBP'
Left = 308
Top = 263
ParamData = <
item
DataType = ftString
Name = 'PDEP'
ParamType = ptInput
end
item
DataType = ftString
Name = 'PFAM'
ParamType = ptInput
end
item
DataType = ftString
Name = 'PNAM'
ParamType = ptInput
end
item
DataType = ftString
Name = 'PPAR'
ParamType = ptInput
end
item
DataType = ftInteger
Name = 'PYEAR_B'
ParamType = ptInput
end
item
DataType = ftString
Name = 'PSEX'
ParamType = ptInput
end>
end
object update_StoredProc: TStoredProc
ObjectView = True
DatabaseName = 'dbP'
StoredProcName = 'UPDATEDBP'
Left = 366
Top = 263
ParamData = <
item
DataType = ftString
Name = 'PDEP'
ParamType = ptInput
end
item
DataType = ftString
Name = 'PFAM'
ParamType = ptInput
end
item
DataType = ftString
Name = 'PNAM'
ParamType = ptInput
end
item
DataType = ftString
Name = 'PPAR'
ParamType = ptInput
end
item
DataType = ftInteger
Name = 'PYEAR_B'
ParamType = ptInput
end
item
DataType = ftString
Name = 'PSEX'
ParamType = ptInput
end
item
DataType = ftInteger
Name = 'NUMBER'
ParamType = ptOutput
end>
end
object delete_StoredProc: TStoredProc
ObjectView = True
DatabaseName = 'dbP'
StoredProcName = 'DELETEDBP'
Left = 337
Top = 263
ParamData = <
item
DataType = ftInteger
Name = 'PNUM'
ParamType = ptInput
end>
end
end
Для функціонування прикладення розроблено програму:
Файл Udb.h
//---------------------------------------------------------------------------
#ifndef UdbH
#define UdbH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <DBCtrls.hpp>
#include <DBGrids.hpp>
#include <ExtCtrls.hpp>
#include <Grids.hpp>
#include <Mask.hpp>
#include <Db.hpp>
#include <DBTables.hpp>
#include "cspin.h"
#include "CSPIN.h"
#include <jpeg.hpp>
#include <Buttons.hpp>
#include <Graphics.hpp>
//---------------------------------------------------------------------------
class Tmain_Form : public TForm
{
__published: // IDE-managed Components
TPageControl *PageControl;
TTabSheet *find_TabSheet;
TRadioGroup *sex_RadioGroup;
TEdit *speedfind_Edit;
TDataSource *dp_DataSource;
TDataSource *pr_DataSource;
TTabSheet *TabEdit;
TComboBox *chdp_ComboBox;
TEdit *chfam_Edit;
TEdit *chname_Edit;
TEdit *chgrand_Edit;
TRadioGroup *sex2_RadioGroup;
TButton *chadd_Button;
TButton *chdelete_Button;
TButton *chpost_Button;
TCSpinEdit *chyear_CSpinEdit;
TCSpinEdit *minage_CSpinEdit;
TCSpinEdit *maxage_CSpinEdit;
TPanel *left_Panel;
TPanel *find_TPanel;
TLabel *find_Label;
TGroupBox *dp_GroupBox;
TGroupBox *dp2_GroupBox;
TGroupBox *pr_GroupBox;
TDBGrid *pr_DBGrid;
TDBNavigator *pr_DBNavigator;
TGroupBox *ch_GroupBox;
TLabel *chdp_Label;
TLabel *chname_Label;
TLabel *chgrand_Label;
TLabel *chyear_Label;
TLabel *chfam_Label;
TGroupBox *age_GroupBox;
TLabel *minage_Label;
TLabel *maxage_Label;
TGroupBox *speedfind_GroupBox;
TLabel *speedfind_Label;
TImage *speedfind_Image;
TImage *minage_Image;
TImage *maxage_Image;
TAnimate *find_Animate;
TBitBtn *select_BitBtn;
TGroupBox *select_GroupBox;
TQuery *dp_Query;
TQuery *update_Query;
TComboBox *dp_ComboBox;
TDBEdit *dp2_DBEdit;
TStringField *dp_QueryDEP;
TStringField *dp_QueryPROISV;
TGroupBox *GroupBox1;
TLabel *sql_Label;
TAnimate *Animate1;
TBevel *oper_Bevel;
TShape *oper_Shape;
TImage *Image1;
TQuery *pr_Query;
TSmallintField *pr_QueryNUM;
TStringField *pr_QueryDEP;
TStringField *pr_QueryFAM;
TStringField *pr_QueryNAM;
TStringField *pr_QueryPAR;
TSmallintField *pr_QueryYEAR_B;
TStringField *pr_QuerySEX;
TSmallintField *pr_QueryAGE;
TStoredProc *insert_StoredProc;
TStoredProc *update_StoredProc;
TStoredProc *delete_StoredProc;
TPanel *pr_Panel;
TLabel *pr_Label;
void __fastcall FormCreate(TObject *Sender);
void __fastcall dp_ComboBoxChange(TObject *Sender);
void __fastcall speedfind_EditChange(TObject *Sender);
void __fastcall pr_QueryCalcFields(TDataSet *DataSet);
void __fastcall pr_QueryAfterScroll(TDataSet *DataSet);
void __fastcall pr_QueryBeforePost(TDataSet *DataSet);
void __fastcall chadd_ButtonClick(TObject *Sender);
void __fastcall chdelete_ButtonClick(TObject *Sender);
void __fastcall chpost_ButtonClick(TObject *Sender);
void __fastcall PageControlChange(TObject *Sender);
void __fastcall minage_CSpinEditChange(TObject *Sender);
void __fastcall select_BitBtnClick(TObject *Sender);
void __fastcall pr_DBGridCellClick(TColumn *Column);
void __fastcall prview_RadioGroupClick(TObject *Sender);
void __fastcall pr_DBGridKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift);
private:// User declarations
public:// User declarations
fastcall Tmain_Form(TComponent* Owner);
unsigned short Year;
unsigned short Month;
unsigned short Day;
bool CanPost;
AnsiString sql_Operator;
void __fastcall Delay(unsigned long int mSeconds);
};
//---------------------------------------------------------------------------
extern PACKAGE Tmain_Form *main_Form;
//---------------------------------------------------------------------------
#endif
Файл Udb.cpp
#include <vcl.h>
#pragma hdrstop
#include "Udb.h"
#pragma package(smart_init)
#pragma link "cspin"
#pragma link "CSPIN"
#pragma resource "*.dfm"
Tmain_Form *main_Form;
fastcall Tmain_Form::Tmain_Form(TComponent* Owner)
TForm(Owner)
{}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::FormCreate(TObject *Sender)
{
CanPost = false;
Date().DecodeDate(&Year,&Month,&Day);
pr_Query->SQL->Clear();
sql_Operator = "Select * from PERS order by NUM";
sql_Label->Caption = sql_Operator;
pr_Query->SQL->Add(sql_Operator);
pr_Query->Open();
pr_Query->First();
dp_Query->SQL->Clear();
sql_Operator = "Select * from DEP";
sql_Label->Caption = sql_Operator;
dp_Query->SQL->Add(sql_Operator);
dp_Query->Open();
dp_Query->First();
// Заповнення ComboBox dp_ComboBox та chdp_ComboBox наймуваннями відділків
dp_ComboBox->Clear();
chdp_ComboBox->Clear();
while (!dp_Query->Eof) {
dp_ComboBox->Items->Add(dp_QueryDEP->AsString);
chdp_ComboBox->Items->Add(dp_QueryDEP->AsString);
dp_Query->Next();
}
dp_ComboBox->Items->Add("усі відділки");
dp_ComboBox->ItemIndex = dp_ComboBox->Items->Count - 1;
dp_ComboBoxChange(Sender);
chdp_ComboBox->ItemIndex = dp_ComboBox->ItemIndex;
PageControl->ActivePage = find_TabSheet;
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::dp_ComboBoxChange(TObject *Sender)
{
dp_Query->Close();
dp_Query->SQL->Clear();
sql_Operator = "Select * from DEP where DEP=:PDEP";
sql_Label->Caption = sql_Operator;
Delay(3000);
dp_Query->SQL->Add(sql_Operator);
dp_Query->Params->Items[0]->AsString = dp_ComboBox->Text;
dp_Query->Open();
dp_Query->First();
pr_Query->Close();
pr_Query->SQL->Clear();
if (dp_ComboBox->ItemIndex == dp_ComboBox->Items->Count - 1) {
// показ всіх записів
sql_Operator = "Select * from PERS order by NUM";
sql_Label->Caption = sql_Operator;
Delay(3000);
pr_Query->SQL->Add(sql_Operator);
} else {
// показ записів за переглядами
sql_Operator =
"Select * from DEP_" + AnsiString(dp_ComboBox->ItemIndex + 1);
sql_Label->Caption = sql_Operator;
Delay(3000);
pr_Query->SQL->Add(sql_Operator);
}
pr_Query->ExecSQL();
pr_Query->Open();
pr_Query->First();
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::speedfind_EditChange(TObject *Sender)
{
TLocateOptions SearchOptions;
pr_Query->Locate("FAM", speedfind_Edit->Text,
SearchOptions << loPartialKey << loCaseInsensitive);
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::pr_QueryCalcFields(TDataSet *DataSet)
{
pr_QueryAGE->Value = Year - pr_QueryYEAR_B->Value;
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::pr_QueryAfterScroll(TDataSet *DataSet)
{
if (PageControl->ActivePage == TabEdit) {
// відображення даних про поточну персону
chdp_ComboBox -> ItemIndex =
chdp_ComboBox->Items->IndexOf(pr_QueryDEP->AsString);
chfam_Edit->Text = pr_QueryFAM->AsString;
chname_Edit->Text = pr_QueryNAM->AsString;
chgrand_Edit->Text = pr_QueryPAR->AsString;
chyear_CSpinEdit->Value = pr_QueryYEAR_B->AsInteger;
if (pr_QuerySEX->AsString == "ч") sex2_RadioGroup->ItemIndex = 0;
else sex2_RadioGroup->ItemIndex = 1;
}
pr_Label->Caption = pr_QueryNUM->AsString;
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::pr_QueryBeforePost(TDataSet *DataSet)
{
if (!CanPost) {
DataSet->Cancel();
Abort;
}
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::chadd_ButtonClick(TObject *Sender)
{ // додавання запису до таблиці PERS
insert_StoredProc->ParamByName("pDEP")->AsString = chdp_ComboBox->Text;
insert_StoredProc->ParamByName("pFAM")->AsString = chfam_Edit->Text;
insert_StoredProc->ParamByName("pNAM")->AsString = chname_Edit->Text;
insert_StoredProc->ParamByName("pPAR")->AsString = chgrand_Edit->Text;
insert_StoredProc->ParamByName("pYEAR_B")->AsInteger = chyear_CSpinEdit->Value;
insert_StoredProc->ParamByName("pSEX")->AsString =
sex2_RadioGroup->Items->Strings[sex2_RadioGroup->ItemIndex];
sql_Operator =
"Insert into PERS (DEP, FAM, NAM, PAR, YEAR_B, SEX)"
" VALUES (:pDEP, :pFAM, :pNAM, :pPAR, :pYEAR_B, :pSEX)";
sql_Label->Caption = sql_Operator;
insert_StoredProc->Prepare();
insert_StoredProc->ExecProc();
dp_ComboBoxChange(Sender);
ShowMessage ("Вставку запису збереженою процедурою INSERTdbP виконано успішно!");
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::chdelete_ButtonClick(TObject *Sender)
{ // видалення поточного запису з таблиці PERS
if (Application->MessageBox("Ви дійсно бажаєте видалити поточний запис?",
"Підтвердіть видалення запису",
MB_YESNO + MB_ICONEXCLAMATION) == IDYES) {
delete_StoredProc->ParamByName("pNUM")->AsInteger =
pr_QueryNUM->AsInteger;
sql_Operator = "Delete from PERS where NUM = :pNUM";
sql_Label->Caption = sql_Operator;
delete_StoredProc->Prepare();
delete_StoredProc->ExecProc();
dp_ComboBoxChange(Sender);
ShowMessage ("Видалення запису збереженою процедурою DELETEdbP виконано успішно!");
}
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::chpost_ButtonClick(TObject *Sender)
{
update_StoredProc->ParamByName("pDEP")->AsString = chdp_ComboBox->Text;
update_StoredProc->ParamByName("pFAM")->AsString = chfam_Edit->Text;
update_StoredProc->ParamByName("pNAM")->AsString = chname_Edit->Text;
update_StoredProc->ParamByName("pPAR")->AsString = chgrand_Edit->Text;
update_StoredProc->ParamByName("pYEAR_B")->AsInteger = chyear_CSpinEdit->Value;
update_StoredProc->ParamByName("pSEX")->AsString =
sex2_RadioGroup->Items->Strings[sex2_RadioGroup->ItemIndex];
sql_Operator =
"Update PERS Set DEP = :pDEP, YEAR_B = :pYEAR_B, SEX = :pSEX "
" Where (FAM = :pFAM) and (NAM = :pNAM) and (PAR = :pPAR)";
sql_Label->Caption = sql_Operator;
update_StoredProc->Prepare();
update_StoredProc->ExecProc();
dp_ComboBoxChange(Sender);
if (update_StoredProc->ParamByName("NUMBER")->AsInteger == 0)
ShowMessage ("* Помилка поновлення запису!");
else
ShowMessage ("Поновлення запису збережено.процедурою UPDATEdbP виконано успішно!");
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::PageControlChange(TObject *Sender)
{
if (PageControl->ActivePage == TabEdit)
pr_QueryAfterScroll(pr_Query);
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::minage_CSpinEditChange(TObject *Sender)
{
AnsiString s =
"(YEAR_B<=" + IntToStr(int(Year - minage_CSpinEdit->Value)) +
")and(YEAR_B>=" + IntToStr(int(Year - maxage_CSpinEdit->Value)) +
")and(SEX=";
if (!sex_RadioGroup->ItemIndex) s += "'ч')";
else s += "'ж')";
// автоматичне поновлення відбору записів
select_BitBtn->Kind = bkCancel;
select_BitBtn->Caption = "Відмінити відбір";
pr_Query->Filter = s;
pr_Query->Filtered = true;
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::select_BitBtnClick(TObject *Sender)
{
if (pr_Query->Filtered) { // відміна режиму фільтрації
pr_Query->Filtered = false;
select_BitBtn->Kind = bkYes;
select_BitBtn->Caption = "Поновити відбір";
} else { // встановлення режиму фільтрації
select_BitBtn->Kind = bkCancel;
select_BitBtn->Caption = "Відмінити відбір";
minage_CSpinEditChange(Sender);
}
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::pr_DBGridCellClick(TColumn *Column)
{
if (PageControl->ActivePage == TabEdit) {
chdp_ComboBox -> ItemIndex =
chdp_ComboBox->Items->IndexOf(pr_QueryDEP->AsString);
chfam_Edit->Text = pr_QueryFAM->AsString;
chname_Edit->Text = pr_QueryNAM->AsString;
chgrand_Edit->Text = pr_QueryPAR->AsString;
chyear_CSpinEdit->Value = pr_QueryYEAR_B->AsInteger;
if (pr_QuerySEX->AsString == "ч") sex2_RadioGroup->ItemIndex = 0;
else sex2_RadioGroup->ItemIndex = 1;
}
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::Delay(unsigned long int mSeconds)
{ // затримка на декілька мілісекунд
unsigned long int FirstTick;
FirstTick = GetTickCount();
do
Application->ProcessMessages();
while (GetTickCount() - FirstTick <= mSeconds);
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::prview_RadioGroupClick(TObject *Sender)
{
dp_ComboBoxChange (Sender);
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::pr_DBGridKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
pr_Label->Caption = pr_QueryNUM->AsString;
}
//---------------------------------------------------------------------------
Для виконання прикладення треба попередньо завантажити на виконання прикладення-сервер IBServer.EXE, яке за звичай знаходиться за маршрутом "E:\Program Files\InterBase Corp\InterBase\Bin\" і обслуговує запити до бази даних Interbase. Після завантаження поточ-ного проекту на виконання цей сервер виводить на екран запит (мал.. 1.21) , у полі Password: якого треба ввести пароль доступу masterkey.:
Малюнок 1.21
Приклад вигляду форми під час функціонування прикладення наведено на мал. 1.22.
Малюнок 1.22
Контрольнi запитання:
1. Детально опишіть компоненти RAD: TDataSource, TQuery, TDBMemo, TDBGrid, TDBImage, TDBText, TDBNavigator, TStoredProc.
2. Як створити БД Interbase і призначити їй аліас?
3. Як створити індекси таблиці БД Interbase?
4. Як створити і використати у прикладенні перегляд таблиці БД Interbase?
5. Яким чином створюється і для чого використовується генератор БД Interbase?
6. Як призначити зв'язок компонентів з реальною БД?
7. Яким чином створюється і для чого використовується триггер БД Interbase?
8. Яким чином створюється і для чого використовується збережена процедура БД Inter-base?
9. Для чого використовується оператор SQL “SELECT”, наприклад:
"Select * from DEP where DEP=:PDEP"?
10. Опишіть методику додавання і видалення запису до/з таблиці БД. Чому для цього використовується додатковий компонент TQuery?
11. Опишіть методику додавання, видалення і корегування записів таблиці БД із викорис-танням збережених процедур.
12. Дайте докладні пояснення до розробленої програми.
Подобные документы
Проектування розподіленої інформаційної системи із використанням технології MIDAS. Методика створення сервера прикладень за технологією MIDAS. Віддалений модуль даних - основна частина сервера прикладень. Методика створення клієнтського прикладення.
лабораторная работа [582,2 K], добавлен 08.06.2009Загальний вигляд синтаксису для створення тригерів. Використання тригерів вставки, оновлення, видалення. Відображення інформації про тригери, їх зміна, призупинення та відновлення роботи. Умовні предикати, обмеження при створенні табличних тригерів.
презентация [221,1 K], добавлен 30.10.2015Методика та основні етапи проектування інформаційної системи "Меблевий салон", опис необхідних для цього даних і джерела їх отримання. Побудова ER-діаграми та порядок її нормалізації. Методи створення таблиць та форм, можливості їх змін, редагування.
курсовая работа [2,1 M], добавлен 08.12.2009Створення нової бази даних та таблиць MS Access. Пов’язування таблиць та індексування їх за тими полями, по яким створюється зв’язок. Створення запиту на вибірку в режимі конструктора. Створення екранних форм для роботи з даними за допомогою майстра форм.
контрольная работа [26,6 K], добавлен 04.02.2013Проектування бази даних: визначення об’єктів, структура таблиць, побудова схеми даних, забезпечення цілісності даних, створення певних відношень між таблицями, створення запитів, побудова форм, оформлення об’єктів. Розробка інструкції користувача.
курсовая работа [1,9 M], добавлен 19.09.2014Можливості застосування середовища MySQL для роботи з базами даних. Завдання системи SQL Server. Розробка концептуальної моделі бази даних "Сервісний центр". Створення таблиць phpmyadmin, заповнення їх даними. Створення запитів і зв’язків у phpmyadmin.
курсовая работа [2,3 M], добавлен 27.05.2015Оператори визначення даних. Створення таблиць. Вилучення таблиць. Додавання записів. Модифікація даних. Видалення даних. Пошук даних. Database Desktop. Компонент TQuery.
реферат [165,8 K], добавлен 13.06.2007Створення вжитків зі сторони сервера баз даних. Оголошення обмежень цілісності в таблиці визначень або з використанням механізму тригерів баз даних. Описання мови команд SQL*Plus як інтерактивної системи, невід'ємної для бази даних Oracle і вжитків.
реферат [17,3 K], добавлен 09.08.2011Визначення мети створення бази даних магазину та таблиць, які вона повинна містити. Розгляд видів полів та ключів таблиць. Створення запитів, форм, звітів, макросів та модулів. Вибір системи управління базами даних. Реалізація моделі у Microsoft Access.
курсовая работа [3,8 M], добавлен 20.07.2014Проектування інформаційної системи; концептуальне (інфологічне) проектування, побудова ER-діаграми, нормалізація даних. Даталогічне проектування баз даних, фізичне проектування інформаційних систем. СУБД Access: об'єкти, створення таблиць, запитів, форм.
курсовая работа [13,9 M], добавлен 09.01.2010