Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Проектування дволанкової розподіленої інформаційної системи для роботи з базами даних із використанням SQL Interbase

Работа добавлена на сайт samzan.net: 2015-07-05

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 21.5.2024

Проектування дволанкової розподіленої інформаційної системи для роботи з БД із використанням 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), у полі View Information 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 */

create table pers(

Num smallint Not Null Primary Key,

 Dep char(15),

 Fam char(20) Not Null,

 Nam char(20) Not Null,

 Par char(20) Not Null,

 Year_b smallint,

 Sex char(1),

 Charact blob,

 Photo blob

);

/* створення таблиці DEP */

create table dep(

Dep char(15) Not Null Primary Key,

 Proisv char(15)

);

/* заповнення таблиці PERS */

Insert Into PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)

Values(1, "Бухгалтерія", "Іванов", "Іван", "Іванович", 1950, "ч");

Insert Into PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)

 Values(2, "Цех 1", "Петров", "Петро", "Петрович", 1960, "ч");

Insert Into PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)

 Values(3, "Цех 2", "Сидоров", "Сидор", "Сидорович", 1955, "ч");

Insert Into PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)

Values(4, "Цех 1", "Іванова", "Ірина", "Іванівна", 1971, "ж");

Insert Into PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)

Values(5, "Бухгалтерія", "Миколаєв", "Микола",Миколайович", 1930, "ч);

Insert Into PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)

Values(6, "Цех 2", "Андрієв", "Андрій", "Андрійович", 1930, "ч");

Insert Into PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)

 Values(7, "Цех 1", "Борисов", "Борис", "Борисович", 1937, "ч");

Insert Into PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)

 Values(8, "Цех 1", "Павлов", "Павло", "Павлович", 1975, "ч");

Insert Into PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)

 Values(9, "Бухгалтерія", "Антонова", "Антоніна", "Антонівна", 1965, "ж");

Insert Into PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)

 Values(10, "Цех 2", "Харитонов", "Харитон", "Харитонович", 1962, "ч");

Insert Into PERS(Num, Dep, Fam, Nam, Par, Year_b, Sex)

 Values(11, "Цех 2", "Іванников", "Іван", "Іванович", 1975, "ч");

/* заповнення таблиці DEP */

Insert Into DEP( Dep,Proisv) Values("Бухгалтерія", "управління");

Insert Into DEP( Dep,Proisv) Values("Цех 1", "виробництво");

Insert Into DEP( Dep,Proisv) Values("Цех 2", "виробництво");

Commit;

Після натискання кнопки Открыть треба вказати, що результати виконання скрипту необхідно зберігати у файлі Result.txt. Скрипт виконується. 

Оглянути схему створеної таблиці (наприклад, таблиці PERS) можна командою Meta-data | Show (мал. 1.6)

 Малюнок 1.6

SHOW TABLE PERS

NUM SMALLINT Not Null 

DEP CHAR(15) Nullable 

FAM CHAR(20) Not Null 

NAM CHAR(20) Not Null 

PAR CHAR(20) Not Null 

YEAR_B SMALLINT Nullable 

SEX CHAR(1) Nullable 

CHARACT BLOB segment 80, subtype UNKNOWN Nullable 

PHOTO BLOB segment 80, subtype UNKNOWN Nullable 

