пражнение 6: Ъ ¡ ЪЪ Я ¡ ¡ ibexpresstimetable.swu.bg › lecture ›...
TRANSCRIPT
© 2013 Радослава Кралева 1
ЮГОЗАПАДЕН УНИВЕРСИТЕТ ,,НЕОФИТ РИЛСКИ” БЛАГОЕВГРАД
Проект № BG051PO001-3.1.07-0036
,,Актуализиране на учебните програми
в Природо-математически факултет на ЮЗУ ,,Неофит Рилски“
в съответствие с изискванията на пазара на труда“
Проектът се осъществява с финансовата подкрепа на Оперативна програма „Развитие на човешките
ресурси“, съфинансирана от Европейския социален фонд на Европейския съюз
Инвестира във вашето бъдеще!
Упражнение 6: СЪЗДАВАНЕ НА КЛИЕНТ-СЪРВЪР ПРИЛОЖЕНИЯ ЗА БАЗИ ОТ ДАННИ С БИБЛИОТЕКАТА IBEXPRESS
Радослава Кралева В настоящето упражнение ще бъде представено поетапното разработване Windows приложение за работа с бази от данни, което използва библиотеката IBExpress. Примерна сесия на работа с приложението Ex6Demo1 е показана на Фиг. 6.1.
Фигура 6.1: Примерна сесия на работа с приложението Ex6Demo1.
© 2013 Радослава Кралева 2
Това приложение (Ex6Demo1) ще визуализира и ще предоставя възможност за редактиране на данни от базата от данни DBDemos (която е примерна база от данни доставяща се с Interbase Server). Данните, които ще бъдат достъпвани и обработвани се съхраняват в 4 таблици (Customers, Orders, Items и Parts), връзките между които са показани на Фиг. 6.2.
Фигура 6.2: Част от схемата на релационната база от данни DBDemos, която е използвана за разработване на приложението Ex6Demo1.
1. СЪЗДАВАНЕ НА ПРИЛОЖЕНИЕТО Ex6Demo1
А. Стартирайте RAD Studio и изпълнете следните стъпки:
Стъпка 1: От главното меню изберете File ► New ► VCL Forms Application – Delphi (или C++ Builder) в зависимост от езика, който искате да използвате.
Стъпка 2: От главното меню изберете File ► Save All... Задайте име на модула, който ще съдържа кода с имплементация на главната форма, което да бъде: MainUnit.pas (за Delphi) или MainUnit.cpp (за C++ Builder), а проектния файл запишете като: Ex6Demo1.dproj (за Delphi) или Ex6Demo1.cbproj (за C++ Builder). Стъпка 3: Задайте следните настройки за главната форма на приложението:
object MainForm: TMainForm
Left = 0
Top = 0
BorderIcons = [biSystemMenu, biMinimize]
© 2013 Радослава Кралева 3
BorderStyle = bsSingle
Caption = 'MainForm'
ClientHeight = 506
ClientWidth = 577
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
end
Стъпка 4: От страницата Additional на палитрата с компоненти (Tool Palette) добавете четири компонента от тип TShape. Настройте тези компоненти както е показано по-долу:
object Shape1: TShape
Left = 8
Top = 32
Width = 561
Height = 2
end
object Shape2: TShape
Left = 8
Top = 164
Width = 561
Height = 2
end
object Shape3: TShape
Left = 8
Top = 356
Width = 561
Height = 2
end
object Shape4: TShape
Left = 344
Top = 380
Width = 2
Height = 117
end
Стъпка 5: От страницата Standard на палитрата с компоненти (Tool Palette) добавете двадесет и два компонента от тип TLabel, и ги настроите както е показано по-долу:
object Label1: TLabel
Left = 8
Top = 40
Width = 41
Height = 13
Caption = 'CUSTNO'
FocusControl = DBEdit1
end
object Label2: TLabel
Left = 64
Top = 40
Width = 49
Height = 13
Caption = 'COMPANY'
FocusControl = DBEdit2
end
© 2013 Радослава Кралева 4
object Label3: TLabel
Left = 256
Top = 40
Width = 34
Height = 13
Caption = 'ADDR1'
FocusControl = DBEdit3
end
object Label4: TLabel
Left = 416
Top = 40
Width = 34
Height = 13
Caption = 'ADDR2'
FocusControl = DBEdit4
end
object Label5: TLabel
Left = 256
Top = 80
Width = 23
Height = 13
Caption = 'CITY'
FocusControl = DBEdit5
end
object Label6: TLabel
Left = 416
Top = 80
Width = 31
Height = 13
Caption = 'STATE'
FocusControl = DBEdit6
end
object Label7: TLabel
Left = 464
Top = 80
Width = 16
Height = 13
Caption = 'ZIP'
FocusControl = DBEdit7
end
object Label8: TLabel
Left = 256
Top = 120
Width = 48
Height = 13
Caption = 'COUNTRY'
FocusControl = DBEdit8
end
object Label9: TLabel
Left = 8
Top = 120
Width = 34
Height = 13
Caption = 'PHONE'
FocusControl = DBEdit9
end
object Label10: TLabel
Left = 112
Top = 120
Width = 19
Height = 13
Caption = 'FAX'
FocusControl = DBEdit10
end
object Label11: TLabel
Left = 464
Top = 120
Width = 45
Height = 13
Caption = 'TAXRATE'
FocusControl = DBEdit11
end
object Label12: TLabel
Left = 8
Top = 80
Width = 48
Height = 13
Caption = 'CONTACT'
FocusControl = DBEdit12
end
object Label13: TLabel
Left = 112
Top = 80
Width = 92
Height = 13
Caption = 'LASTINVOICEDATE'
FocusControl = DBEdit13
end
object Label14: TLabel
Left = 8
Top = 172
Width = 41
Height = 13
Caption = 'ORDERS'
FocusControl = DBEdit9
end
object Label15: TLabel
Left = 8
Top = 364
Width = 30
Height = 13
Caption = 'ITEMS'
FocusControl = DBEdit9
end
object Label16: TLabel
Left = 352
Top = 380
Width = 41
Height = 13
Caption = 'PARTNO'
FocusControl = DBEdit14
end
object Label18: TLabel
Left = 416
Top = 380
Width = 68
Height = 13
Caption = 'DESCRIPTION'
FocusControl = DBEdit16
end
object Label19: TLabel
Left = 352
© 2013 Радослава Кралева 5
Top = 420
Width = 43
Height = 13
Caption = 'ONHAND'
FocusControl = DBEdit17
end
object Label20: TLabel
Left = 416
Top = 420
Width = 50
Height = 13
Caption = 'ONORDER'
FocusControl = DBEdit18
end
object Label21: TLabel
Left = 496
Top = 420
Width = 27
Height = 13
Caption = 'COST'
FocusControl = DBEdit19
end
object Label22: TLabel
Left = 496
Top = 460
Width = 51
Height = 13
Caption = 'LISTPRICE'
FocusControl = DBEdit20
end
Стъпка 6: От страницата IBExpress на палитрата с компоненти (Tool Palette) добавете един компонент TIBDatabase и един компонент TIBTransaction и ги настроите, както е показано по-долу:
object IBDatabaseDBDemos: TIBDatabase
Connected = True
DatabaseName = '127.0.0.1:Dbdemos'
Params.Strings = (
'user_name=sysdba'
'password=masterkey')
LoginPrompt = False
DefaultTransaction = IBTransaction1
Left = 56
Top = 228
end
object IBTransaction1: TIBTransaction
Active = True
Left = 56
Top = 276
end
Стъпка 7: От страницата IBExpress на палитрата с компоненти (Tool Palette) добавете четири компонента TIBTable, а от страницата Data Access добавете четири компонента TDataSource и ги настроите както е показано по-долу (в реда в който са показани):
object IBTableCUSTOMER: TIBTable
Database = IBDatabaseDBDemos
Transaction = IBTransaction1
TableName = 'CUSTOMER'
Left = 184
Top = 228
object IBTableCUSTOMERCUSTNO: TFloatField
FieldName = 'CUSTNO'
Required = True
end
object IBTableCUSTOMERCOMPANY: TIBStringField
FieldName = 'COMPANY'
Size = 30
end
© 2013 Радослава Кралева 6
object IBTableCUSTOMERADDR1: TIBStringField
FieldName = 'ADDR1'
Size = 30
end
object IBTableCUSTOMERADDR2: TIBStringField
FieldName = 'ADDR2'
Size = 30
end
object IBTableCUSTOMERCITY: TIBStringField
FieldName = 'CITY'
Size = 15
end
object IBTableCUSTOMERSTATE: TIBStringField
FieldName = 'STATE'
end
object IBTableCUSTOMERZIP: TIBStringField
FieldName = 'ZIP'
Size = 10
end
object IBTableCUSTOMERCOUNTRY: TIBStringField
FieldName = 'COUNTRY'
end
object IBTableCUSTOMERPHONE: TIBStringField
FieldName = 'PHONE'
Size = 15
end
object IBTableCUSTOMERFAX: TIBStringField
FieldName = 'FAX'
Size = 15
end
object IBTableCUSTOMERTAXRATE: TFloatField
FieldName = 'TAXRATE'
end
object IBTableCUSTOMERCONTACT: TIBStringField
FieldName = 'CONTACT'
end
object IBTableCUSTOMERLASTINVOICEDATE: TDateTimeField
FieldName = 'LASTINVOICEDATE'
end
end
object DataSourceCUSTOMER: TDataSource
DataSet = IBTableCUSTOMER
Left = 184
Top = 276
end
object IBTableORDERS: TIBTable
Database = IBDatabaseDBDemos
Transaction = IBTransaction1
IndexFieldNames = 'CUSTNO'
MasterFields = 'CUSTNO'
MasterSource = DataSourceCUSTOMER
TableName = 'ORDERS'
Left = 320
Top = 228
object IBTableORDERSORDERNO: TFloatField
FieldName = 'ORDERNO'
Required = True
end
object IBTableORDERSCUSTNO: TFloatField
© 2013 Радослава Кралева 7
FieldName = 'CUSTNO'
Required = True
end
object IBTableORDERSSALEDATE: TDateTimeField
FieldName = 'SALEDATE'
end
object IBTableORDERSSHIPDATE: TDateTimeField
FieldName = 'SHIPDATE'
end
object IBTableORDERSEMPNO: TIntegerField
FieldName = 'EMPNO'
Required = True
end
object IBTableORDERSSHIPTOCONTACT: TIBStringField
FieldName = 'SHIPTOCONTACT'
end
object IBTableORDERSSHIPTOADDR1: TIBStringField
FieldName = 'SHIPTOADDR1'
Size = 30
end
object IBTableORDERSSHIPTOADDR2: TIBStringField
FieldName = 'SHIPTOADDR2'
Size = 30
end
object IBTableORDERSSHIPTOCITY: TIBStringField
FieldName = 'SHIPTOCITY'
Size = 15
end
object IBTableORDERSSHIPTOSTATE: TIBStringField
FieldName = 'SHIPTOSTATE'
end
object IBTableORDERSSHIPTOZIP: TIBStringField
FieldName = 'SHIPTOZIP'
Size = 10
end
object IBTableORDERSSHIPTOCOUNTRY: TIBStringField
FieldName = 'SHIPTOCOUNTRY'
end
object IBTableORDERSSHIPTOPHONE: TIBStringField
FieldName = 'SHIPTOPHONE'
Size = 15
end
object IBTableORDERSSHIPVIA: TIBStringField
FieldName = 'SHIPVIA'
Size = 7
end
object IBTableORDERSPO: TIBStringField
FieldName = 'PO'
Size = 15
end
object IBTableORDERSTERMS: TIBStringField
FieldName = 'TERMS'
Size = 6
end
object IBTableORDERSPAYMENTMETHOD: TIBStringField
FieldName = 'PAYMENTMETHOD'
Size = 7
end
object IBTableORDERSITEMSTOTAL: TFloatField
FieldName = 'ITEMSTOTAL'
end
© 2013 Радослава Кралева 8
object IBTableORDERSTAXRATE: TFloatField
FieldName = 'TAXRATE'
end
object IBTableORDERSFREIGHT: TFloatField
FieldName = 'FREIGHT'
end
object IBTableORDERSAMOUNTPAID: TFloatField
FieldName = 'AMOUNTPAID'
end
end
object DataSourceORDERS: TDataSource
DataSet = IBTableORDERS
Left = 320
Top = 276
end
object IBTableITEMS: TIBTable
Database = IBDatabaseDBDemos
Transaction = IBTransaction1
IndexFieldNames = 'ORDERNO'
MasterFields = 'ORDERNO'
MasterSource = DataSourceORDERS
TableName = 'ITEMS'
Left = 40
Top = 436
object IBTableITEMSORDERNO: TFloatField
FieldName = 'ORDERNO'
end
object IBTableITEMSITEMNO: TFloatField
FieldName = 'ITEMNO'
end
object IBTableITEMSPARTNO: TFloatField
FieldName = 'PARTNO'
end
object IBTableITEMSQTY: TIntegerField
FieldName = 'QTY'
end
object IBTableITEMSDISCOUNT: TFloatField
FieldName = 'DISCOUNT'
end
end
object DataSourceITEMS: TDataSource
DataSet = IBTableITEMS
Left = 120
Top = 436
end
object IBTablePARTS: TIBTable
Database = IBDatabaseDBDemos
Transaction = IBTransaction1
IndexFieldNames = 'PARTNO'
MasterFields = 'PARTNO'
MasterSource = DataSourceITEMS
TableName = 'PARTS'
Left = 448
Top = 228
object IBTablePARTSPARTNO: TFloatField
FieldName = 'PARTNO'
Required = True
© 2013 Радослава Кралева 9
end
object IBTablePARTSVENDORNO: TFloatField
FieldName = 'VENDORNO'
end
object IBTablePARTSDESCRIPTION: TIBStringField
FieldName = 'DESCRIPTION'
Size = 30
end
object IBTablePARTSONHAND: TFloatField
FieldName = 'ONHAND'
end
object IBTablePARTSONORDER: TFloatField
FieldName = 'ONORDER'
end
object IBTablePARTSCOST: TFloatField
FieldName = 'COST'
end
object IBTablePARTSLISTPRICE: TFloatField
FieldName = 'LISTPRICE'
end
end
object DataSourcePARTS: TDataSource
DataSet = IBTablePARTS
Left = 448
Top = 276
end
Стъпка 8: От страницата Data Controls на палитрата с компоненти (Tool Palette) добавете двадесет компонента от тип TDBEdit, и ги настроите както е показано по-долу:
object DBEdit1: TDBEdit
Left = 8
Top = 56
Width = 49
Height = 21
DataField = 'CUSTNO'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
end
object DBEdit2: TDBEdit
Left = 64
Top = 56
Width = 185
Height = 21
DataField = 'COMPANY'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
end
object DBEdit3: TDBEdit
Left = 256
Top = 56
Width = 153
Height = 21
DataField = 'ADDR1'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
end
object DBEdit4: TDBEdit
Left = 416
Top = 56
Width = 153
Height = 21
DataField = 'ADDR2'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
© 2013 Радослава Кралева 10
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
end
object DBEdit5: TDBEdit
Left = 256
Top = 96
Width = 153
Height = 21
DataField = 'CITY'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
end
object DBEdit6: TDBEdit
Left = 416
Top = 96
Width = 41
Height = 21
DataField = 'STATE'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
end
object DBEdit7: TDBEdit
Left = 464
Top = 96
Width = 105
Height = 21
DataField = 'ZIP'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
end
object DBEdit8: TDBEdit
Left = 256
Top = 136
Width = 201
Height = 21
DataField = 'COUNTRY'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
end
object DBEdit9: TDBEdit
Left = 8
Top = 136
Width = 97
Height = 21
DataField = 'PHONE'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
end
object DBEdit10: TDBEdit
Left = 112
Top = 136
Width = 137
Height = 21
DataField = 'FAX'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
end
object DBEdit11: TDBEdit
Left = 464
Top = 136
Width = 105
Height = 21
DataField = 'TAXRATE'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
end
object DBEdit12: TDBEdit
Left = 8
Top = 96
Width = 97
Height = 21
DataField = 'CONTACT'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
© 2013 Радослава Кралева 11
ParentFont = False
TabOrder = 11
end
object DBEdit13: TDBEdit
Left = 112
Top = 96
Width = 137
Height = 21
DataField = 'LASTINVOICEDATE'
DataSource = DataSourceCUSTOMER
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
end
object DBEdit14: TDBEdit
Left = 352
Top = 396
Width = 57
Height = 21
DataField = 'PARTNO'
DataSource = DataSourcePARTS
TabOrder = 16
end
object DBEdit16: TDBEdit
Left = 416
Top = 396
Width = 153
Height = 21
DataField = 'DESCRIPTION'
DataSource = DataSourcePARTS
TabOrder = 17
end
object DBEdit17: TDBEdit
Left = 352
Top = 436
Width = 57
Height = 21
DataField = 'ONHAND'
DataSource = DataSourcePARTS
TabOrder = 18
end
object DBEdit18: TDBEdit
Left = 416
Top = 436
Width = 73
Height = 21
DataField = 'ONORDER'
DataSource = DataSourcePARTS
TabOrder = 19
end
object DBEdit19: TDBEdit
Left = 496
Top = 436
Width = 73
Height = 21
DataField = 'COST'
DataSource = DataSourcePARTS
TabOrder = 20
end
object DBEdit20: TDBEdit
Left = 496
Top = 476
Width = 73
Height = 21
DataField = 'LISTPRICE'
DataSource = DataSourcePARTS
TabOrder = 21
end
© 2013 Радослава Кралева 12
Стъпка 9: От страницата Data Controls на палитрата с компоненти (Tool Palette) добавете един компонент TDBNavigator и го настроите както е показано по-долу:
object DBNavigator1: TDBNavigator
Left = 8
Top = 4
Width = 562
Height = 25
DataSource = DataSourceCUSTOMER
Align = alCustom
Flat = True
TabOrder = 13
end
Стъпка 10: От страницата Data Controls на палитрата с компоненти (Tool Palette) добавете два компонента TDBGrid и ги настроите както е показано по-долу:
object DBGridORDERS: TDBGrid
Left = 8
Top = 188
Width = 561
Height = 161
DataSource = DataSourceORDERS
Options = [dgEditing, dgTitles,
dgIndicator, dgColumnResize,
dgColLines, dgRowLines, dgTabs,
dgAlwaysShowSelection,
dgConfirmDelete, dgCancelOnExit]
TabOrder = 14
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
end
object DBGridITEMS: TDBGrid
Left = 8
Top = 380
Width = 329
Height = 117
DataSource = DataSourceITEMS
Options = [dgEditing, dgTitles,
dgIndicator, dgColumnResize,
dgColLines, dgRowLines, dgTabs,
dgAlwaysShowSelection,
dgConfirmDelete, dgCancelOnExit]
TabOrder = 15
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
end
© 2013 Радослава Кралева 13
След като бъдат добавени и настроени всички компоненти, формата по време на проектиране трябва да изглежда подобно на тази показана на Фиг. 6.3.
Фигура 6.3. Главната форма на приложението Ex6Demo1, след приключване на етапа на проектиране.
Стъпка 12: Създайте манипулатор (обработчик) на събитието OnCreate на главната форма и въведете следния код в редактора за код (Code Editor):
procedure TMainForm.FormCreate(Sender: TObject);
begin
IBDatabaseDBDemos.Open;
IBTableCUSTOMER.Open;
IBTableORDERS.Open;
IBTableITEMS.Open;
IBTablePARTS.Open;
end;
Дата: 16.12.2013 г. Експерт: _______________________
(Радослава Кралева)