528______________________________________________Глава 9

Обработчик события OnCloseQuery формы имеет вид:

if (Tablel->CachedUpdates && modif)

switch (Appiication->MessageBox("Сохранить изменения в базе данных?",
"Подтвердите изменения",
MB_YESNOCANCEL + MB_ICONQUEST.ION) )

{

case IDYES:    Tablel->ApplyUpdates(); break;

case IDCANCEL: CanClose = false; break;

case IDNO:     Tablel->CancelUpdates();

1

При наличии не сохраненных изменений пользователю задается вопрос «Со-
хранить изменения в базе данных?». При положительном ответе изменения сохра-
няются методом ApplyUpdates. При отрицательном — изменения отменяются ме-
тодом CancelUpdates. Если при получении запроса пользователь нажал кнопку
Cancel, то приложение не закрывается (CanClose задается равным false).

Сделайте такое приложение и поработайте с ним, чтобы почувствовать разли-
чие в работе при наличии и отсутствии кэширования.

9.11.4 Доступ к полям

Поля отображаются объектами класса TField и производных от него классов
TStringField, TSmallintField, TBooleanField и т.п. Эти объекты могут создаваться
тремя способами:

• Автоматически генерироваться для каждого компонента набора данных (Tab-
le и др.)

• Создаваться в процессе проектирования с помощью Редактора Полей

• Создаваться программно в процессе выполнения приложения

Автоматическая генерация объектов класса TField происходит в момент от
крытия базы данных, если эти объекты не создаются другими способами: в процес-
се проектирования с помощью Редактора Полей или программно во время выпол-
нения. Объекты генерируются для всех полей таблицы (это может быть избыточно
для конкретного приложения).

Создание объектов полей в процессе проектирования с помощью Редактора
Полей было рассмотрено ранее. Этот вариант исключает автоматическое создание'
объектов. Таким образом, все поля, объекты которых не созданы с помощью Ре
дактора Полей, недоступны для приложения. Использование Редактора Полей,
как мы видели, очень удобно, так как позволяет задать в процессе проектирования
множество полезных свойств для каждого поля.

Программное создание объектов класса TField используется сравнительно
редко и мы его рассматривать не будем.

Доступ к объектам полей возможен тремя способами:

• По порядковому индексу объекта

• По имени поля

• По имени объекта

Доступ по порядковому индексу осуществляется через свойство TField* Fi-
elds[int i], где i — индекс объекта. Индексация, как всегда в C++Builder, начина-
ется с 0. Например, Tablel->Fields[0] — это первый объект поля таблицы Tablel.

Доступ по имени поля осуществляется с помощью метода FieldByNa-
ше("имя"). Например, Tablel->FieldByName("Fam") — это объект, связанный г
полем Fam.

Доступ по имени объекта возможен только к объектам, созданным с помощью
Редактора Полей. По умолчанию C++Builder формирует имена объектов полей
(Name) из имени таблицы и имени поля. Например, TablelDep. Вы можете видеть