CONSTRAINT INTEG_2:

 Primary key (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";

/* Створення індексів */

create index Person On PERS Fam,Nam,Par;

create index DepPerson On PERS Dep,Fam,Nam,Par;

create index Year On PERS Year_b;

створити перегляди таблиці PERS, для чого виконати скрипт, що міститься у файлі CreateVIEWSdbP.sql:

/* З'єднання з БД */

CONNECT "e:\Lr3\dbP\dbP.gdb" USER "SYSDBA" PASSWORD "masterkey";

/* Створення переглядів таблиці PERS за підрозділами */

Create VIEW dep_1 as

 select Dep, Num, Fam, Nam, Par, Year_b, Sex from Pers

 where Dep = "Бухгалтерія";

Create VIEW dep_2 as

 select Dep, Num, Fam, Nam, Par, Year_b, Sex from Pers

 where Dep = "Цех 1";

Create VIEW dep_3 as

 select Dep, Num, Fam, Nam, Par, Year_b, Sex from Pers

 where Dep = "Цех 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 для збільшення номера запису під час вставки запису у таблицю */

SET TERM ^;

CREATE TRIGGER PERSSWITCH FOR PERS

BEFORE INSERT AS

 BEGIN

 NEW.NUM = GEN_ID(PERSGEN, 1);

END;^

SET TERM ;^

COMMIT;

• створити на боці SQL-сервера виконуємі процедури вставки (INSERTdbP), видалення (DELETEdbP) та корегування (UPDATEdbP) таблиці PERS, для чого:

виконати скрипт, що міститься у файлі CreateProcINSERTdbP.sql:

CONNECT "e:\Lr3\dbP\dbP.gdb" USER "SYSDBA" PASSWORD "masterkey";

/* Виконуєма процедура INSERTdbP. Додає дані про співробітника, вертає номер запису */

SET TERM ^;

CREATE PROCEDURE INSERTdbP

(

pDEP CHAR(15),

 pFAM CHAR(20),

 pNAM CHAR(20),

 pPAR CHAR(20),

 pYEAR_B INTEGER,

 pSEX CHAR(1)

)

AS

BEGIN

 Insert into PERS (DEP, FAM, NAM, PAR, YEAR_B, SEX)

VALUES (:pDEP, :pFAM, :pNAM, :pPAR, :pYEAR_B, :pSEX);

END;^

SET TERM ;^

COMMIT;

•  виконати скрипт, що міститься у файлі CreateProcDELETEdbP.sql:

CONNECT "e:\Lr3\dbP\dbP.gdb" USER "SYSDBA" PASSWORD "masterkey";

/* Виконуєма процедура DELETEdbP знищення даних про співробітника */

SET TERM ^;

CREATE PROCEDURE DELETEdbP

(

pNUM INTEGER

)

AS

BEGIN

 DELETE FROM PERS WHERE NUM = :pNUM;

END;^

SET TERM ;^

COMMIT;

•  виконати скрипт, що міститься у файлі CreateProcUPDATEdbP.sql:

CONNECT "e:\Lr3\dbP\dbP.gdb" USER "SYSDBA" PASSWORD "masterkey";

/* Виконуєма процедура UPDATEdbP.

 Змінює дані про співробітника, вертає номер запису чи 0, якщо співробітника нема */

SET TERM ^;

CREATE PROCEDURE UPDATEdbP

 (

pDEP CHAR(15),

 pFAM CHAR(20),

 pNAM CHAR(20),

 pPAR CHAR(20),

 pYEAR_B INTEGER,

 pSEX CHAR(1)

)

RETURNS

 (number integer)

AS

BEGIN

 number = 0;

Select NUM From PERS

 Where (FAM = :pFAM) and (NAM = :pNAM) and (PAR = :pPAR)

Into number;

if (number > 0) then

 Update PERS 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:

object main_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

 object PageControl: 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

 object find_TabSheet: TTabSheet

 Caption = 'Відбір'

object select_GroupBox: TGroupBox

 Left = 1

 Top = 5

 Width = 268

 Height = 212

 Caption = 'Відбір за ...'

TabOrder = 7

 end

 object sex_RadioGroup: TRadioGroup

 Left = 8

 Top = 120

 Width = 257

 Height = 53

 Caption = ' статтю '

Columns = 2

 ItemIndex = 0

 Items.Strings = (

'чоловіча'

'жіноча')

TabOrder = 0

 OnClick = minage_CSpinEditChange

 end

 object speedfind_GroupBox: TGroupBox

 Left = 0

 Top = 224

 Width = 257

 Height = 169

 Caption = ' Швидкий пошук за прізвищем '

TabOrder = 5

 object Image1: TImage

 Left = 8

 Top = 16

 Width = 105

 Height = 145

 Picture.Data = { }

Stretch = True

 end

 object speedfind_Label: TLabel

 Left = 154

 Top = 42

 Width = 56

 Height = 16

 Caption = 'Прізвище'

end

 object speedfind_Image: TImage

 Left = 32

 Top = 48

 Width = 57

 Height = 73

 Picture.Data = { }

Stretch = True

 end

 end

 object age_GroupBox: TGroupBox

 Left = 8

 Top = 32

 Width = 257

 Height = 81

 Caption = ' віком '

Enabled = False

 TabOrder = 4

 object minage_Label: TLabel

 Left = 65

 Top = 15

 Width = 28

 Height = 16

 Caption = 'від ...'

end

 object maxage_Label: TLabel

 Left = 192

 Top = 15

 Width = 25

 Height = 16

 Caption = 'до ...'

end

 object minage_Image: TImage

 Left = 8

 Top = 24

 Width = 41

 Height = 49

 Picture.Data = { }

Stretch = True

 Transparent = True

 end

 object maxage_Image: TImage

 Left = 136

 Top = 24

 Width = 41

 Height = 49

 Picture.Data = { }

Stretch = True

 Transparent = True

 end

 end

 object speedfind_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

 object minage_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

 object maxage_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

 object select_BitBtn: TBitBtn

 Left = 8

 Top = 184

 Width = 257

 Height = 25

 Cursor = crHandPoint

 Caption = 'Поновити відбір'

TabOrder = 6

 OnClick = select_BitBtnClick

 Kind = bkOK

 end

 end

 object TabEdit: TTabSheet

 Caption = 'Корегування'

Font.Charset = RUSSIAN_CHARSET

 Font.Color = clBlack

 Font.Height = -13

 Font.Name = 'Times New Roman'

Font.Style = [fsBold, fsItalic]

ParentFont = False

 object ch_GroupBox: TGroupBox

 Left = 2

 Top = 5

 Width = 269

 Height = 388

 Caption = ' Загальні відомості '

TabOrder = 9

 object chdp_Label: TLabel

 Left = 12

 Top = 38

 Width = 50

 Height = 16

 Caption = 'Відділок'

FocusControl = chdp_ComboBox

 end

 object chname_Label: TLabel

 Left = 12

 Top = 138

 Width = 25

 Height = 16

 Caption = 'Ім'#39'я'

FocusControl = chname_Edit

 end

 object chgrand_Label: TLabel

 Left = 12

 Top = 188

 Width = 73

 Height = 16

 Caption = 'По батькові'

FocusControl = chgrand_Edit

 end

 object chyear_Label: TLabel

 Left = 12

 Top = 232

 Width = 95

 Height = 16

 Caption = 'Рік народження'

end

 object chfam_Label: TLabel

 Left = 12

 Top = 87

 Width = 56

 Height = 16

 Caption = 'Прізвище'

FocusControl = chfam_Edit

 end

 object oper_Bevel: TBevel

 Left = 18

 Top = 282

 Width = 251

 Height = 96

 end

 object oper_Shape: TShape

 Left = 19

 Top = 283

 Width = 248

 Height = 94

 Brush.Color = clBlack

 end

 object Animate1: TAnimate

 Left = 24

 Top = 291

 Width = 60

 Height = 80

 Active = True

 FileName = 'Frage.avi'

StopFrame = 31

 Transparent = False

 end

 end

 object sex2_RadioGroup: TRadioGroup

 Left = 185

 Top = 218

 Width = 77

 Height = 41

 Caption = 'Стать'

Columns = 2

 ItemIndex = 0

 Items.Strings = (

'ч'

'ж')

TabOrder = 4

 end

 object chdp_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

 object chfam_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

 object chname_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

 object chgrand_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

 object chadd_Button: TButton

 Left = 88

 Top = 294

 Width = 169

 Height = 25

 Hint = 'Новая запись'

Caption = '&Додати'

ParentShowHint = False

 ShowHint = True

 TabOrder = 5

 OnClick = chadd_ButtonClick

 end

 object chdelete_Button: TButton

 Left = 88

 Top = 322

 Width = 169

 Height = 25

 Hint = 'Удаление записи'

Caption = '&Видалити'

ParentShowHint = False

 ShowHint = True

 TabOrder = 6

 OnClick = chdelete_ButtonClick

 end

 object chpost_Button: TButton

 Left = 88

 Top = 351

 Width = 169

 Height = 25

 Hint = 'Фиксация изменений'

Caption = '&Поновити'

ParentShowHint = False

 ShowHint = True

 TabOrder = 7

 OnClick = chpost_ButtonClick

 end

 object chyear_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

 object left_Panel: TPanel

 Left = 0

 Top = 0

 Width = 421

 Height = 428

 Align = alLeft

 BevelInner = bvLowered

 Caption = 'left_Panel'

TabOrder = 1

 object find_TPanel: TPanel

 Left = 6

 Top = 5

 Width = 406

 Height = 420

 Caption = 'find_TPanel'

TabOrder = 1

 object find_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

 object dp_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

 object dp_ComboBox: TComboBox

 Left = 8

 Top = 24

 Width = 177

 Height = 24

 ItemHeight = 16

 Items.Strings = (

'Бухгалтерия')

TabOrder = 0

 OnChange = dp_ComboBoxChange

 end

 end

 object dp2_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

 object dp2_DBEdit: TDBEdit

 Left = 5

 Top = 15

 Width = 182

 Height = 23

 Color = clSilver

 DataField = 'PROISV'

DataSource = dp_DataSource

 Enabled = False

 TabOrder = 0

 end

 end

 object pr_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

 object Bevel1: TBevel

 Left = 10

 Top = 197

 Width = 41

 Height = 24

 end

 object pr_Label: TLabel

 Left = 16

 Top = 201

 Width = 29

 Height = 16

 Alignment = taCenter

 AutoSize = False

 end

 end

 object find_Animate: TAnimate

 Left = 32

 Top = 8

 Width = 48

 Height = 45

 Active = True

 CommonAVI = aviFindComputer

 StopFrame = 8

 end

 object GroupBox1: 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

 object sql_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

 object pr_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

 object pr_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

 object pr_DBNavigator: TDBNavigator

 Left = 73

 Top = 319

 Width = 244

 Height = 20

 DataSource = pr_DataSource

 VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast]

