540______________________________________________Глава 9

Первые операторы этого кода, данные с некоторым сокращением, формируют
запрос пользователю типа «Действительно хотите изменить отдел, характеристику7»,
в котором указано то, что пользователь изменил. При положительном ответе поль-
зователя на этот запрос осуществляется пересылка данных из окон редактирова-
ния в поля и выполняется метод Post. В заключение сбрасывается свойство Modifi-
ed компонента отображения характеристики и переменная ChangePhoto, фикси-
рующая изменения фотографии.

Перед вызовом метода Post и после этого вызова в коде вы можете видеть опе-
раторы, изменяющие переменную CanPost. Что это за переменная и зачем она вве-
дена в приложение? Дело в том, что надо предотвратить несанкционированную за-
пись модифицированной характеристики через связанное с данными окно DBMe-
mol на форме Form2 или несанкционированную запись измененной фотографии
через связанное с данными окно типа TDBImage на форме Form2 при случайном
или намеренном перемещении пользователя по набору данных. Данные должны
изменяться только после щелчка пользователя на кнопке Записать и положитель-
ного ответа на запрос программы. Поэтому в обработчик события BeforePost ком-
понента Table2 введен оператор

if (! CanPost)
(

DataSet->Cancel() ;

Abort() ;

}

Он прерывает запись данных, если переменная CanPost = false. Т.е. при пере-
мещениях по таблице запись производиться не будет. А при щелчке на кнопке За-
писать перед вызовом Post переменная CanPost делается равной true и в этом слу-
чае запись данных производится.

Реализация кнопок Вставить и Удалить, которые позволяют соответственно
вставить новую запись или удалить текущую запись, проблем не вызывает. В обра-
ботчике события OnClick кнопки Вставить выполняется метод Table2->Insert(), по-
сле чего в окна редактирования передаются значения полей по умолчанию. После
их заполнения пользователь должен щелкнуть на копке Записать и внесенные дан-
ные будут занесены в таблицу Pers.

Но для того, чтобы можно было вставить новую запись, необходимо выпол-
нить одно условие: в набор данных ТаЫе2 не должно передаваться поле Num. Это
поле в базе данных задано как автоматически нарастающее и обязательно присут-
ствующее в каждой записи. Если вы не включили это поле в набор данных Table2,
то база данных сама даст ему уникальное значение. Если же вы включили это поле
в набор данных Table2, то при попытке выполнить метод Post вы получите сооб-
щение о том, что значение этого поля не задано. А задать вы его не сможете, так
как оно автоматически изменяемое. Поэтому вам не удастся включить вставлен-
ную новую запись в базу данных.

В обработчик события OnClick кнопки Удалить вставляется оператор

if (Application->MessageBox("Действительно хотите удалить запись?",
"Подтвердите удаление записи",
MB_YESNO + MB_ICONEXCLAMATION) == IDYES)
Table2->Delete() ;

который после положительного ответа пользователя на вопрос программы удаляет
текущую запись.

Мы рассмотрели один из возможных примеров работы с базой данных. По-
дробнее вы можете посмотреть этот пример на диске, прилагаемом к книге. Поль-
зуясь сведениями о программировании работы с базами данных, изложенными ра-
нее, вы, наверное, сможете сами спроектировать и более сложное, и более полезное
для вас приложение.