Проектуваннядволанкової розподіленої інформаційної системи для роботи з БД із використаннямSQL Interbase
Мета:
• створення БД;
• створення івикористання індексів та переглядів БД;
• створення івикористання тригерів, генераторів та збережених процедур на боці SQL-сервера;
• отриманняпрактичних навичок обміну даними між прикладенням і БД.
Завдання:
Засобами SQL Interbaseнеобхідно створити БД, декілька індексованих таблиць БД (головну і підлеглі) ідекілька їх переглядів, а також зв’язати їх між собою.
Засобами С++Builderстворити оригінальне(!) прикладення, яке повинне надавати мож-ливість:
• переглядузаписів зв’язаних таблиць БД, у тому числі попередніх і наступних записів та ізвикористанням створених переглядів;
• фільтраціїзаписів БД із виведенням на екран записів, обраних у діалозі за вказанимикритеріями;
• інкрементальногопошуку даних у БД за вказаними критеріями;
• додавання івидалення записи таблиці БД, у тому числі із використанням створених на боціSQL-сервера тригерів, генераторів та збережених процедур;
• корегуванняполів поточного запису таблиці БД, у тому числі із використанням створе-ної набоці SQL-сервера збереженої процедури.
Вказівки до створенняБД:
Для створення БД ізвикористанням SQL Interbase необхідно:
• завантажити навиконання прикладення InterBase Windows ISQL, яке за звичай зберігає-ться замаршрутом “:\Program Files\InterBase Corp\ InterBase\Bin\wisql32.exe”, наприклад, “E:\Program Files\InterBase Corp\ InterBase\Bin\wisql32.exe”;
• виконатикоманду File | Create Database … і у віконці, яке з’явилося (мал. 1.1), вказатинаведені параметри (параметри можуть бути довільними);
• виконатикоманду Metadata | Show … і у віконці, яке з’явилося (мал. 1.2), у полі ViewInformation On: обрати з меню альтернативу Database. Якщо БД було успішностворено, то у вікні InterBase Windows ISQL з’явиться відповідне повідомлення(мал. 1.3).
• виконатикоманду File | Commit Work для збереження результатів роботи на диску;
• далі (вжезасобами С++ Builder) командою Database | Explore завантажити на виконанняприкладення Database Explore, командою Object | New | INTRBASE створити аліасdbP, обрати його на вкладинці Databases і вказати параметри, які наведено намал. 1.4; потім виконати команду Object | Apply для збереження зроблених змін;
• у прикладенніInterBase Windows ISQL виконати команду File | Run an ISQL Script … і у вікні,що з’явилося (мал. 1.5), вказати ім’я файлу Createdb.sql, в якому набраноскрипт для створення таблиць БД;
/>/>
Малюнок 1.1 Малюнок 1.2
/>
Малюнок 1.3
/>
Малюнок 1.4
/>
Малюнок 1.5
Вміст цього файлунаведено нижче:
/*з’єднаннязБД*/
CONNECT«e:\Lr2\dbP\dbP.gdb» USER «SYSDBA» PASSWORD«masterkey»;
/*створеннятаблиціPERS */
createtable pers(
Numsmallint Not Null Primary Key,
Depchar(15),
Famchar(20) Not Null,
Nam char(20) Not Null,
Parchar(20) Not Null,
Year_bsmallint,
Sexchar(1),
Charactblob,
Photoblob
);
/*створеннятаблиціDEP */
createtable dep(
Depchar(15) Not Null Primary Key,
Proisvchar(15)
);
/*заповненнятаблиціPERS */
InsertInto PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)
Values(1,«Бухгалтерія»,”Іванов”,”Іван”,”Іванович”,1950, «ч»);
InsertInto PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)
Values(2,«Цех 1», «Петров», «Петро», «Петрович»,1960, «ч»);
InsertInto PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)
Values(3,«Цех 2», «Сидоров», «Сидор»,«Сидорович», 1955, «ч»);
InsertInto PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)
Values(4,«Цех1», “Іванова”,”Ірина”,”Іванівна”,1971, «ж»);
InsertInto PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)
Values(5,«Бухгалтерія»,«Миколаєв»,«Микола»,“Миколайович”,1930, «ч”);
InsertInto PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)
Values(6,»Цех2″, «Андрієв»,«Андрій»,«Андрійович»,1930, «ч»);
InsertInto PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)
Values(7,«Цех 1», «Борисов», «Борис»,«Борисович», 1937, «ч»);
InsertInto PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)
Values(8,«Цех 1», «Павлов», «Павло», «Павлович»,1975, «ч»);
InsertInto PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)
Values(9,«Бухгалтерія», «Антонова», «Антоніна»,«Антонівна», 1965, «ж»);
InsertInto PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)
Values(10,«Цех 2», «Харитонов», «Харитон»,«Харитонович», 1962, «ч»);
InsertInto PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)
Values(11,«Цех 2», “Іванников”, “Іван”,”Іванович”, 1975, «ч»);
/* заповнення таблиціDEP */
Insert Into DEP(Dep,Proisv) Values(«Бухгалтерія», «управління»);
InsertInto DEP( Dep,Proisv) Values(«Цех1», «виробництво»);
InsertInto DEP( Dep,Proisv) Values(«Цех2», «виробництво»);
Commit;
Після натискання кнопкиОткрыть треба вказати, що результати виконання скрипту необхідно зберігати у файліResult.txt.Скрипт виконується.
Оглянути схемуствореної таблиці (наприклад, таблиці PERS) можна командою Meta-data| Show … (мал. 1.6)
/>
Малюнок1.6
SHOWTABLE PERS
NUMSMALLINT Not Null
DEPCHAR(15) Nullable
FAMCHAR(20) Not Null
NAMCHAR(20) Not Null
PARCHAR(20) Not Null
YEAR_BSMALLINT Nullable
SEXCHAR(1) Nullable
CHARACTBLOB segment 80, subtype UNKNOWN Nullable
PHOTOBLOB segment 80, subtype UNKNOWN Nullable
CONSTRAINTINTEG_2:
Primarykey (NUM)
Оглянутивмістствореноїтаблиці(наприклад,таблиціPERS) можнанаборомзапитуSelect * from PERS у вікніInterBase Windows ISQL, або жзадопомогоюDatabase Explore (мал.1.7):
/>
Малюнок1.7
• створитиіндекситаблиціPERS, длячоговиконатискрипт,щоміститьсяуфайліCreateINDEXESdbP.sql:
/*З’єднаннязБД*/
CONNECT«e:\Lr3\dbP\dbP.gdb» USER «SYSDBA» PASSWORD«masterkey»;
/*Створенняіндексів*/
createindex Person On PERS Fam,Nam,Par;
createindex DepPerson On PERS Dep,Fam,Nam,Par;
createindex Year On PERS Year_b;
• створитипереглядитаблиціPERS, длячоговиконатискрипт,щоміститьсяуфайліCreateVIEWSdbP.sql:
/*З’єднаннязБД*/
CONNECT«e:\Lr3\dbP\dbP.gdb» USER «SYSDBA» PASSWORD«masterkey»;
/* Створення переглядівтаблиці PERS за підрозділами */
CreateVIEW dep_1 as
selectDep, Num, Fam, Nam, Par, Year_b, Sex from Pers
whereDep = «Бухгалтерія»;
CreateVIEW dep_2 as
selectDep, Num, Fam, Nam, Par, Year_b, Sex from Pers
whereDep = «Цех 1»;
CreateVIEW dep_3 as
selectDep, Num, Fam, Nam, Par, Year_b, Sex from Pers
whereDep = «Цех 2»;
• далізасобамиС++Builder командоюDatabase | Explore завантажитинавиконанняприкладенняDatabase Explore і зйогодопомогоюстворитигенераторPERSGEN, як показанонамал.1.8;
/>
Малюнок1.8
• створититриггерPERSSWITCH таблиці PERS, длячоговиконатискрипт,щомісти-тьсяуфайліCreateTRIGGERdbP.sql:
CONNECT«e:\Lr3\dbP\dbP.gdb» USER «SYSDBA» PASSWORD «masterkey»;
/* Створення триггераPERSSWITCH для збільшення номера запису під час вставки запису у таблицю */
SETTERM ^;
CREATETRIGGER PERSSWITCH FOR PERS
BEFOREINSERT AS
BEGIN
NEW.NUM= GEN_ID(PERSGEN, 1);
END;^
SETTERM ;^
COMMIT;
• створити на боціSQL-сервера виконуємі процедури вставки(INSERTdbP), видалення (DELETEdbP)та корегування (UPDATEdbP)таблиці PERS, для чого:
• виконати скрипт,що міститься у файлі CreateProcINSERTdbP.sql:
CONNECT«e:\Lr3\dbP\dbP.gdb» USER «SYSDBA» PASSWORD«masterkey»;
/*ВиконуємапроцедураINSERTdbP. Додає даніпроспівробітника,вертаєномерзапису*/
SETTERM ^;
CREATEPROCEDURE INSERTdbP
(
pDEPCHAR(15),
pFAMCHAR(20),
pNAMCHAR(20),
pPARCHAR(20),
pYEAR_BINTEGER,
pSEXCHAR(1)
)
AS
BEGIN
Insertinto PERS (DEP, FAM, NAM, PAR, YEAR_B, SEX)
VALUES(:pDEP, :pFAM, :pNAM, :pPAR, :pYEAR_B, :pSEX);
END;^
SETTERM ;^
COMMIT;
• виконатискрипт,щоміститьсяуфайліCreateProcDELETEdbP.sql:
CONNECT«e:\Lr3\dbP\dbP.gdb» USER «SYSDBA» PASSWORD«masterkey»;
/* Виконуєма процедураDELETEdbP знищення даних про співробітника */
SETTERM ^;
CREATEPROCEDURE DELETEdbP
(
pNUMINTEGER
)
AS
BEGIN
DELETEFROM PERS WHERE NUM = :pNUM;
END;^
SETTERM ;^
COMMIT;
• виконати скрипт,що міститься у файлі CreateProcUPDATEdbP.sql:
CONNECT«e:\Lr3\dbP\dbP.gdb» USER «SYSDBA» PASSWORD«masterkey»;
/*ВиконуємапроцедураUPDATEdbP.
Змінюєданіпроспівробітника,вертаєномерзаписучи0, якщоспівробітниканема*/
SETTERM ^;
CREATEPROCEDURE UPDATEdbP
(
pDEPCHAR(15),
pFAMCHAR(20),
pNAMCHAR(20),
pPARCHAR(20),
pYEAR_BINTEGER,
pSEXCHAR(1)
)
RETURNS
(numberinteger)
AS
BEGIN
number= 0;
SelectNUM From PERS
Where(FAM = :pFAM) and (NAM = :pNAM) and (PAR = :pPAR)
Intonumber;
if(number > 0) then
UpdatePERS Set DEP = :pDEP, YEAR_B = :pYEAR_B, SEX = :pSEX
Where(FAM = :pFAM) and (NAM = :pNAM) and (PAR = :pPAR);
END;^
SET TERM ;^
COMMIT;
У результаті виконанняцих дій буде створено БД зі структурою, що наведено на мал. 1.10.
/>
Малюнок 1.10
Вказівки до створенняпершого прикладення:
Для маніпулюваннятаблицями треба створити проект прикладення (мал. 1.11).
/>
Малюнок 1.11
Головну форму main_Formнаведено на мал. 1.12 і мал. 1.13.
/>
Малюнок 1.12
/>
Малюнок 1.13
Текстовий опис формиmain_Form:
objectmain_Form: Tmain_Form
Left= 147
Top= 103
Width= 709
Height= 460
Caption= ‘Лабораторнаробота2’
Color= clBtnFace
Font.Charset= DEFAULT_CHARSET
Font.Color= clWindowText
Font.Height= -11
Font.Name= ‘System’
Font.Style= [fsBold]
OldCreateOrder= True
Position= poScreenCenter
OnCreate= FormCreate
PixelsPerInch= 96
TextHeight= 16
objectPageControl: TPageControl
Left= 421
Top= 0
Width= 280
Height= 428
ActivePage= find_TabSheet
Align= alClient
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
MultiLine= True
ParentFont= False
TabOrder= 0
OnChange= PageControlChange
objectfind_TabSheet: TTabSheet
Caption= ‘Відбір’
objectselect_GroupBox: TGroupBox
Left= 1
Top= 5
Width= 268
Height= 212
Caption= ‘Відбірза…’
TabOrder= 7
end
objectsex_RadioGroup: TRadioGroup
Left= 8
Top= 120
Width= 257
Height= 53
Caption= ‘ статтю’
Columns= 2
ItemIndex= 0
Items.Strings= (
‘чоловіча’
‘жіноча’)
TabOrder= 0
OnClick= minage_CSpinEditChange
end
objectspeedfind_GroupBox: TGroupBox
Left= 0
Top= 224
Width= 257
Height= 169
Caption= ‘ Швидкийпошукзапрізвищем’
TabOrder= 5
objectImage1: TImage
Left= 8
Top= 16
Width= 105
Height= 145
Picture.Data= { }
Stretch= True
end
objectspeedfind_Label: TLabel
Left= 154
Top= 42
Width= 56
Height= 16
Caption= ‘Прізвище’
end
objectspeedfind_Image: TImage
Left= 32
Top= 48
Width= 57
Height= 73
Picture.Data= { }
Stretch= True
end
end
objectage_GroupBox: TGroupBox
Left= 8
Top= 32
Width= 257
Height= 81
Caption= ‘ віком’
Enabled= False
TabOrder= 4
objectminage_Label: TLabel
Left= 65
Top= 15
Width= 28
Height= 16
Caption= ‘від…’
end
objectmaxage_Label: TLabel
Left= 192
Top= 15
Width= 25
Height= 16
Caption= ‘до…’
end
objectminage_Image: TImage
Left= 8
Top= 24
Width= 41
Height= 49
Picture.Data= { }
Stretch= True
Transparent= True
end
objectmaxage_Image: TImage
Left= 136
Top= 24
Width= 41
Height= 49
Picture.Data= { }
Stretch= True
Transparent= True
end
end
objectspeedfind_Edit: TEdit
Left= 120
Top= 296
Width= 129
Height= 22
Hint= ‘Вводфамилии’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
ParentShowHint= False
ShowHint= True
TabOrder= 1
OnChange= speedfind_EditChange
end
objectminage_CSpinEdit: TCSpinEdit
Left= 62
Top= 66
Width= 65
Height= 26
TabStop= True
MaxValue= 80
MinValue= 16
ParentColor= False
TabOrder= 2
Value= 16
OnChange= minage_CSpinEditChange
end
objectmaxage_CSpinEdit: TCSpinEdit
Left= 190
Top= 66
Width= 65
Height= 26
TabStop= True
MaxValue= 80
MinValue= 16
ParentColor= False
TabOrder= 3
Value= 30
OnChange= minage_CSpinEditChange
end
objectselect_BitBtn: TBitBtn
Left= 8
Top= 184
Width= 257
Height= 25
Cursor= crHandPoint
Caption= ‘Поновитивідбір’
TabOrder= 6
OnClick= select_BitBtnClick
Kind= bkOK
end
end
objectTabEdit: TTabSheet
Caption= ‘Корегування’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clBlack
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
objectch_GroupBox: TGroupBox
Left= 2
Top= 5
Width= 269
Height= 388
Caption= ‘ Загальнівідомості’
TabOrder= 9
objectchdp_Label: TLabel
Left= 12
Top= 38
Width= 50
Height= 16
Caption= ‘Відділок’
FocusControl= chdp_ComboBox
end
objectchname_Label: TLabel
Left= 12
Top= 138
Width= 25
Height= 16
Caption= ‘Ім’#39’я’
FocusControl= chname_Edit
end
objectchgrand_Label: TLabel
Left= 12
Top= 188
Width= 73
Height= 16
Caption= ‘Побатькові’
FocusControl= chgrand_Edit
end
objectchyear_Label: TLabel
Left= 12
Top= 232
Width= 95
Height= 16
Caption= ‘Рікнародження’
end
objectchfam_Label: TLabel
Left= 12
Top= 87
Width= 56
Height= 16
Caption= ‘Прізвище’
FocusControl= chfam_Edit
end
objectoper_Bevel: TBevel
Left= 18
Top= 282
Width= 251
Height= 96
end
objectoper_Shape: TShape
Left= 19
Top= 283
Width= 248
Height= 94
Brush.Color= clBlack
end
objectAnimate1: TAnimate
Left= 24
Top= 291
Width= 60
Height= 80
Active= True
FileName= ‘Frage.avi’
StopFrame= 31
Transparent= False
end
end
objectsex2_RadioGroup: TRadioGroup
Left= 185
Top= 218
Width= 77
Height= 41
Caption= ‘Стать’
Columns= 2
ItemIndex= 0
Items.Strings= (
‘ч’
‘ж’)
TabOrder= 4
end
objectchdp_ComboBox: TComboBox
Left= 101
Top= 40
Width= 162
Height= 22
Style= csDropDownList
Font.Charset= RUSSIAN_CHARSET
Font.Color= clBlack
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ItemHeight= 0
ParentFont= False
TabOrder= 0
end
objectchfam_Edit: TEdit
Left= 101
Top= 90
Width= 162
Height= 22
Font.Charset= RUSSIAN_CHARSET
Font.Color= clBlack
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
TabOrder= 1
Text= ‘chfam_Edit’
end
objectchname_Edit: TEdit
Left= 101
Top= 140
Width= 162
Height= 22
Font.Charset= RUSSIAN_CHARSET
Font.Color= clBlack
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
TabOrder= 2
Text= ‘chname_Edit’
end
objectchgrand_Edit: TEdit
Left= 101
Top= 190
Width= 162
Height= 22
Font.Charset= RUSSIAN_CHARSET
Font.Color= clBlack
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
TabOrder= 3
Text= ‘chgrand_Edit’
end
objectchadd_Button: TButton
Left= 88
Top= 294
Width= 169
Height= 25
Hint= ‘Новаязапись’
Caption= ‘&Додати’
ParentShowHint= False
ShowHint= True
TabOrder= 5
OnClick= chadd_ButtonClick
end
objectchdelete_Button: TButton
Left= 88
Top= 322
Width= 169
Height= 25
Hint= ‘Удалениезаписи’
Caption= ‘&Видалити’
ParentShowHint= False
ShowHint= True
TabOrder= 6
OnClick= chdelete_ButtonClick
end
objectchpost_Button: TButton
Left= 88
Top= 351
Width= 169
Height= 25
Hint= ‘Фиксацияизменений’
Caption= ‘&Поновити’
ParentShowHint= False
ShowHint= True
TabOrder= 7
OnClick= chpost_ButtonClick
end
objectchyear_CSpinEdit: TCSpinEdit
Left= 119
Top= 233
Width= 50
Height= 23
TabStop= True
Font.Charset= RUSSIAN_CHARSET
Font.Color= clBlack
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
MaxValue= 2000
MinValue= 1900
ParentColor= False
ParentFont= False
TabOrder= 8
Value= 1950
end
end
end
objectleft_Panel: TPanel
Left= 0
Top= 0
Width= 421
Height= 428
Align= alLeft
BevelInner= bvLowered
Caption= ‘left_Panel’
TabOrder= 1
objectfind_TPanel: TPanel
Left= 6
Top= 5
Width= 406
Height= 420
Caption= ‘find_TPanel’
TabOrder= 1
objectfind_Label: TLabel
Left= 110
Top= 20
Width= 265
Height= 24
Alignment= taCenter
Caption= ‘ПОШУКСПІВРОБІТНИКІВ’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clRed
Font.Height= -21
Font.Name= ‘Arial Cyr’
Font.Style= [fsBold, fsItalic]
ParentFont= False
end
objectdp_GroupBox: TGroupBox
Left= 8
Top= 56
Width= 393
Height= 57
Caption= ‘ Відділок’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
TabOrder= 0
objectdp_ComboBox: TComboBox
Left= 8
Top= 24
Width= 177
Height= 24
ItemHeight= 16
Items.Strings= (
‘Бухгалтерия’)
TabOrder= 0
OnChange= dp_ComboBoxChange
end
end
objectdp2_GroupBox: TGroupBox
Left= 200
Top= 66
Width= 193
Height= 41
Caption= ‘ підрозділ’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsItalic]
ParentFont= False
TabOrder= 1
objectdp2_DBEdit: TDBEdit
Left= 5
Top= 15
Width= 182
Height= 23
Color= clSilver
DataField= ‘PROISV’
DataSource= dp_DataSource
Enabled= False
TabOrder= 0
end
end
objectpr_GroupBox: TGroupBox
Left= 8
Top= 115
Width= 393
Height= 226
Caption= ‘ Співробітники’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
TabOrder= 2
objectBevel1: TBevel
Left= 10
Top= 197
Width= 41
Height= 24
end
objectpr_Label: TLabel
Left= 16
Top= 201
Width= 29
Height= 16
Alignment= taCenter
AutoSize= False
end
end
objectfind_Animate: TAnimate
Left= 32
Top= 8
Width= 48
Height= 45
Active= True
CommonAVI= aviFindComputer
StopFrame= 8
end
objectGroupBox1: TGroupBox
Left= 8
Top= 340
Width= 393
Height= 77
Caption= ‘ПоточнийоператорSQL’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
TabOrder= 4
objectsql_Label: TLabel
Left= 11
Top= 16
Width= 372
Height= 57
AutoSize= False
Color= clBtnFace
Font.Charset= RUSSIAN_CHARSET
Font.Color= clRed
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentColor= False
ParentFont= False
WordWrap= True
end
end
end
objectpr_DBGrid: TDBGrid
Left= 22
Top= 144
Width= 379
Height= 169
DataSource= pr_DataSource
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsItalic]
Options= [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs,dgConfirmDelete, dgCancelOnExit]
ParentFont= False
TabOrder= 0
TitleFont.Charset= RUSSIAN_CHARSET
TitleFont.Color= clWindowText
TitleFont.Height= -11
TitleFont.Name= ‘Times New Roman’
TitleFont.Style= [fsItalic]
OnCellClick= pr_DBGridCellClick
Columns=
item
Expanded= False
FieldName= ‘FAM’
Title.Caption= ‘Прізвище’
Width= 59
Visible= True
end
item
Expanded= False
FieldName= ‘NAM’
Title.Caption= ‘ім’#39’я’
Width= 57
Visible= True
end
item
Expanded= False
FieldName= ‘PAR’
Title.Caption= ‘побатькові’
Width= 67
Visible= True
end
item
Alignment= taCenter
Expanded= False
FieldName= ‘YEAR_B’
Title.Caption= ‘рікнародження’
Width= 85
Visible= True
end
item
Alignment= taCenter
Expanded= False
FieldName= ‘SEX’
Title.Caption= ‘стать’
Visible= True
end
item
Expanded= False
FieldName= ‘AGE’
Title.Caption= ‘вік’
Width= 38
Visible= True
end
item
Expanded= False
FieldName= ‘CHARACT’
Title.Caption= ‘характеристика’
Visible= True
end
item
Expanded= False
FieldName= ‘PHOTO’
Title.Caption= ‘фото’
Visible= True
end>
end
objectpr_Button: TButton
Left= 326
Top= 319
Width = 75
Height = 20
Hint =’Характеристика, фотография’
Caption= ‘&Більше…’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
ParentShowHint= False
ShowHint= True
TabOrder= 2
OnClick= pr_ButtonClick
end
objectpr_DBNavigator: TDBNavigator
Left= 73
Top= 319
Width= 244
Height= 20
DataSource= pr_DataSource
VisibleButtons= [nbFirst, nbPrior, nbNext, nbLast]
TabOrder= 3
end
end
objectdp_DataSource: TDataSource
DataSet= dp_Query
Left= 140
Top= 55
end
objectpr_DataSource: TDataSource
DataSet= pr_Query
Left= 298
Top= 268
end
objectdp_Query: TQuery
DatabaseName= ‘dbP’
RequestLive= True
SQL.Strings= (
‘Select* from Dep where DEP = :PDEP’)
Left= 169
Top= 55
ParamData=
item
DataType= ftString
Name= ‘PDEP’
ParamType= ptUnknown
end>
objectdp_QueryDEP: TStringField
FieldName= ‘DEP’
Origin= ‘DEP.DEP’
Size= 15
end
objectdp_QueryPROISV: TStringField
FieldName= ‘PROISV’
Origin= ‘DEP.PROISV’
Size= 15
end
end
objectupdate_Query: TQuery
DatabaseName= ‘dbP’
DataSource= pr_DataSource
RequestLive= True
Left= 356
Top= 268
end
objectpr_Query: TQuery
BeforePost= pr_QueryBeforePost
AfterScroll= pr_QueryAfterScroll
OnCalcFields= pr_QueryCalcFields
DatabaseName= ‘dbP’
RequestLive= True
SQL.Strings= (
‘Select* from Pers where DEP = :DEP order by FAM,NAM,PAR’)
Left= 327
Top= 268
ParamData=
item
DataType= ftString
Name= ‘DEP’
ParamType= ptUnknown
end>
objectpr_QueryNUM: TSmallintField
FieldName= ‘NUM’
Origin= ‘PERS.NUM’
end
objectpr_QueryDEP: TStringField
FieldName= ‘DEP’
Origin= ‘PERS.DEP’
Size= 15
end
objectpr_QueryFAM: TStringField
FieldName= ‘FAM’
Origin= ‘PERS.FAM’
end
objectpr_QueryNAM: TStringField
FieldName= ‘NAM’
Origin= ‘PERS.NAM’
end
objectpr_QueryPAR: TStringField
FieldName= ‘PAR’
Origin= ‘PERS.PAR’
end
objectpr_QueryYEAR_B: TSmallintField
FieldName= ‘YEAR_B’
Origin= ‘PERS.YEAR_B’
end
objectpr_QuerySEX: TStringField
FieldName= ‘SEX’
Origin= ‘PERS.SEX’
Size= 1
end
objectpr_QueryCHARACT: TBlobField
FieldName= ‘CHARACT’
Origin= ‘PERS.CHARACT’
BlobType= ftMemo
Size= 1
end
objectpr_QueryPHOTO: TBlobField
FieldName= ‘PHOTO’
Origin= ‘PERS.PHOTO’
BlobType= ftGraphic
Size= 1
end
objectpr_QueryAGE: TSmallintField
Alignment= taCenter
DisplayLabel= ‘Возраст’
DisplayWidth= 7
FieldKind= fkCalculated
FieldName= ‘AGE’
Calculated= True
end
end
end
Підлеглуформуcharacter_Form наведено намал.1.14.
/>
Малюнок1.14
Текстовий опис цієїформи наведено нижче:
objectcharacter_Form: Tcharacter_Form
Left= 237
Top= 95
Width= 318
Height= 226
Caption= ‘Характеристика’
Color= clBtnFace
Font.Charset= DEFAULT_CHARSET
Font.Color= clWindowText
Font.Height= -11
Font.Name= ‘MS Sans Serif’
Font.Style= []
FormStyle= fsStayOnTop
OldCreateOrder= True
Position= poDefaultPosOnly
PixelsPerInch= 96
TextHeight= 13
objectcharacter_DBMemo: TDBMemo
Left= 0
Top= 0
Width= 195
Height= 194
Align= alClient
Alignment= taCenter
DataField= ‘Charact’
DataSource= main_Form.pr_DataSource
ScrollBars= ssVertical
TabOrder= 0
end
objectPPhoto: TPanel
Left= 195
Top= 0
Width= 115
Height= 194
Align= alRight
Caption= ‘PPhoto’
TabOrder= 1
objectphoto_DBImage: TDBImage
Left= 5
Top= 42
Width= 105
Height= 105
DataField= ‘Photo’
DataSource= main_Form.pr_DataSource
TabOrder= 0
end
end
end
Для функціонуванняприкладення розроблено програму:
ФайлUdb.h
#ifndefUdbH
#defineUdbH
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include«cspin.h»
#include«CSPIN.h»
#include
#include
#include
classTmain_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;
TButton*pr_Button;
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;
TQuery*pr_Query;
TComboBox*dp_ComboBox;
TDBEdit*dp2_DBEdit;
TStringField*dp_QueryDEP;
TStringField*dp_QueryPROISV;
TSmallintField*pr_QueryNUM;
TStringField*pr_QueryDEP;
TStringField*pr_QueryFAM;
TStringField*pr_QueryNAM;
TStringField*pr_QueryPAR;
TSmallintField*pr_QueryYEAR_B;
TStringField*pr_QuerySEX;
TBlobField*pr_QueryCHARACT;
TBlobField*pr_QueryPHOTO;
TSmallintField*pr_QueryAGE;
TLabel*pr_Label;
TBevel*Bevel1;
TGroupBox*GroupBox1;
TLabel*sql_Label;
TAnimate*Animate1;
TBevel*oper_Bevel;
TShape*oper_Shape;
TImage*Image1;
void__fastcall FormCreate(TObject *Sender);
void__fastcall dp_ComboBoxChange(TObject *Sender);
void__fastcall pr_ButtonClick(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);
private: //User declarations
public: //User declarations
__fastcallTmain_Form(TComponent* Owner);
unsignedshort Year;
unsignedshort Month;
unsignedshort Day;
boolCanPost;
intAllPers, CurrentPers;
AnsiStringsql_Operator;
void__fastcall Delay(unsigned long int mSeconds);
};
externPACKAGE Tmain_Form *main_Form;
#endif
ФайлUdb.cpp
#include
#pragmahdrstop
#include«Udb.h»
#include«Udba.h»
#pragmapackage(smart_init)
#pragmalink «cspin»
#pragmalink «CSPIN»
#pragmaresource “*.dfm”
Tmain_Form*main_Form;
__fastcallTmain_Form::Tmain_Form(TComponent* Owner)
:TForm(Owner)
{}
void__fastcall Tmain_Form::FormCreate(TObject *Sender)
{
CanPost= false;
Date().DecodeDate(&Year,&Month,&Day);
//підрахуваннякількостізаписівутаблиціPERS
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();
AllPers= 0;
while(!pr_Query->Eof) {
++AllPers;
pr_Query->Next();
}
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(5000);
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(5000);
pr_Query->SQL->Add(sql_Operator);
}else {
sql_Operator= «Select * from PERS where DEP = :DEP order by NUM»;
sql_Label->Caption= sql_Operator;
Delay(5000);
pr_Query->SQL->Add(sql_Operator);
pr_Query->Params->Items[0]->AsString= dp_ComboBox->Text;
}
pr_Query->ExecSQL();
pr_Query->Open();
pr_Query->First();
}
void__fastcall Tmain_Form::pr_ButtonClick(TObject *Sender)
{
if(!character_Form->Visible) character_Form->Show();
}
void__fastcall Tmain_Form::speedfind_EditChange(TObject *Sender)
{
TLocateOptionsSearchOptions;
pr_Query->Locate(«FAM»,speedfind_Edit->Text,
SearchOptions
}
void__fastcall Tmain_Form::pr_QueryCalcFields(TDataSet *DataSet)
{
pr_QueryAGE->Value= Year — pr_QueryYEAR_B->Value;
}
void__fastcall Tmain_Form::pr_QueryAfterScroll(TDataSet *DataSet)
{
//поточнаперсона
CurrentPers= pr_QueryNUM->AsInteger;
pr_Label->Caption= IntToStr(CurrentPers);
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;
elsesex2_RadioGroup->ItemIndex = 1;
}
}
//—————————————————————————
void__fastcall Tmain_Form::pr_QueryBeforePost(TDataSet *DataSet)
{
if(!CanPost) {
DataSet->Cancel();
Abort;
}
}
//—————————————————————————
void__fastcall Tmain_Form::chadd_ButtonClick(TObject *Sender)
{// додаваннязаписудотаблиціPERS
AnsiStringNewSex; // визначення статі
if(sex2_RadioGroup->ItemIndex == 0) NewSex = «ч»;
elseNewSex = «ж»;
update_Query->Close();
update_Query->SQL->Clear();
sql_Operator= «Insert into PERS (DEP,FAM,NAM,PAR,YEAR_B,SEX,NUM) values (‘»
+chdp_ComboBox->Text + “‘,'”
+chfam_Edit->Text + “‘,'”
+chname_Edit->Text + “‘,'”
+chgrand_Edit->Text + “‘,'”
+IntToStr((int)chyear_CSpinEdit->Value) + “‘,'”
+NewSex + “‘,'”
+IntToStr(++AllPers) + “‘)”; // збільшеннякількостізаписівутаблиціPERS
sql_Label->Caption= sql_Operator;
Delay(5000);
update_Query->SQL->Add(sql_Operator);
update_Query->ExecSQL();// додаваннязапису
pr_Query->Close();// поновленнявідображенняданихтаблиціPERS
pr_Query->Open();
PageControlChange(Sender);
}
//—————————————————————————
void__fastcall Tmain_Form::chdelete_ButtonClick(TObject *Sender)
{ // видаленняпоточного запису з таблиці PERS
if(Application->MessageBox(«Ви дійсно бажаєте видалити поточнийзапис?»,
«Підтвердітьвидалення запису»,
MB_YESNO +MB_ICONEXCLAMATION) == IDYES)
update_Query->Close();
update_Query->SQL->Clear();
sql_Operator= «Delete from PERS where NUM = » + IntToStr(CurrentPers);
sql_Label->Caption= sql_Operator;
Delay(5000);
update_Query->SQL->Add(sql_Operator);
update_Query->ExecSQL();// видаленнязапису
pr_Query->Close();// поновленнявідображенняданихталиціPERS
pr_Query->Open();
–AllPers;// зменшеннякількостізаписівутаблиціPERS
}
//—————————————————————————
void__fastcall Tmain_Form::chpost_ButtonClick(TObject *Sender)
{
AnsiStrings, sSQL;
constAnsiString s1 = “,”;
s= “”;
sSQL= «Update PERS set »;
if(pr_QueryDEP->AsString != chdp_ComboBox->Text) {
s= «відділок»;
sSQL+= «DEP=’» + chdp_ComboBox->Text + “‘”;
}
if(pr_QueryCHARACT->AsString != chfam_Edit->Text) {
if(s != “”) { s += s1; sSQL += s1; }
s+= ” прізвище”;
sSQL+= «FAM=’» + chfam_Edit->Text + “‘”;
}
if(pr_QueryCHARACT->AsString != chname_Edit->Text) {
if(s != “”) { s += s1; sSQL += s1; }
s+= ” ім’я”;
sSQL+= «NAM=’» + chname_Edit->Text+”‘”;
}
if(pr_QueryCHARACT->AsString != chgrand_Edit->Text) {
if(s != “”) { s += s1; sSQL += s1; }
s+= ” по батькові”;
sSQL+= «PAR=’» + chgrand_Edit->Text + “‘”;
}
if(pr_QueryYEAR_B->AsInteger != chyear_CSpinEdit->Value) {
if(s != “”) { s += s1; sSQL += s1; }
s+= ” рік народження”;
sSQL+= «YEAR_B=’» + IntToStr((int)(chyear_CSpinEdit->Value));
}
if(pr_QuerySEX->AsBoolean != (sex2_RadioGroup->ItemIndex == 0)) {
if(s != “”) { s += s1; sSQL += s1; }
s+= ” стать”;
sSQL+= «SEX=’»;
if(sex2_RadioGroup->ItemIndex== 0) sSQL += «ч’»;
elsesSQL += «ж’»;
}
if(s != “”)
if(Application->MessageBox(
(«Дійснобажаєтезмінити» + s + “?”).c_str(),
«Підтвердітьзанесення змін у базу даних»,
MB_YESNO+ MB_ICONQUESTION) == IDYES)
{update_Query->Close();
update_Query->SQL->Clear();
sql_Operator= sSQL + ” where NUM=” + IntToStr(pr_QueryNUM->AsInteger);
sql_Label->Caption= sql_Operator;
Delay(5000);
update_Query->SQL->Add(sql_Operator);
update_Query->ExecSQL();
pr_Query->Close();
pr_Query->Open();
CanPost= false;
};
}
//—————————————————————————
void__fastcall Tmain_Form::PageControlChange(TObject *Sender)
{
character_Form->character_DBMemo->ReadOnly=
!(PageControl->ActivePage== TabEdit);
if(PageControl->ActivePage == TabEdit) pr_QueryAfterScroll(pr_Query);
}
//—————————————————————————
void__fastcall Tmain_Form::minage_CSpinEditChange(TObject *Sender)
{
AnsiStrings =
“(YEAR_BValue)) +
“)and(YEAR_B>=”+ IntToStr(int(Year — maxage_CSpinEdit->Value)) +
“)and(SEX=”;
if(!sex_RadioGroup->ItemIndex) s += “‘ч’)”;
elses += “‘ж’)”;
// автоматичнепоновлення відбору записів
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;
elsesex2_RadioGroup->ItemIndex = 1;
}
//поточнаперсона
CurrentPers= pr_QueryNUM->AsInteger;
pr_Label->Caption= IntToStr(CurrentPers);
}
//—————————————————————————
void__fastcall Tmain_Form::Delay(unsigned long int mSeconds)
{// затримканадекількамілісекунд
unsignedlong int FirstTick;
FirstTick= GetTickCount();
do
Application->ProcessMessages();
while(GetTickCount() — FirstTick
}
ФайлUdba.h
//—————————————————————————
#ifndefUdbaH
#defineUdbaH
//—————————————————————————
#include
#include
#include
#include
#include
#include
//—————————————————————————
classTcharacter_Form: public TForm
{
__published: //IDE-managed Components
TDBMemo*character_DBMemo;
TPanel*PPhoto;
TDBImage*photo_DBImage;
private: //User declarations
public: //User declarations
__fastcallTcharacter_Form(TComponent* Owner);
};
//—————————————————————————
externPACKAGE Tcharacter_Form *character_Form;
//—————————————————————————
#endif
ФайлUdba.cpp
//—————————————————————————
#include
#pragmahdrstop
#include«Udba.h»
#include«Udb.h»
//—————————————————————————
#pragmapackage(smart_init)
#pragmaresource “*.dfm”
Tcharacter_Form*character_Form;
//—————————————————————————
__fastcallTcharacter_Form::Tcharacter_Form(TComponent* Owner)
:TForm(Owner)
{
}
//—————————————————————————
Длявиконанняприкладеннятребапопередньозавантажитинавиконанняприкладення-серверIBServer.EXE, яке зазвичайзнаходитьсязамаршрутом«E:\Program Files\InterBase Corp\InterBase\Bin\» іобслуговуєзапитидобазиданихInterbase. Після завантаження поточ-ного проекту на виконанняцей сервер виводить на екран запит (мал… 1.15), у полі Password: якого требаввести пароль доступу masterkey..
/>
Малюнок 1.15
Форми під часфункціонування прикладення наведено на мал. 1.16 — 1.18.
/>
Малюнок 1.16
/>
Малюнок 1.17
/>
Малюнок 1.18
Вказівки до створеннядругого прикладення: Для маніпулювання таблицями можна використати корегованийпроект попереднього прикладення (мал. 1.19).
/>
Малюнок 1.19
Головну форму main_Formнаведено на мал. 1.20.
/>
Малюнок 1.20
Текстовийописформиmain_Form:
objectmain_Form: Tmain_Form
Left= 63
Top= 22
Width= 709
Height= 461
Caption= ‘Лабораторнаробота3’
Color= clBtnFace
Font.Charset= DEFAULT_CHARSET
Font.Color= clWindowText
Font.Height= -11
Font.Name= ‘System’
Font.Style= [fsBold]
OldCreateOrder= True
Position= poScreenCenter
OnCreate= FormCreate
PixelsPerInch= 96
TextHeight= 16
objectPageControl: TPageControl
Left= 421
Top= 0
Width= 280
Height= 429
ActivePage= find_TabSheet
Align= alClient
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
MultiLine= True
ParentFont= False
TabOrder= 0
OnChange= PageControlChange
objectfind_TabSheet: TTabSheet
Caption= ‘Відбір’
objectselect_GroupBox: TGroupBox
Left= 1
Top= 5
Width= 268
Height= 212
Caption= ‘Відбірза…’
TabOrder= 7
end
objectsex_RadioGroup: TRadioGroup
Left= 8
Top= 120
Width= 257
Height= 53
Caption= ‘ статтю’
Columns= 2
ItemIndex= 0
Items.Strings= (
‘чоловіча’
‘жіноча’)
TabOrder= 0
OnClick= minage_CSpinEditChange
end
objectspeedfind_GroupBox: TGroupBox
Left= 0
Top= 224
Width= 257
Height= 169
Caption= ‘ Швидкийпошукзапрізвищем’
TabOrder= 5
objectImage1: TImage
Left= 8
Top= 16
Width= 105
Height= 145
Picture.Data= {}
Stretch= True
end
objectspeedfind_Label: TLabel
Left= 154
Top= 50
Width= 56
Height= 16
Caption= ‘Прізвище’
end
objectspeedfind_Image: TImage
Left= 32
Top= 48
Width= 57
Height= 73
Picture.Data= {}
Stretch= True
end
end
objectage_GroupBox: TGroupBox
Left= 8
Top= 32
Width= 257
Height= 81
Caption= ‘ віком’
Enabled= False
TabOrder= 4
objectminage_Label: TLabel
Left= 65
Top= 15
Width= 28
Height= 16
Caption= ‘від…’
end
objectmaxage_Label: TLabel
Left= 192
Top= 15
Width= 25
Height= 16
Caption= ‘до…’
end
objectminage_Image: TImage
Left= 8
Top= 24
Width= 41
Height= 49
Picture.Data= {}
Stretch= True
Transparent= True
end
objectmaxage_Image: TImage
Left= 136
Top= 24
Width= 41
Height= 49
Picture.Data= {}
Stretch= True
Transparent= True
end
end
objectspeedfind_Edit: TEdit
Left= 120
Top= 310
Width= 129
Height= 22
Hint= ‘Вводфамилии’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
ParentShowHint= False
ShowHint= True
TabOrder= 1
OnChange= speedfind_EditChange
end
objectminage_CSpinEdit: TCSpinEdit
Left= 62
Top= 66
Width= 65
Height= 26
TabStop= True
MaxValue= 80
MinValue= 16
ParentColor= False
TabOrder= 2
Value= 16
OnChange= minage_CSpinEditChange
end
objectmaxage_CSpinEdit: TCSpinEdit
Left= 190
Top= 66
Width= 65
Height= 26
TabStop= True
MaxValue= 80
MinValue= 16
ParentColor= False
TabOrder= 3
Value= 30
OnChange= minage_CSpinEditChange
end
objectselect_BitBtn: TBitBtn
Left= 8
Top= 184
Width= 257
Height= 25
Cursor= crHandPoint
Caption= ‘Поновитивідбір’
TabOrder= 6
OnClick= select_BitBtnClick
Kind= bkOK
end
end
objectTabEdit: TTabSheet
Caption= ‘Корегування’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clBlack
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
objectch_GroupBox: TGroupBox
Left= 2
Top= 5
Width= 269
Height= 388
Caption= ‘ Загальнівідомості’
TabOrder= 9
objectchdp_Label: TLabel
Left= 12
Top= 38
Width= 50
Height= 16
Caption= ‘Відділок’
FocusControl= chdp_ComboBox
end
objectchname_Label: TLabel
Left= 12
Top= 138
Width= 25
Height= 16
Caption= ‘Ім’#39’я’
FocusControl= chname_Edit
end
objectchgrand_Label: TLabel
Left= 12
Top= 188
Width= 73
Height= 16
Caption= ‘Побатькові’
FocusControl= chgrand_Edit
end
objectchyear_Label: TLabel
Left= 12
Top= 232
Width= 95
Height= 16
Caption= ‘Рікнародження’
end
objectchfam_Label: TLabel
Left= 12
Top= 87
Width= 56
Height= 16
Caption= ‘Прізвище’
FocusControl= chfam_Edit
end
objectoper_Bevel: TBevel
Left= 18
Top= 282
Width= 251
Height= 96
end
objectoper_Shape: TShape
Left= 19
Top= 283
Width= 248
Height= 94
Brush.Color= clBlack
end
objectAnimate1: TAnimate
Left= 24
Top= 291
Width= 60
Height= 80
Active= True
FileName= ‘Frage.avi’
StopFrame= 31
Transparent= False
end
end
objectsex2_RadioGroup: TRadioGroup
Left= 185
Top= 218
Width= 77
Height= 41
Caption= ‘Стать’
Columns= 2
ItemIndex= 0
Items.Strings= (
‘ч’
‘ж’)
TabOrder= 4
end
objectchdp_ComboBox: TComboBox
Left= 101
Top= 40
Width= 162
Height= 22
Style= csDropDownList
Font.Charset= RUSSIAN_CHARSET
Font.Color= clBlack
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ItemHeight= 14
ParentFont= False
TabOrder= 0
end
objectchfam_Edit: TEdit
Left= 101
Top= 90
Width= 162
Height= 22
Font.Charset= RUSSIAN_CHARSET
Font.Color= clBlack
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
TabOrder= 1
Text= ‘chfam_Edit’
end
objectchname_Edit: TEdit
Left= 101
Top= 140
Width= 162
Height= 22
Font.Charset= RUSSIAN_CHARSET
Font.Color= clBlack
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
TabOrder= 2
Text= ‘chname_Edit’
end
objectchgrand_Edit: TEdit
Left= 101
Top= 190
Width= 162
Height= 22
Font.Charset= RUSSIAN_CHARSET
Font.Color= clBlack
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
TabOrder= 3
Text= ‘chgrand_Edit’
end
objectchadd_Button: TButton
Left= 88
Top= 294
Width= 169
Height= 25
Hint= ‘Новаязапись’
Caption= ‘&Додати’
ParentShowHint= False
ShowHint= True
TabOrder= 5
OnClick= chadd_ButtonClick
end
objectchdelete_Button: TButton
Left= 88
Top= 322
Width= 169
Height= 25
Hint= ‘Удалениезаписи’
Caption= ‘&Видалити’
ParentShowHint= False
ShowHint= True
TabOrder= 6
OnClick= chdelete_ButtonClick
end
objectchpost_Button: TButton
Left= 88
Top= 351
Width= 169
Height= 25
Hint= ‘Фиксацияизменений’
Caption= ‘&Поновити’
ParentShowHint= False
ShowHint= True
TabOrder= 7
OnClick= chpost_ButtonClick
end
objectchyear_CSpinEdit: TCSpinEdit
Left= 119
Top= 233
Width= 50
Height= 23
TabStop= True
Font.Charset= RUSSIAN_CHARSET
Font.Color= clBlack
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
MaxValue= 2000
MinValue= 1900
ParentColor= False
ParentFont= False
TabOrder= 8
Value= 1950
end
end
end
objectleft_Panel: TPanel
Left= 0
Top= 0
Width= 421
Height= 429
Align= alLeft
BevelInner= bvLowered
Caption= ‘left_Panel’
TabOrder= 1
objectfind_TPanel: TPanel
Left= 6
Top= 5
Width= 406
Height= 420
Caption= ‘find_TPanel’
TabOrder= 1
objectfind_Label: TLabel
Left= 109
Top= 16
Width= 265
Height= 24
Alignment= taCenter
Caption= ‘ПОШУКСПІВРОБІТНИКІВ’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clRed
Font.Height= -21
Font.Name= ‘Arial Cyr’
Font.Style= [fsBold, fsItalic]
ParentFont= False
end
objectdp_GroupBox: TGroupBox
Left= 8
Top= 48
Width= 393
Height= 65
Caption= ‘ Відділок’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
TabOrder= 0
objectdp_ComboBox: TComboBox
Left= 14
Top= 22
Width= 155
Height= 24
ItemHeight= 16
Items.Strings= (
‘Бухгалтерия’)
TabOrder= 0
OnChange= dp_ComboBoxChange
end
end
objectdp2_GroupBox: TGroupBox
Left= 216
Top= 58
Width= 169
Height= 46
Caption= ‘ підрозділ’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsItalic]
ParentFont= False
TabOrder= 1
objectdp2_DBEdit: TDBEdit
Left= 5
Top= 15
Width= 156
Height= 23
Color= clSilver
DataField= ‘PROISV’
DataSource= dp_DataSource
Enabled= False
TabOrder= 0
end
end
objectpr_GroupBox: TGroupBox
Left= 8
Top= 113
Width= 393
Height= 226
Caption= ‘ Співробітники’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
TabOrder= 2
objectpr_Panel: TPanel
Left= 9
Top= 196
Width= 66
Height= 26
TabOrder= 0
objectpr_Label: TLabel
Left= 9
Top= 3
Width= 47
Height= 20
Alignment= taCenter
AutoSize= False
Caption= ‘1’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clRed
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
Layout= tlCenter
end
end
end
objectfind_Animate: TAnimate
Left= 40
Top= 4
Width= 48
Height= 45
Active= True
CommonAVI= aviFindComputer
StopFrame= 8
end
objectGroupBox1: TGroupBox
Left= 8
Top= 340
Width= 393
Height= 77
Caption= ‘ПоточнийоператорSQL’
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentFont= False
TabOrder= 4
objectsql_Label: TLabel
Left= 11
Top= 16
Width= 372
Height= 57
AutoSize= False
Color= clBtnFace
Font.Charset= RUSSIAN_CHARSET
Font.Color= clRed
Font.Height= -13
Font.Name= ‘Times New Roman’
Font.Style= [fsBold, fsItalic]
ParentColor= False
ParentFont= False
WordWrap= True
end
end
end
objectpr_DBGrid: TDBGrid
Left= 22
Top= 136
Width= 378
Height= 173
DataSource= pr_DataSource
Font.Charset= RUSSIAN_CHARSET
Font.Color= clWindowText
Font.Height= -11
Font.Name= ‘Times New Roman’
Font.Style= [fsItalic]
Options= [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs,dgConfirmDelete, dgCancelOnExit]
ParentFont= False
TabOrder= 0
TitleFont.Charset= RUSSIAN_CHARSET
TitleFont.Color= clWindowText
TitleFont.Height= -11
TitleFont.Name= ‘Times New Roman’
TitleFont.Style= [fsItalic]
OnCellClick= pr_DBGridCellClick
OnKeyDown= pr_DBGridKeyDown
Columns=
item
Expanded= False
FieldName= ‘FAM’
Title.Caption= ‘Прізвище’
Width= 59
Visible= True
end
item
Expanded= False
FieldName= ‘NAM’
Title.Caption= ‘ім’#39’я’
Width= 57
Visible= True
end
item
Expanded= False
FieldName= ‘PAR’
Title.Caption= ‘побатькові’
Width= 67
Visible= True
end
item
Alignment= taCenter
Expanded= False
FieldName= ‘YEAR_B’
Title.Caption= ‘рікнародження’
Width= 85
Visible= True
end
item
Alignment= taCenter
Expanded= False
FieldName= ‘SEX’
Title.Caption= ‘стать’
Visible= True
end
item
Expanded= False
FieldName= ‘AGE’
Title.Caption= ‘вік’
Width= 38
Visible= True
end
item
Expanded= False
FieldName= ‘CHARACT’
Title.Caption= ‘характеристика’
Visible= True
end
item
Expanded= False
FieldName= ‘PHOTO’
Title.Caption= ‘фото’
Visible= True
end>
end
objectpr_DBNavigator: TDBNavigator
Left= 96
Top= 320
Width= 304
Height= 18
DataSource= pr_DataSource
VisibleButtons= [nbFirst, nbPrior, nbNext, nbLast]
TabOrder= 2
end
end
objectdp_DataSource: TDataSource
DataSet= dp_Query
Left= 110
Top= 58
end
objectpr_DataSource: TDataSource
DataSet= pr_Query
Left= 213
Top= 263
end
objectdp_Query: TQuery
DatabaseName= ‘dbP’
RequestLive= True
SQL.Strings= (
‘Select* from Dep where DEP = :PDEP’)
Left= 139
Top= 58
ParamData=
item
DataType= ftString
Name= ‘PDEP’
ParamType= ptUnknown
end>
objectdp_QueryDEP: TStringField
FieldName= ‘DEP’
Origin= ‘DEP.DEP’
Size= 15
end
objectdp_QueryPROISV: TStringField
FieldName= ‘PROISV’
Origin= ‘DEP.PROISV’
Size= 15
end
end
objectupdate_Query: TQuery
DatabaseName= ‘dbP’
DataSource= pr_DataSource
RequestLive= True
Left= 271
Top= 263
end
objectpr_Query: TQuery
ObjectView= True
BeforePost= pr_QueryBeforePost
AfterScroll= pr_QueryAfterScroll
OnCalcFields= pr_QueryCalcFields
DatabaseName= ‘dbP’
RequestLive= True
SQL.Strings= (
‘Select* from Pers where DEP = :DEP order by FAM,NAM,PAR’)
Left= 242
Top= 263
ParamData=
item
DataType= ftString
Name= ‘DEP’
ParamType= ptUnknown
end>
objectpr_QueryNUM: TSmallintField
FieldName= ‘NUM’
Origin= ‘PERS.NUM’
end
objectpr_QueryDEP: TStringField
FieldName= ‘DEP’
Origin= ‘PERS.DEP’
Size= 15
end
objectpr_QueryFAM: TStringField
FieldName= ‘FAM’
Origin= ‘PERS.FAM’
end
objectpr_QueryNAM: TStringField
FieldName= ‘NAM’
Origin= ‘PERS.NAM’
end
objectpr_QueryPAR: TStringField
FieldName= ‘PAR’
Origin= ‘PERS.PAR’
end
objectpr_QueryYEAR_B: TSmallintField
FieldName= ‘YEAR_B’
Origin= ‘PERS.YEAR_B’
end
objectpr_QuerySEX: TStringField
FieldName= ‘SEX’
Origin= ‘PERS.SEX’
Size= 1
end
objectpr_QueryAGE: TSmallintField
Alignment= taCenter
DisplayLabel= ‘Возраст’
DisplayWidth= 7
FieldKind= fkCalculated
FieldName= ‘AGE’
Calculated= True
end
end
objectinsert_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
objectupdate_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
objectdelete_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
//—————————————————————————
#ifndefUdbH
#defineUdbH
//—————————————————————————
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include«cspin.h»
#include«CSPIN.h»
#include
#include
#include
//—————————————————————————
classTmain_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,
TShiftStateShift);
private://User declarations
public://User declarations
fastcallTmain_Form(TComponent* Owner);
unsignedshort Year;
unsignedshort Month;
unsignedshort Day;
boolCanPost;
AnsiStringsql_Operator;
void__fastcall Delay(unsigned long int mSeconds);
};
//—————————————————————————
externPACKAGE Tmain_Form *main_Form;
//—————————————————————————
#endif
ФайлUdb.cpp
#include
#pragmahdrstop
#include«Udb.h»
#pragmapackage(smart_init)
#pragmalink «cspin»
#pragmalink «CSPIN»
#pragmaresource “*.dfm”
Tmain_Form*main_Form;
fastcallTmain_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)
{
TLocateOptionsSearchOptions;
pr_Query->Locate(«FAM»,speedfind_Edit->Text,
SearchOptions
}
//—————————————————————————
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;
elsesex2_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=
«Insertinto 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=
«UpdatePERS 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)
{
AnsiStrings =
“(YEAR_BValue)) +
“)and(YEAR_B>=”+ IntToStr(int(Year — maxage_CSpinEdit->Value)) +
“)and(SEX=”;
if(!sex_RadioGroup->ItemIndex) s += “‘ч’)”;
elses += “‘ж’)”;
// автоматичнепоновлення відбору записів
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;
elsesex2_RadioGroup->ItemIndex = 1;
}
}
//—————————————————————————
void__fastcall Tmain_Form::Delay(unsigned long int mSeconds)
{// затримканадекількамілісекунд
unsignedlong int FirstTick;
FirstTick= GetTickCount();
do
Application->ProcessMessages();
while(GetTickCount() — FirstTick
}
//—————————————————————————
void__fastcall Tmain_Form::prview_RadioGroupClick(TObject *Sender)
{
dp_ComboBoxChange(Sender);
}
//—————————————————————————
void__fastcall Tmain_Form::pr_DBGridKeyDown(TObject *Sender, WORD &Key,
TShiftStateShift)
{
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. Дайтедокладні пояснення до розробленої програми.