TabOrder = 3

 end

 end

 object dp_DataSource: TDataSource

 DataSet = dp_Query

 Left = 140

 Top = 55

 end

 object pr_DataSource: TDataSource

 DataSet = pr_Query

 Left = 298

 Top = 268

 end

 object dp_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>

object dp_QueryDEP: TStringField

 FieldName = 'DEP'

Origin = 'DEP.DEP'

Size = 15

 end

 object dp_QueryPROISV: TStringField

 FieldName = 'PROISV'

Origin = 'DEP.PROISV'

Size = 15

 end

 end

 object update_Query: TQuery

 DatabaseName = 'dbP'

DataSource = pr_DataSource

 RequestLive = True

 Left = 356

 Top = 268

 end

 object pr_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>

object pr_QueryNUM: TSmallintField

 FieldName = 'NUM'

Origin = 'PERS.NUM'

end

 object pr_QueryDEP: TStringField

 FieldName = 'DEP'

Origin = 'PERS.DEP'

Size = 15

 end

 object pr_QueryFAM: TStringField

 FieldName = 'FAM'

Origin = 'PERS.FAM'

end

 object pr_QueryNAM: TStringField

 FieldName = 'NAM'

Origin = 'PERS.NAM'

end

 object pr_QueryPAR: TStringField

 FieldName = 'PAR'

