3. Создание приложений и изучение свойств компонентов
Задание 1. С помощью эксперта форм БД создать приложение с формой типа “сетка” для просмотра таблицы PARTS.DB из БД DBDEMOS, содержащей информацию о поставках изделий. Проверить работу приложения и ознакомиться со свойствами компонентов, помещенных в форму экспертом форм БД.
Рис.6. Окно связывания таблиц.
Пояснение к заданию 1. Эксперт форм помещает в форму компоненты доступа к данным Table1 и DataSource1, компонент DBGrid1 для отображения данных из PARTS.DB в стандартном табличном виде (в виде “сетки”) и компонент DBNavigator для управления данными. В табл.1 приведены значения важнейших свойств используемых компонентов, автоматически установленные экспертом форм; при разработке приложения “вручную” программист должен задать их самостоятельно.
Таблица 1
Свойство |
Значение |
Комментарий |
Table1: TTable | ||
Active |
False |
Управляет открытием таблицы |
DatabaseName |
DBDEMOS |
Спецификация каталога или псевдоним БД |
Name |
Table1 |
Имя компонента |
TableName |
parts.db |
Имя файла с таблицей |
DataSource1: TDataSource | ||
AutoEdit |
True |
Автоматически задает состояние Edit для набора данных при начале редактирования данных |
DataSet |
Table1 |
Имя компонента, через который передаются данные из БД и в БД |
Name |
DataSource1 |
Имя компонента |
DBGrid1: TDBGrid | ||
DataSource |
DataSource1 |
Имя компонента, через который осуществляется обмен и управление данными |
Name |
DBGrid1 |
Имя компонента |
DBNavigator: TDBNavigator | ||
DataSource |
DataSource1 |
Имя компонента, через который осуществляется обмен и управление данными |
Name |
DBNavigator |
Имя компонента |
VisibleButtons |
[nbFirst,nbPrior,..., nbRefresh] |
Список используемых кнопок навигатора |
Свойство Active компонента Table1, управляющее открытием таблицы, может устанавливаться вручную в окне инспектора объектов или программно методами Open (соответствует Active=True) и Close (соответствует Active=False). При установке свойства Active=True содержимое открытой таблицы появляется на экране в визуальном компоненте, отображающем данные. Следует запомнить, что для компонента типа TTable значения свойств DatabaseName и TableName доступны для изменения только при Active=False !
Компонент типа TBDNavigator (навигатор) управляет данными, отображаемыми в визуальных компонентах, использующих одноименный компонент типа TDataSource. Управление осуществляется с помощью кнопок навигатора (рис.7). Наличие конкретной кнопки задается в свойстве VisibleButtons установкой соответствующего идентификатора nbXxx в значение True (есть кнопка) или False (нет кнопки).
К следующей записи (nbNext) Вставить запись (nbInsert) Редактировать
запись (nbEdit)
К первой записи (nbFirst) Отменить редакти-
рование (nbCancel)
К предыдущей записи (nbPrior) Восстановить запись
из БД (nbRefresh)
К последней записи (nbLast) Удалить Сохранить запись запись (nbDelete) в БД (nbPost)
Рис.7. Кнопки навигатора.
При создании приложения без использования эксперта форм программист после размещения необходимых компонентов в рабочем поле формы устанавливает связь между компонентами, выполняя следующую последовательность действий:
1. Задать спецификацию используемого каталога или псевдоним БД в свойстве DatabaseName компонента типа TTable.
2. Задать в свойстве TableName компонента типа TTable имя файла, содержащего нужную таблицу. Имя файла выбирается из списка, который появляется при нажатии кнопки, расположенной в строке инспектора объектов, соответствующей свойству TableName.
3. В свойстве Dataset компонента типа TDataSource задать имя используемого компонента типа TTable. Значение свойства Dataset выбирается из списка аналогично тому, как выбиралось имя файла в пункте 2.
4. Задать в свойстве DataSource визуального компонента, отображающего данные или управляющего данными (в задании 1 это компоненты типа TDBGrid и TDBNavigator), имя компонента типа TDataSource, через который осуществляется обмен и управление данными. Значение свойства DataSource выбирается из списка аналогично тому, как выбиралось имя файла в пункте 2.
Задание 2. С помощью эксперта форм БД создать приложение с формой типа “ввод/редактирование” для просмотра таблицы EMPLOYEE.DB из БД DBDEMOS, содержащей информацию о служащих. Проверить работу приложения и ознакомиться со свойствами компонентов, помещенных в форму экспертом форм БД.
Пояснение к заданию 2. В форме, созданной экспертом форм, для отображения значений полей текущей записи используются компоненты типа TDBEdit, которые связаны с компонентом DataSource1 через свои свойства DataSource. Имя поля, значение которого отображается в компоненте типа TDBEdit, задается свойством DataField этого компонента. Надписи к полям задаются компонентами типа TLabel.
Задание 3. С помощью эксперта форм БД создать приложение с формой типа “главная/подчиненная” для просмотра таблицы CUSTOMER.DB и связанной с ней таблицы ORDERS.DB из БД DBDEMOS, в которых содержится информация о компаниях-покупателях и сделанных заказах. Информацию из каждой таблицы отображать в компоненте типа TDBGrid. Проверить работу приложения и ознакомиться со свойствами компонентов, помещенных в форму экспертом форм БД.
Пояснение к заданию 3. Эксперт форм помещает в форму для каждой таблицы свой комплект компонентов типа TTable, TDataSource, TDBGrid для доступа к данным и их отображения, а также один компонент типа TDBNavigator для управления данными, хранящимися в главной таблице CUSTOMER.DB. В табл.2 приведены значения важнейших свойств используемых компонентов, автоматически установленные экспертом форм; при разработке приложения “вручную” программист должен задать их самостоятельно.
При создании приложения без использования эксперта форм программисту необходимо выполнить следующие действия:
1. Разместить в форме для каждой из связанных таблиц по одному комплекту из трех компонентов, обеспечивающих доступ, управление и отображение данных.
2, Задать свойства компонентов из комплекта для главной таблицы (см. табл.2).
3. Задать свойства компонентов из комплекта для подчиненной таблицы, установив связь между полями связанных таблиц (см. табл.2).
4. Разместить навигатор и связать его с главной таблицей.
Таблица 2
Свойство |
Значение |
Комментарий |
|
Table1: TTable (главная таблица) |
| ||
Active |
False |
Управляет открытием таблицы |
|
DatabaseName |
DBDEMOS |
Спецификация каталога или псевдоним БД |
|
Name |
Table1 |
Имя компонента |
|
TableName |
customer.db |
Имя файла с таблицей |
|
DataSource1: TDataSource |
| ||
DataSet |
Table1 |
Имя компонента, через который передаются данные из БД и в БД |
|
Name |
DataSource1 |
Имя компонента |
|
DBGrid1: TDBGrid |
| ||
DataSource |
DataSource1 |
Имя компонента, через который осуществляется обмен и управление данными |
|
Name |
DBGrid1 |
Имя компонента |
|
Table2: TTable (подчиненная таблица) | |||
Active |
False |
Управляет открытием таблицы |
|
DatabaseName |
DBDEMOS |
Спецификация каталога или псевдоним БД |
|
MasterSource |
DataSource1 |
Имя компонента типа TDataSource, связанного с главной таблицей |
|
MasterFields |
CustNo |
Список полей главной таблицы для связи с подчиненной таблицей |
|
IndexFieldNames |
CustNo |
Индексный ключ (список полей подчиненной таблицы, по значениям которых упорядочиваются записи) |
|
Name |
Table2 |
Имя компонента |
|
TableName |
orders.db |
Имя файла с таблицей |
|
DataSource2: TDataSource | |||
DataSet |
Table2 |
Имя компонента, через который передаются данные из БД и в БД |
|
Name |
DataSource2 |
Имя компонента |
|
DBGrid2: TDBGrid | |||
DataSource |
DataSource2 |
Имя компонента, через который осуществляется обмен и управление данными |
|
Name |
DBGrid2 |
Имя компонента |
|
DBNavigator: TDBNavigator | |||
DataSource |
DataSource1 |
Имя компонента, чьим набором данных управляет навигатор |
|
Name |
DBNavigator |
Имя компонента |
|
Примечание. Для связи подчиненной таблицы с главной таблицей можно использовать конструктор связанных полей (Field Link Designer), который вызывается из инспектора объектов нажатием кнопки, расположенной в строке свойства MasterFields. Окно конструктора имеет вид, подобный показанному на рис.6, и позволяет выбрать нужный индекс (индексный ключ) и установить связь между полями подчиненной (detail) и главной (master) таблиц.
Задание 4. Приложение, созданное при выполнении задания 3, дополнить компонентами, обеспечивающими доступ, управление и отображение данных из таблицы ITEMS.DB, и связать эту таблицу в качестве подчиненной с таблицей ORDERS.DB. Проверить работу приложения, которое должно отображать данные из трех связанных таблиц.
Пояснение к заданию 4. Чтобы в рабочем поле формы появилось свободное место для размещения дополнительных компонентов, нужно увеличить размер формы, а для компонентов типа TDBGrid задать значение свойства Align=alNone и уменьшить высоту этих компонентов.
Задание 5. Приложение, созданное при выполнении задания 4, дополнить компонентами, обеспечивающими доступ, управление и отображение данных из таблицы PARTS.DB, и связать эту таблицу в качестве подчиненной с таблицей ITEMS.DB. Из таблицы PARTS.DB требуется отображать только содержимое поля Description (описание поставляемого изделия) в компоненте типа TDBEdit. Проверить работу приложения, которое должно отображать данные из четырех связанных таблиц.
Задание 6. С помощью эксперта форм БД создать приложение с формой типа “ввод/редактирование” для просмотра таблицы ITEMS.DB из БД DBDEMOS.
Дополнить созданное приложение компонентом типа TDBGrid, чтобы продублировать отображение содержимого таблицы ITEMS.DB. В таблице ITEMS.DB значения поля OrderNo не должны отличаться от номеров заказов, зафиксированных в таблице ORDERS.DB; значения поля PartNo не должны отличаться от номеров поставок изделий, зафиксированных в таблице PARTS.DB; значения поля ItemNo должно находиться в определенном диапазоне (например, 1-5).
Чтобы обеспечить ввод только допустимых значений в указанные поля, а также установку номера поставки путем выбора названия изделия, и запретить доступ к отображаемому значению поля Discount, следует в форме, созданной экспертом форм БД, заменить компоненты типа TDBEdit компонентами других типов, указанными в табл.3.
Таблица 3
-
Отображаемое
поле
Тип
компонента
Отображаемое
поле
Тип
компонента
OrderNo
PartNo
TDBLookupList
TDBLookupCombo
ItemNo
Discount
TDBComboBox
TDBText
Настроить эти компоненты, чтобы:
1) поле OrderNo (номер заказа) содержало значение, имеющееся в таблице
ORDERS.DB;
2) поле ItemNo (порядковый номер изделия в заказе) содержало значение, выбираемое из диапазона 1-5;
3) поле PartNo по номеру поставки находило в таблице PARTS.DB и отображало в рабочем поле формы название соответствующего поставляемого изделия (товара);
4) поле Discount (скидка) было доступно только для просмотра.
Проверить работу приложения, осуществив корректировку имеющихся и вставку новых строк в таблицу ITEMS.DB; изменение данных наблюдать в дополнительно размещенном компоненте типа TDBGrid.
Пояснение к заданию 6. Компонент типа TDBLookupList или TDBLookupCombo позволяет устанавливать значение поля в строке таблицы с учетом значений полей, хранящихся в другой (связанной) таблице. Таблица (ORDERS.DB или PARTS.DB), связанная с таблицей ITEMS.DB, должна быть представлена в рабочем поле формы компонентами типа TTable и TDataSource. Связь таблиц задается установкой свойств компонента, перечисленных в табл.4.
Компонент типа TDBComboBox отображает значение поля и задает список возможных значений этого поля. Пример устанавливаемых значений свойств приведен в табл.5. Отличие компонента типа TDBText от компонента типа TDBEdit заключается в недоступности отображаемого значения поля для изменения. Для этих компонентов обязательно задаются свойства DataSource, DataField и Name.
Таблица 4
Свойство |
Значение |
Комментарий |
DBLookupList1: TDBLookupList | ||
DataSource |
DataSource1 |
Имя компонента, обеспечивающего доступ к таблице ITEMS.DB |
DataField |
OrderNo |
Имя поля в таблице ITEMS.DB, значение которого отыскивается в таблице ORDERS.DB |
LookupSource |
DataSource2 |
Имя компонента, через который осуществляется обмен и управление данными из таблицы ORDERS.DB, связанной с таблицей ITEMS.DB |
LookupDisplay |
OrderNo |
Имя поля в таблице ORDERS.DB, значения которого отображаются в компоненте DBLookupList1 |
LookupField |
OrderNo |
Имя поля в таблице ORDERS.DB, значение которого отыскивается по значению поля, указанного в свойстве DataField |
DBLookupCombo1: TDBLookupCombo | ||
DataSource |
DataSource1 |
Имя компонента, обеспечивающего доступ к таблице ITEMS.DB |
DataField |
PartNo |
Имя поля в таблице ITEMS.DB, значение которого отыскивается в таблице PARTS.DB |
LookupSource |
DataSource3 |
Имя компонента, через который осуществляется обмен и управление данными из таблицы PARTS.DB, связанной с таблицей ITEMS.DB |
LookupDisplay |
Description |
Имя поля в таблице PARTS.DB, значение которого отображается в компоненте DBLookupCombo1 |
LookupField |
PartNo |
Имя поля в таблице PARTS.DB, значение которого отыскивается по значению поля, указанного в свойстве DataField |
Таблица 5
Свойство |
Значение |
Комментарий |
DBComboBox1: TDBComboBox | ||
DataField |
ItemNo |
Имя поля, значение которого отображается и устанавливается |
DataSource |
DataSource1 |
Имя компонента, обеспечивающего доступ к таблице ITEMS.DB |
Items |
1 2 3 4 5 |
Список возможных значений, присваиваемых полю текущей записи; значения задаются в текстовом редакторе, который вызывается из инспектора объектов нажатием кнопки, расположенной в строке свойства Items |