Распечатать страницу

Форма BookEdit в Visual FoxPro

« Назад

Ввод и редактирование книги – записи таблицы Books выполняется в форме BookEdit (рис. 2.24).

17.1.-Ввод-новой-книги

Рис. 2.24. Ввод новой книги

Форма имеет 3 поля ввода – Book, Pdate и Price и 5 надписей. Все поля формы обязательны для заполнения, что контролируется добавленным в форму методом CheckFields.

Надпись с именем LabelBookId предназначена для отображения кода книги. При вводе новой книги заголовок надписи содержит текст "Определяется автоматически", а при редактировании записи – строку с номером кода книги:

This.LabelBookId.Caption = Transform(Books.BookId)

Значение свойства Caption надписи определяется в обработчике события Init формы.

Поле Price формы является числовым. Чтобы добиться при вводе новой записи отображения необходимого числа десятичных знаков, можно в обработчике события Init формы выполнить следующую инициализацию:

This.Price.Value = 0.00

В остальном обработчик этого события напоминает одноименный обработчик рассмотренной выше формы AuhtorEdit.

Некоторые особенности имеет обработчик события Error кнопки "Сохранить". Это связано с тем, что поле BookId таблицы Books имеет тип Integer (AutoInc) и поэтому формируется автоматически с гарантированной уникальностью. Поле не редактируется; шаг, с которым наращивается BookId, равен 1. Однако есть вероятность, что программно или интерактивно для таблицы Books будет установлено значение опции NEXTVALUE меньшее, чем максимальное значение BookId. Тогда при добавлении новой записи возникнет ошибка с номером 1884, означающая неуникальность индекса BookId. Ее истоки – неверное значение NEXTVALUE, что и отображается в выводимом в Error-обработчике сообщении.

&& Обработчик события Error кнопки "Сохранить"

&&

lparameters nError, cMethod, nLine

if nError = 1884 then

MessageBox("Неверное значение Next Value поля BookId." ;

+ Chr(13) + "Нарушается уникальность индекса BookId!", 48)

else

MessageBox("Ошибка № " + Transform(nError) + " в строке " ;

+ Transform(nLine) + " метода " + cMethod, 48)

endif

ThisForm.NoError = .F.

Предполагается, что книги разных авторов могут иметь одинаковое название; контроль достоверности введенных названий полностью возлагается на пользователя. Хотя, в принципе, можно встроить в форму поиск повторяющихся названий и предупреждать об этом при вводе и редактировании данных.

Кнопка  имеет то же действие, что и такая же кнопка формы AuthorEdit.