Origin = 'PERS.PAR'

end

 object pr_QueryYEAR_B: TSmallintField

 FieldName = 'YEAR_B'

Origin = 'PERS.YEAR_B'

end

 object pr_QuerySEX: TStringField

 FieldName = 'SEX'

Origin = 'PERS.SEX'

Size = 1

 end

 object pr_QueryCHARACT: TBlobField

 FieldName = 'CHARACT'

Origin = 'PERS.CHARACT'

BlobType = ftMemo

 Size = 1

 end

 object pr_QueryPHOTO: TBlobField

 FieldName = 'PHOTO'

Origin = 'PERS.PHOTO'

BlobType = ftGraphic

 Size = 1

 end

 object pr_QueryAGE: TSmallintField

 Alignment = taCenter

 DisplayLabel = 'Возраст'

DisplayWidth = 7

 FieldKind = fkCalculated

 FieldName = 'AGE'

Calculated = True

 end

 end

end

Підлеглу форму character_Form наведено на мал. 1.14.

 Малюнок 1.14

Текстовий опис цієї форми наведено нижче:

object character_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

 object character_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

 object PPhoto: TPanel

 Left = 195

 Top = 0

 Width = 115

 Height = 194

 Align = alRight

 Caption = 'PPhoto'

TabOrder = 1

 object photo_DBImage: TDBImage

 Left = 5

 Top = 42

 Width = 105

 Height = 105

 DataField = 'Photo'

