Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы к экзамену по БД и СУБД.docx
Скачиваний:
13
Добавлен:
22.04.2019
Размер:
441.15 Кб
Скачать
  1. Поясните термин «форма». Объясните использование элементов управления на форме, размещение полей из нескольких таблиц.

Форма. Объект, содержащий элементы управления и используемый для ввода и просмотра информации, находящейся в одной или нескольких связанных таблицах.

Форма в чистом виде, без элементов управления и данных, которыми она должна манипулировать, интереса не представляет. Поэтому любая форма создаётся именно с целью оперирования данными с помощью элементов управления, включаемых в форму. Данные в VFP хранятся, естественно, в таблицах и подключаются к форме с помощью специального объекта Data environment. Рассмотрим последовательность событий при запуске формы, но останавливая внимание пока только на событиях самой формы. Объект - Событие

Data environment - BeforeOpenTables

Form set - Load

Form - Load

Data environment cursor(s) - Init

Data environment - Init

Objects - Init

Form - Init

Form set - Init

Form set - Activate

Form - Activate

Object - When

Form - GotFocus

Object - GotFocus

Form - QueryUnload

Form - Destroy

Object - Destroy

Form - Unload

Form set - Unload

Data environment - AfterCloseTables

Data environment - Destroy

Data environment cursor(s) - Destroy

Load() – первое в последовательности событий объекта форма. В этом событии ни один элемент лежащий на форме еще не родился и там бессмысленно помещать код вроде this.text1.value=’я’. Это событие рекомендуется использовать для выполнения настроек среды окружения. Особенно это актуально при использовании приватных сессий данных (этот вопрос рассмотрим ниже). Также, тут имеет смысл осуществить открытие таблиц и баз данных, не включаемых в объект Data environment.

RETURN .F. в событии Load() отменяет дальнейшую загрузку формы. Если форма имеет private data session все открытые таблицы и полученные курсоры закрываются.

Init() – событие при создании формы. Следует учесть, что элементы управления, помещённые на форму, создаются раньше формы, то есть событие Init() элементов происходит раньше, и поэтому в событии Init() формы уже можно обращаться к элементам управления формы. Включив оператор LPARAMETERS в событие формы, можно осуществить возможность передачи в неё параметров. Стоит заметить, что видимость этих переменных-параметров дальше события Init() не распространяется. Поэтому в случае необходимости стоит присвоить значения параметров созданным вами свойствам формы. Приведем пример достаточно типовой ошибки, переменные переданные в Init() используются в выражении для фильтра на какую либо таблицу , участвующую в работе формы. Естественно, после срабатывания события переменных уже нет, и фильтр становиться не работоспособным, так как его значение вычисляется в момент перемещения по записям. Если необходимо, создание и соответственно запуск формы можно прекратить, выполнив команду RETURN .F. Это удобно, например, для организации допуска к формам разным пользователям или проверки верности условий запуска формы, без правильности которых, далее форма не сможет верно функционировать.

Activate() – активирование формы действиями пользователя, таким как щелчок мышью , или же когда вызывается метод SHOW() формы. Это событие при работе формы может срабатывать много раз, и иногда код, помещенный в него, может доставить разные проблемы. Скажем, там будет написан какой либо sql select

Выполнили из формы печать отчета, вернулись в форму, событие снова отработало, и явно помешало работе элементов формы, скажем гриду, чьим источником может быть курсор sql select. Рекомендуем, если нет возможности помещения кода в это событие, проверять необходимость повторного запуска кода в нем, скажем, таким образом -

If not this.old

This.DoSomething

This.old=.t.

endif

Не менее коварным может быть и элементарный код , помещенный в антипода упомянутого события – DEACTIVATE - которое тоже может многократно сработать. Куда смещается фокус из формы- в тулбар, просмотр отчета или в иное место, в этом событии неизвестно. Вот в отчете неожиданно становится видна одна запись вместо нескольких, а все потому, что в указанном событии написали всего одну строку - SELECT MyTable. Особенно кишат такими проблемами страничные формы, с кодами в указанных событиях на страницах: хотели указать алиас при смене страницы, когда пользователь остается на форме, а он в отчет пошел, и выбил у него табуретку из под него этим кодом.

GotFocus() – получение фокуса

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

QueryUnload() – это событие происходит при выполнении команд CLEAR WINDOWS, RELEASE WINDOWS или QUIT, а также при нажатии на крестик окна формы. Стоит отметить, что это событие не происходит при выполнении метода RELEASE() формы. Для того чтобы предотвратить закрытие формы исходя из необходимых разработчику условий , достаточно выполнить команду NODEFAULT в этом событии.

Destroy() – происходит при уничтожении объекта

Unload() – это последнее из событие в последовательности перед уничтожением формы, происходит после освобождения всех объектов включённых в форму. Все элементы управления, включённые в форму, в этом событии формы уничтожены и недоступны.

При использовании Default data session в форме именно в этом событии стоит закрыть таблицы, открытые с использованием команды USE , а также полученные курсоры.

Если форма модальна, используя команду RETURN можно вернуть значение переменной из формы

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

Нажмите кнопку Field (Поле) на панели инструментов Report Controls (Элементы управления отчета).

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

В открывшемся диалоговом окне Report Expression (Выражение отчета) укажите для поля источник данных, формат, условие, при котором поле будет выводиться на печать.

Завершив установку параметров, нажмите кнопку ОК.