Лабораторная работа: Проектування дволанкової розподіленої інформаційної системи для роботи з базами даних із використанням
Название: Проектування дволанкової розподіленої інформаційної системи для роботи з базами даних із використанням Раздел: Рефераты по информатике Тип: лабораторная работа |
Проектування дволанкової розподіленої інформаційної системи для роботи з БД із використанням 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. Дайте докладні пояснення до розробленої програми. |