DataSource = main_Form.pr_DataSource

 TabOrder = 0

 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;

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

 __fastcall Tmain_Form(TComponent* Owner);

unsigned short Year;

unsigned short Month;

unsigned short Day;

bool CanPost;

int AllPers, CurrentPers;

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"

#include "Udba.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);

// підрахування кількості записів у таблиці 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)

{

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)

{

// поточна персона

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;

else sex2_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

 AnsiString NewSex; // визначення статі

 if (sex2_RadioGroup->ItemIndex == 0) NewSex = "ч";

else NewSex = "ж";

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)

{

AnsiString s, sSQL;

const AnsiString 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 += "ч'";

else sSQL += "ж'";

}

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)

{

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;

}

// поточна персона

CurrentPers = pr_QueryNUM->AsInteger;

pr_Label->Caption = IntToStr(CurrentPers);

}

//---------------------------------------------------------------------------

void __fastcall Tmain_Form::Delay(unsigned long int mSeconds)

{ // затримка на декілька мілісекунд

 unsigned long int FirstTick;

FirstTick = GetTickCount();

do

 Application->ProcessMessages();

while (GetTickCount() - FirstTick <= mSeconds);

}

Файл Udba.h

//---------------------------------------------------------------------------

#ifndef UdbaH

#define UdbaH

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <DBCtrls.hpp>

#include <ExtCtrls.hpp>

//---------------------------------------------------------------------------

class Tcharacter_Form : public TForm

{

__published: // IDE-managed Components

 TDBMemo *character_DBMemo;

TPanel *PPhoto;

TDBImage *photo_DBImage;

private: // User declarations

public:  // User declarations

