Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
10.6 Mб
Скачать

Действия кнопок формы

Действие / кнопка

Обработчик события Click кнопки

Открывает форму AuthorEdit для добавления записи / Новый

&& appPath – путь к проекту и базе данных; && определен в главном файле Start.prg formName = appPath + 'Forms\AuthorEdit' && Открываем форму AuthorEdit do form (formName) with 'new' ThisForm.Grid1.SetFocus

Открывает форму AuthorEdit для редактирования записи / Изменить

formName = appPath + 'Forms\AuthorEdit' do form (formName) with 'edit' ThisForm.Grid1.SetFocus

Проставляет или снимает пометку удаления / Удалить | Возвратить

flag = MessageBox(This.Caption + "?", 4 + 32 + 256) if flag = 6 then && Нажата кнопка "Да" if Deleted( ) then recall else delete endif endif ThisForm.Grid1.SetFocus

Поиск автора / Найти

au = InputBox("Введите ФИО или часть ФИО", ; "Поиск автора", ThisForm.AuToFind) if not Empty(au) recOld = Recno( ) set exact off if not Seek(au, 'Authors', 'Author') then MessageBox('Автор по строке ' + au + ' не найден', 48) go recOld endif endif && Запоминаем подстроку поиска автора ThisForm.AuToFind = au ThisForm.Grid1.SetFocus

Вывод списка авторов / Список

MessageBox("Вопросы, связанные с формированием отчетов, рассмотрены в гл. 12")

Закрывает форму "Авторы" / Закрыть

ThisForm.Release

Выбирает запись в таблице Author; закрывает форму "Авторы" / Выбрать

select BooksAuthors set order to BookId ThisForm.AuthorSelected = .T. && Проверяем, есть ли автор в списке авторов книги, && выбранной в форме "Книги" scan for BooksAuthors.BookId = Books.BookId if BooksAuthors.AuthorId = Authors.AuthorId then ThisForm.AuthorSelected = .F. exit endif endScan if ThisForm.AuthorSelected then && Закрываем форму ThisForm.Release else MessageBox("Автор уже добавлен в список авторов книги!") endif

Кроме того, в обработчик события Error кнопки "Удалить" добавлены следующие строки кода:

&& Обработчик события Error кнопки "Удалить"

&&

lparameters nError, cMethod, nLine

if nError = 1539 then

MessageBox("Удалить нельзя. Книги автора есть в библиотеке!", 48)

else

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

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

endif

Ошибка с номером 1539 возникает при отказе триггера __RI_DELETE_authors( ), то есть когда выполняется попытка удалить запись из таблицы Authors, имеющую связанные с ней записи в таблице BooksAuthors. Если в обработчик события Error кнопки "Удалить" код не добавлять, то при отказе триггера системный обработчик ошибок выдаст сообщение Trigger failed in Authors.

Аналогичные обработчики размещены и в формах, управляющих таблицами Books и WorkType.

Кроме приведенного сообщения, пользователь может проанализировать ошибку, распечатав содержимое глобального массива gaErrors, создаваемого при выполнении триггера хранимой процедурой riError( ), например:

display memory like gaErrors to file d:\a.txt

Состав файла d:\a.txt при отказе триггера удаления:

gaErrors Pub A

(1, 1) N –1 (–1,00000000)

(1, 2) C "Delete restrict rule violated."

(1, 3) C ""

(1, 4) C ", AuForm.Command3.Click, __RI_DELETE_authors, riError"

(1, 5) C "d:\HomeLibrary\Authors.dbf"

(1, 6) N 1 (1,00000000)

(1, 7) N 30 (30,00000000)

(1, 8) C "AuthorId"

(1, 9) C "d:\HomeLibrary\BooksAuthors.dbf"

(1, 10) N 1 (1,00000000)

(1, 11) N 30 (30,00000000)

(1, 12) C "AuthorId"

Замечание. Удалить пользовательскую процедуру события (метода) или назначенное пользователем значение свойства можно в окне свойств объекта. Для этого после позиционирования на строке с именем процедуры (свойства) нажимается правая кнопка мыши и выбирается Reset to Default (рис. 2.18); удаление кода (значения) выполняется без дополнительного предупреждения.

Рис. 2.18. Удаляется пользовательская процедура события Error

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]