Иллюстрированный самоучитель по Microsoft Access 2002

Последовательности событий Access

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

Последовательность событий фокуса для элементов управления в формах

При установке фокуса на элемент управления щелчком мыши, при нажатии клавиши Таb или при открытии формы происходят события: Вход (Enter) › Получение фокуса (GotFocus).

Когда элемент теряет фокус, например при закрытии формы или переносе фокуса на другой элемент управления той же формы, происходят события: Выход (Exit) › Потеря фокуса (LostFocus).

При переносе фокуса в другую форму элемент первой формы теряет фокус, но не возникает события Выход (Exit). Соответственно, когда фокус переносится обратно, т. е. к элементу, который уже имел фокус, когда форма последний раз была активной, то не происходит события Вход (Enter), а только событие Получение фокуса (GotFocus).

Замечание
В дальнейшем при описании последовательностей событий мы не будем приводить английские эквиваленты названий событий, дабы не загромождать представление. Кроме того, вводятся сокращения для обозначения объектов, к которым относится событие, например: э – элемент, ф – форма
.

При переносе фокуса из элемента управления в главной форме на элемент управления в подчиненной форме события происходят в следующем порядке: Выход (г.ф., т.ф.) › Потеря фокуса (г.ф., т.ф.) › Вход (г.ф., э.п.) › Выход (п.ф., т.ф.) › Потеря фокуса (п.ф., т.ф.) › Вход "(п.ф., п.ф.) › Получение фокуса (п.ф., п.ф.) Это самая сложная цепочка событий, в которой задействованы сразу четыре элемента управления: г.ф., т.ф. – элемент главной формы, теряющий фокус; г.ф., э.п. – элемент главной формы, содержащий подформу; п.ф., т.ф. – элемент подформы, теряющий фокус (если мы переносим фокус на тот элемент подформы, который до этого фокуса не имел); п.ф., п.ф. – элемент подформы, принимающий фокус. Если перенос фокуса выполняется на элемент подчиненной формы, который имел фокус, когда она последний раз была активной, то в цепочке отсутствуют события: Выход (п.ф., т.ф.) › Потеря фокуса (п.ф., т.ф.) › Вход (п.ф., п.ф.).

Последовательность событий изменения данных в элементе управления

Когда вводят или изменяют данные в элементе управления, а затем переходят к следующему элементу управления, возникает следующая цепочка событий: {Клавиша вниз › Нажатие клавиши › Внесены изменения › Изменение › Клавиша вверх} › До обновления › После обновления › Выход › Потеря фокуса.

Фигурные скобки в приведенном выражении означают, что выделенная цепочка событий возникает при каждом нажатии клавиши на клавиатуре.

Если ввод выполняется в поле со списком, то в конец последней цепочки, после события Клавиша вверх, могут добавиться события Отсутствие в списке (NotlnList) и Ошибка (Error), и цепочка будет выглядеть следующим образом: Клавиша вниз › Нажатие клавиши › Внесены изменения › Изменение › Клавиша вверх} › Отсутствие в списке › Ошибка › До обновления › После обновления › Выход › Потеря фокуса.

Последовательность событий в форме, связанных с записями

Если просто просматриваются записи в форме, то при переходе к каждой новой записи выполняются событие Текущая запись (Current) для формы и все события, связанные с установкой фокуса в элементах формы. Если данные в записи меняются, то сохранение изменений происходит только при переходе к следующей записи или при закрытии формы (если нашли нужную запись, изменили и закрыли форму). Поскольку все изменения в записи происходят в элементах управления формы, одновременно будут возникать соответствующие события в элементах формы. Рас-смотрим типичную ситуацию, когда в форме выводится запись, в ней перемещаются по элементам управления до нужного элемента, изменяют в нем данные и переходят к следующей записи. В этом случае последовательность возникновения событий будет выглядеть так: Текущая запись (ф) › {Вход (э) › Получение фокуса (э) › Выход (э) › Потеря фокуса (э)} › Вход (э) › Получение фокуса (э) › До обновления (э) › После обновления (э) › До обновления (ф) › После обновления (ф) › Выход (э) › Потеря фокуса (э) › RecordExit › Текущая запись (ф) › Вход (э) › Получение фокуса (э).

В этой цепочке для упрощения опущены все события клавиатуры, а фигурные скобки выделяют цепочки событий, которые возникают при переходе между элементами управления формы. При изменении данных события До обновления (BeforeUpdate) и После обновления (AfterUpdate) происходят сначала для элемента, а затем для формы. Затем последний элемент (в данном случае тот, в котором происходили изменения) теряет фокус, происходит событие RecordExit (Выход из записи), выводится следующая запись, и фокус устанавливается на первый элемент в этой записи. События До обновления (BeforeUpdate) и После обновления (AfterUpdate) всегда возникают непосредственно перед переходом к следующей записи. После этого запись (элемент управления, в котором перед этим находился фокус) теряет фокус.

Замечание
Если запись сохраняется с помощью команды меню Записи › Сохранить запись (Records › Save Record), то последних событий Выход (Exit) и Потеря фокуса (LostFocus) не происходит. Это полезно знать, т. к. иногда требуется обойти эти события
.

При удалении записи происходят события: Удаление › До подтверждения Del › После подтверждения Del › Текущая запись › Вход › Получение фокуса.

Если событие Удаление (Delete) отменяется, то остальные события не возникают. После удаления записи фокус переходит на следующую запись, поэтому происходят события Текущая запись (Current) формы и Вход (Enter) и Получение фокуса (GetFocus) первого элемента в этой записи.

Добавление новой записи осуществляется после того, как пользователь вводит первый символ новой (пустой) записи. При этом события происходят в следующем порядке: Текущая запись (ф) › Вход (э) › Получение фокуса (э) › До вставки (ф) › Изменение (э) › До обновления (ф) › После обновления (ф) › После вставки (ф)

В этой цепочке пропущены все события клавиатуры и До обновления (BeforeUpdate) и После обновления (AfterUpdate) для элементов формы, т. к. они описаны выше. Событие Изменение (Change) происходит, если первый символ новой записи вводится в текстовое поле.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.