 __fastcall Tcharacter_Form(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE Tcharacter_Form *character_Form;

//---------------------------------------------------------------------------

#endif

Файл Udba.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Udba.h"

#include "Udb.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

Tcharacter_Form *character_Form;

//---------------------------------------------------------------------------

__fastcall Tcharacter_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:

object main_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

 object PageControl: 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

 object find_TabSheet: TTabSheet

 Caption = 'Відбір'

object select_GroupBox: TGroupBox

 Left = 1

 Top = 5

 Width = 268

 Height = 212

 Caption = 'Відбір за ...'

TabOrder = 7

 end

 object sex_RadioGroup: TRadioGroup

 Left = 8

 Top = 120

 Width = 257

 Height = 53

 Caption = ' статтю '

Columns = 2

 ItemIndex = 0

 Items.Strings = (

'чоловіча'

'жіноча')

TabOrder = 0

 OnClick = minage_CSpinEditChange

 end

 object speedfind_GroupBox: TGroupBox

 Left = 0

 Top = 224

 Width = 257

 Height = 169

 Caption = ' Швидкий пошук за прізвищем '

TabOrder = 5

 object Image1: TImage

 Left = 8

 Top = 16

 Width = 105

 Height = 145

 Picture.Data = {}

Stretch = True

 end

 object speedfind_Label: TLabel

 Left = 154

 Top = 50

 Width = 56

 Height = 16

 Caption = 'Прізвище'

end

 object speedfind_Image: TImage

 Left = 32

 Top = 48

 Width = 57

 Height = 73

 Picture.Data = {}

Stretch = True

 end

 end

 object age_GroupBox: TGroupBox

 Left = 8

 Top = 32

 Width = 257

 Height = 81

 Caption = ' віком '

Enabled = False

 TabOrder = 4

 object minage_Label: TLabel

 Left = 65

 Top = 15

 Width = 28

 Height = 16

 Caption = 'від ...'

end

 object maxage_Label: TLabel

 Left = 192

 Top = 15

 Width = 25

 Height = 16

 Caption = 'до ...'

end

 object minage_Image: TImage

 Left = 8

 Top = 24

 Width = 41

 Height = 49

 Picture.Data = {}

Stretch = True

 Transparent = True

 end

 object maxage_Image: TImage

 Left = 136

 Top = 24

 Width = 41

 Height = 49

 Picture.Data = {}

Stretch = True

 Transparent = True

 end

 end

 object speedfind_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

 object minage_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

 object maxage_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

 object select_BitBtn: TBitBtn

 Left = 8

 Top = 184

 Width = 257

 Height = 25

 Cursor = crHandPoint

 Caption = 'Поновити відбір'

TabOrder = 6

 OnClick = select_BitBtnClick

 Kind = bkOK

 end

 end

 object TabEdit: TTabSheet

 Caption = 'Корегування'

Font.Charset = RUSSIAN_CHARSET

 Font.Color = clBlack

 Font.Height = -13

 Font.Name = 'Times New Roman'

Font.Style = [fsBold, fsItalic]

ParentFont = False

 object ch_GroupBox: TGroupBox

 Left = 2

 Top = 5

 Width = 269

 Height = 388

 Caption = ' Загальні відомості '

TabOrder = 9

 object chdp_Label: TLabel

 Left = 12

 Top = 38

 Width = 50

 Height = 16

 Caption = 'Відділок'

FocusControl = chdp_ComboBox

 end

 object chname_Label: TLabel

 Left = 12

 Top = 138

 Width = 25

 Height = 16

 Caption = 'Ім'#39'я'

FocusControl = chname_Edit

 end

 object chgrand_Label: TLabel

 Left = 12

 Top = 188

 Width = 73

 Height = 16

 Caption = 'По батькові'

FocusControl = chgrand_Edit

 end

 object chyear_Label: TLabel

 Left = 12

 Top = 232

 Width = 95

 Height = 16

 Caption = 'Рік народження'

end

 object chfam_Label: TLabel

 Left = 12

 Top = 87

 Width = 56

 Height = 16

 Caption = 'Прізвище'

FocusControl = chfam_Edit

 end

 object oper_Bevel: TBevel

 Left = 18

 Top = 282

 Width = 251

 Height = 96

 end

 object oper_Shape: TShape

 Left = 19

 Top = 283

 Width = 248

 Height = 94

 Brush.Color = clBlack

 end

 object Animate1: TAnimate

 Left = 24

 Top = 291

 Width = 60

 Height = 80

 Active = True

 FileName = 'Frage.avi'

StopFrame = 31

 Transparent = False

 end

 end

 object sex2_RadioGroup: TRadioGroup

 Left = 185

 Top = 218

 Width = 77

 Height = 41

 Caption = 'Стать'

Columns = 2

 ItemIndex = 0

 Items.Strings = (

'ч'

'ж')

TabOrder = 4

 end

 object chdp_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

 object chfam_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

 object chname_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

 object chgrand_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

 object chadd_Button: TButton

 Left = 88

 Top = 294

 Width = 169

 Height = 25

 Hint = 'Новая запись'

Caption = '&Додати'

ParentShowHint = False

 ShowHint = True

 TabOrder = 5

 OnClick = chadd_ButtonClick

 end

 object chdelete_Button: TButton

 Left = 88

 Top = 322

 Width = 169

 Height = 25

 Hint = 'Удаление записи'

Caption = '&Видалити'

ParentShowHint = False

 ShowHint = True

 TabOrder = 6

 OnClick = chdelete_ButtonClick

 end

 object chpost_Button: TButton

 Left = 88

 Top = 351

 Width = 169

 Height = 25

 Hint = 'Фиксация изменений'

Caption = '&Поновити'

ParentShowHint = False

 ShowHint = True

 TabOrder = 7

 OnClick = chpost_ButtonClick

 end

 object chyear_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

 object left_Panel: TPanel

 Left = 0

 Top = 0

 Width = 421

 Height = 429

 Align = alLeft

 BevelInner = bvLowered

 Caption = 'left_Panel'

TabOrder = 1

 object find_TPanel: TPanel

 Left = 6

 Top = 5

 Width = 406

 Height = 420

 Caption = 'find_TPanel'

TabOrder = 1

 object find_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

 object dp_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

 object dp_ComboBox: TComboBox

 Left = 14

 Top = 22

 Width = 155

 Height = 24

 ItemHeight = 16

 Items.Strings = (

'Бухгалтерия')

TabOrder = 0

 OnChange = dp_ComboBoxChange

 end

 end

 object dp2_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

 object dp2_DBEdit: TDBEdit

 Left = 5

 Top = 15

 Width = 156

 Height = 23

 Color = clSilver

 DataField = 'PROISV'

DataSource = dp_DataSource

 Enabled = False

 TabOrder = 0

 end

 end

 object pr_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

 object pr_Panel: TPanel

 Left = 9

 Top = 196

 Width = 66

 Height = 26

 TabOrder = 0

 object pr_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

 object find_Animate: TAnimate

 Left = 40

 Top = 4

 Width = 48

 Height = 45

 Active = True

 CommonAVI = aviFindComputer

 StopFrame = 8

 end

 object GroupBox1: 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

 object sql_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

 object pr_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

 object pr_DBNavigator: TDBNavigator

 Left = 96

 Top = 320

 Width = 304

 Height = 18

 DataSource = pr_DataSource

 VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast]

TabOrder = 2

