Будь умным!


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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 27.11.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. Цербстская 21 апреля российская императрица 17621796
2. Электрооборудование и автоматика судов Дальневосточный государственный технический ры
3. ТравницаЗдравница либо Сказки из бабушкиного сундучка.html
4. Особливості правового регулювання договору ренти
5. го века Лучший продукт нового поколения Сайт компании tinyurl
6. Дискуссии о норманнской теории В конце IXв
7. 1 Відрахування на пенсійне забезпечення
8. практики полагают что рутинная работа начальника цеха не намного отличается от работы тех кем он руководит
9. тематика Яковлева А
10. Topicphpp93799379 В свет вышло шесть 6 книг Саврасова Александра- 1 Знания хранимые дольменами 2 Се
11. тема органов местного управления 5
12. физическая подготовка пользуются тогда когда необходимо подчеркнуть прикладную направленность физическ
13. Проверяемая безударная гласная в корне во втором классе.html
14. вариант 2 вариант 3 вариант 4 вариант 5 вариант 6 вариа
15. Тема уроку. Технологія створення банку ідей Мета уроку- засвоєння знань про сутність творчості зміст та тех
16. Тема лекции- Методы психологических исследований В
17. рефераті автор спробує розкрити природу конфліктів в організаціях а також описати методи керування їм
18. Лабораторная работа 7 Тема- Настройка среды Windows с помощью панели управления
19. тепловой эффект реакции.
20. Вариант 4 1 Методы административноправового регулирования свод