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

2.5.10. Анализ ошибки 1995

Таблицы всех форм открываются в режиме разделяемого доступа. Однако таблица не откроется, если ранее она была открыта в другой рабочей области в режиме монопольного доступа. При этом возникнет ошибка с номером 1995. Эту ошибку можно обработать, например, встроив в обработчик события Error объекта DataEnvironment формы следующий код (взята форма "Виды произведений"):

lparameters nError, cMethod, nLine

&&

&& Обработчик события Error объекта DataEnvironment формы WtForm

&&

if nError = 1995 then

MessageBox("Не могу открыть таблицу WorkType!", 48)

cancel && Форма отрыта не будет

else

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

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

endif

Присутствие команды CANCEL предотвратит, если обнаружена ошибка с номером 1995, открытие формы.

Другой вариант избежать открытия формы состоит в том, чтобы вставить в обработчик события BeforeOpenTables объекта DataEnvironment вызов метода, добавляющего в этот объект на этапе исполнения новое свойство:

This.AddProperty('NoError', .T.)

В обработчике события Error команду CANCEL изъять, а в конец процедуры добавить оператор

This.NoError = .F.

И, наконец, в обработчике события Load формы добавить команду

return This.DataEnvironment.NoError

Тогда при возникновении ошибки загрузки окружения данных свойство NoError окружения получит значение .F., которое вернет обработчик события Load формы. Поэтому объект формы создан не будет (форма не откроется).

2.5.11. Отображение пометки удаления

Во всех формах, имеющих сетку, пометка удаления проставляется обработчиком события Click кнопки "Удалить / Возвратить". Названием кнопки (ее имя во всех формах – Command3) управляет следующий код обработчика события AfterRowColChange сетки формы:

&& Фрагмент обработчика события AfterRowColChange сетки

&&

lparameters nColIndex

with ThisForm

if Deleted( ) then

.Command3.Caption = "Возвратить"

else

.Command3.Caption = "Удалить"

endif

endWith

Если при удалении отказывает триггер удаления, то обработчик события Error кнопки Command3, генерирует соответствующее сообщение.

Однако если сетка имеет столбец для пометки удаления, то в нем можно, например, мышью проставить или убрать пометку удаления записи. При этом, во первых, не изменится название кнопки и, во-вторых, сообщение об отказе триггера удаления (Trigger failed in Authors) появится только при смене строки.

Таким образом, имеются две проблемы, для устранения которых можно применить следующую схему:

  1. Устранить из сетки столбец для пометки удаления.

  2. Ввести в сетку столбец, повторяющий пометку удаления; расположение и размеры столбца те же, что и столбца для пометки удаления.

  3. Сделать добавленный столбец доступным только для чтения.

  4. В качестве источника данных столбца задать выражение Iif(Deleted( ), '*', ''), выводя в столбце звездочку, если запись имеет пометку удаления, или пустую строку – в противном случае.

Приведенная схема для примера реализована в форме "Виды произведений". Некоторые свойства добавленного столбца сетки (его имя Column2) устанавливаются в обработчике события Init формы:

with This

&&

&& Столбец для дублирования пометки удаления

.Grid1.Column2.ReadOnly = .T.

.Grid1.Column2.ControlSource = "Iif(Deleted( ), '*', '')"

.Grid1.Column2.Width = 10

endWith

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