 end

 end

 object dp_DataSource: TDataSource

 DataSet = dp_Query

 Left = 110

 Top = 58

 end

 object pr_DataSource: TDataSource

 DataSet = pr_Query

 Left = 213

 Top = 263

 end

 object dp_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>

object dp_QueryDEP: TStringField

 FieldName = 'DEP'

Origin = 'DEP.DEP'

Size = 15

 end

 object dp_QueryPROISV: TStringField

 FieldName = 'PROISV'

Origin = 'DEP.PROISV'

Size = 15

 end

 end

 object update_Query: TQuery

 DatabaseName = 'dbP'

DataSource = pr_DataSource

 RequestLive = True

 Left = 271

 Top = 263

 end

 object pr_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>

object pr_QueryNUM: TSmallintField

 FieldName = 'NUM'

Origin = 'PERS.NUM'

end

 object pr_QueryDEP: TStringField

 FieldName = 'DEP'

Origin = 'PERS.DEP'

Size = 15

 end

 object pr_QueryFAM: TStringField

 FieldName = 'FAM'

Origin = 'PERS.FAM'

end

 object pr_QueryNAM: TStringField

 FieldName = 'NAM'

Origin = 'PERS.NAM'

end

 object pr_QueryPAR: TStringField

 FieldName = 'PAR'

Origin = 'PERS.PAR'

end

 object pr_QueryYEAR_B: TSmallintField

 FieldName = 'YEAR_B'

Origin = 'PERS.YEAR_B'

end

 object pr_QuerySEX: TStringField

 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. Дайте докладні пояснення до розробленої програми.




1. Стаття 418 Поняття права інтелектуальної власності 1
2. Организация биржевых торгов
3. Эстония
4. Тема- ИНСТИТУЦИОНАЛЬНОВОСПРОИЗВОДСТВЕННАЯ ПОЛИТИКА В СИСТЕМЕ ГОСУДАРСТВЕННОГО РЕГУЛИРОВАНИЯ СТРУКТУРН
5. Строительное материаловедение на рубеже веков
6. Разработка системы мероприятий по борьбе с рапсовым пилильщиком и рапсовым цветоедом на рапсе1.html
7. Основные проблемы экономической организации и ограниченность ресурсов Экономические ресурсы которые мог
8. Тема 10Фінансові посередники на грошовому ринку
9. СХЕМЫ СОЕДИНЕНИЯ ТРАНСФОРМАТОРОВ ТОКА И РЕЛЕ по дисциплине Электроснабжение сельского хозяй
10. Лесопромышленный комплекс Украины
11. Вопросы местного значения и полномочия органов местного самоуправления города Екатеринбург
12. детски веря в дивоБой курантов в праздник ждётБудь уверен в твоей жизниЧудо обязательно придёт По
13. Линкольн ПРОТИВОРЕЧИЯ ВО ВЗАИМОДЕЙСТВИИ ЛИДЕРА И ЭЛЕКТОРАТА Феномен политического лидерства как один из
14. Введение Общероссийский классификатор профессий рабочих должностей служащих и тарифных разрядо
15. Пищевые машины Дистанционное обучение В
16.  Обмен Долгожданная встреча
17.  Источники Немецкое право с его территориальной и сословной раздробленностью не могло удовлетворит
18. Экономическая мысль средневековья
19. Быков Василь
20. Научнометодическое обеспечение функционирования патронатной семьи как профессиональной замещающей семьи