Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Обновление данных в формах и элементах управления



Последняя группа макрокоманд в рассматриваемой категории связана с обновлением данных в активных формах, таблицах и запросах. Если несколько человек в сети одновременно изменяют данные, то формы и таблицы у конкретного пользователя могут не отражать актуальных данных. Для того чтобы отображаемые данные соответствовали текущему состоянию базы данных, их необходимо обновить с помощью команды Записи | Обновить (Record | Refresh).

Похожая ситуация возникает даже в однопользовательском режиме, если в форме используется поле со списком, источником данных для которого является таблица или запрос. Если в исходную таблицу были добавлены записи, то в поле со списком они автоматически не появятся — нужно повторно выполнить запрос. Кроме полей со списком, к элементам упраапения, требующим обновления отображаемых данных, относятся также списки и элементы управления подчиненной формы, объекты OLE и вычисляемые элементы управления, содержащие статистические функции по подмножеству записей, такие как DlookUp() или Dsum().

Для того чтобы выполнить обновление записей в формах, таблицах или элементах управления, используются макрокоманды Обновление (Requery), ПоказатьВсеЗаписи (ShowAllRecords) и ОбновитьОбъект (RepaintObject).

Макрокоманда Обновление (Requery) обновляет данные в объекте базы данных путем повторного просмотра источника данных. Макрокоманда имеет один аргумент, содержащий имя объекта, который следует обновить. Если обновляется активный объект, например форма, то поле аргумента следует оставить пустым. При этом макрокоманда будет повторно выполнять запрос, указанный в свойстве Источник данных (RecordSource) этой формы.

Рассмотрим пример использования макроса для обновления данных. В форме Клиенты (Customers) есть поле со списком Страна (Country). Источником данных для этого поля является запрос, который выбирает значения из поля Страна (Country) таблицы Клиенты (Customers):

SELECT DISTINCT Клиенты . Страна FROM Клиенты ;

Если при вводе клиента в таблицу добавляется новое название страны, то в списке эта страна не появится, поскольку запрос будет выполнен повторно только при следующем открытии формы. Чтобы провести обновление списка стран раньше, следует назначить событию формы После обновления (After Update) макрос Клиенты.Обновление списка стран, который состоит из одной макрокоманды Обновление (Requery) co значением аргумента страна (Country) (рис. 19).

Рис. 19. Назначение макроса событию формы После обновления

Замечание

Макрокоманда обновление ( Requery ) обновляет только один объект , поэтому если в форме существуют элементы управления , требующие обновления отображаемых данных , и в макросе , назначенном этой форме , используется макрокоманда Обнов­ ление ( Requery ) с пустым значением аргумента , то обновляться будут только запи­си в форме . Для каждого такого элемента управления нужно использовать отдель­ ную макрокоманду . Если эта макрокоманда в качестве аргумента содержит имя эле­ мента управления , то при ее выполнении обновляется только данный элемент . Записи в самой форме не обновляются .

С помощью макрокоманды Обновление (Requery) можно обновлять данные и в неактивной форме, точнее, не в той форме, которой назначен макрос. Однако в этом случае сначала необходимо выполнить макрокоманду ВыделитьОбъект (SelectObject), которая перенесет фокус на нужную форму, чтобы ее активизировать (потом фокус можно вернуть обратно).

Макрокоманда ПоказатьВсеЗаписи (ShowAllRecords), как уже отмечалось, отменяет действие фильтра и повторно просматривает источник записей. Ее часто используют для обновления данных в подчиненной форме.

Макрокоманда ОбновитьОбъект (RepaintObject) применяется только к объекту базы данных (к таблице, запросу, форме, отчету, странице, макросу и модулю) и не применяется к элементу управления. Она выполняет немедленное обновление указанного открытого объекта (если имя объекта не задано, обновляется активный объект), хотя при этом не производится повторное выполнение запроса к источнику данных. Обновление объекта не влияет на отображение новых и удаленных записей, как это происходит при выполнении макрокоманды Обновление (Requery). Обычно макрокоманду ОбновитьОбъект (RepaintObject) применяют для отображения результатов изменения данных с помощью макрокоманд ЗадатьЗначение (SetValue), а также для повторного вычисления значений выражений в вычисляемых элементах управления.

Работа с объектами

Это наиболее обширная категория макрокоманд.

Рассмотрим сначала, как используется макрокоманда ЗадатьЗначение (SetValue), которая позволяет устанавливать значения свойств элементов управления в формах и отчетах. Мы уже использовали эту макрокоманду в предыдущих примерах.

Установка свойств элементов управления позволяет динамически, в зависимости от условий, делать эти элементы недоступными или невидимыми. Приведем несколько примеров.

  • Можно создать одну форму, в которой в зависимости от определенных условий видимыми будут разные поля. Это позволяет использовать одну форму в не­скольких случаях и не создавать для каждой ситуации дополнительную форму. Когда форм в приложении очень много, такая возможность становится очень полезной. Чтобы сделать элемент управления невидимым, следует задать значе­ние Ложь (False) для свойства Вывод на экран (Visible) этого элемента. Чтобы по­казать элемент управления на экране, задайте для этого свойства значение Исти на (True).
  • В зависимости от текущего состояния работы с данными можно изменять доступность кнопок, предназначенных для выполнения определенных действий, или других элементов управления в форме. Чтобы сделать элемент управления недоступным, задайте значение Ложь (False) его свойству Доступ (Enabled). Чтобы элемент управления стал доступным, задайте значение Истина (True) для этого свойства.
  • Можно запретить пользователю изменять данные в форме. Для этого свойству Доступ (Enabled) соответствующих полей следует присвоить значение Ложь (False), а свойству Блокировка записей (Locked) — значение Истина (True). Если необходимо запретить изменение во всех полях, установите значение Ложь (False) для следующих свойств формы: Разрешить изменения (Allow Edits), Разре шить добавление (Allow Additions), Разрешить удаление (Allow Delitions). Эти свойства можно изменять динамически, т. е. в процессе работы пользователя с формой. Например, можно разрешить или запретить редактирование данных по­сле проверки прав пользователя.
  • С помощью макрокоманды ЗадатьЗначение (SetValue) можно динамически изменять значение свойства Источник записей (RecordSource) для формы, что позволяет управлять содержанием отображаемых данных.

Существуют макрокоманды для открытия и закрытия объектов Access: ОткрытьФорму (OpenForm), ОткрытьЗапрос (OpenQuery), ОткрытьОтчет (OpenReport) и т. д. Для открытия объекта каждого типа применяется отдельная макрокоманда, а для закрытия объекта используется общая для объектов всех типов макрокоманда закрыть (Close). Тип объекта, к которому следует применить эту макрокоманду, указывается в качестве одного из ее аргументов. В предыдущих примерах уже использовались макрокоманды ОткрктьФорму (OpenForm) и Закрыть (Close) для активного объекта.

Макрокоманда ОткрытьЗапрос (OpenQuery) позволяет выполнить любой тип запро­са, в том числе запрос на изменение данных. Если в качестве аргумента этой макро­команды задается имя запроса на выборку или перекрестного запроса, то результа­том выполнения макрокоманды будет вывод на экран выбранных записей. Если же аргумент — имя запроса на изменение данных, то макрокоманда выполнит запрос, изменяя соответствующим образом данные в таблицах.

При выполнении запроса, изменяющего данные, на экране будут отображаться предупреждающие сообщения. Чтобы отключить вывод этих сообщений, используйте макрокоманду УстановитьСообщения (SetWarnings) со значением аргумента Нет (No). Только не забудьте после выполнения запроса снова включить вывод систем­ных сообщений, применив ту же макрокоманду, но с аргументом Да (Yes). Иначе в Access не будут отображаться никакие системные сообщения, что может привести к выполнению нежелательных действий в приложении.

Макрокоманда ОткрытьПредставление (OpenView) аналогична макрокоманде ОткрытьЗапрос (OpenQuery), только применяется она в проектах Access и предназна­чена для работы с данными, хранящимися на сервере.

Макрокоманда ОткрытьСохраненнуюПроцелуру (OpenStoreProcedure) позволяет выполнить или открыть в режиме редактирования хранимую процедуру сервера.

В данном разделе описаны далеко не все макрокоманды. Для получения полной информации используйте справочную систему. Информацию о макросах и макрокомандах вы найдете в разделе Программная поддержка (Programmability) оглавления Справки Access (Access Help).

Преобразование макросов в процедуры VBA

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

Давайте попробуем преобразовать в процедуры обработки событий макросы, назна­ченные событиям формы наклейки для клиентов (Customers Labels Dialog):

1. Откройте форму Наклейки для клиентов (Customers Labels Dialog) в режиме Конструктора.

2. Выберите команду Сервис | Макрос | Преобразовать макросы формы (Tools | Macro | Convert form's Macros to Visual Basic).

3. В диалоговом окне Преобразование макросов формы (Convert form macros) (рис. 20) нажмите кнопку Преобразовать (Convert), оставив флажки установленными по умолчанию.

Рис. 20. Преобразование макроса в процедуру VBA

4. Когда преобразование закончится, в форме Наклейки для клиентов (Customers Labels Dialog) щелкните правой кнопкой мыши, например по кнопке Отменить, и выберите команду Свойства (Properties).

5. В диалоговом окне Свойства (Properties) раскройте вкладку События (Events).

6. В поле для события Нажатие кнопки (On Click) оказалось установленным значение [Процедура обработки событий] ([Event Procedure]). Щелкните по кнопке Построителя, находящейся справа от поля, — откроется окно редактора VBA с текстом процедуры (рис. 21).

Рис. 21. Процедура, полученная из макроса

В этой процедуре, полученной из макроса, используется объект DoCmd для выполнения макрокоманды закрытия формы. В соответствии с флажками, установленными в окне Преобразование макроса (Convert Macro), комментарии в макросе были преобразованы в комментарии в процедуре, и был добавлен код обработки ошибки, который выдает на экран сообщение об ошибке в случае ее возникновения.

Аналогично выполняется преобразование макросов, назначенных событиям отчета.

Теперь рассмотрим преобразование в процедуру VBA макроса, не связанного с событием формы или отчета, например созданного ранее макроса Менеджеры по продажам.

1. Щелкните по ярлыку Макросы (Macros) в окне базы данных Борей. Появится список макросов. Выделите макрос менеджеры по продажам.

2. Выберите команду Сервис | Макрос | Преобразовать макросы (Tools | Macro | Convert Macros to Visual Basic).

3. Откроется такое же диалоговое окно, как в предыдущем примере (см. рис. 20), в котором необходимо нажать кнопку Преобразовать (Convert). По окончании процесса преобразования появится сообщение об успешном завершении процесса преобразования и откроется окно редактора VBA, в котором можно посмотреть полученный код на VBA (рис. 22).

Макрос преобразуется в функцию с аналогичным именем Менеджеры_по_продажам (пробелы заменились символами подчеркивания)

Рис. 12.22. Результат преобразования макроса Менеджеры по продажам

После преобразования исходный макрос Менеджеры по продажам не был удален, а в списке модулей в окне базы данных Борей появился новый модуль с именем Преобразованный макрос — Менеджеры по продажам (Converted Macro — Менеджеры по продажам).

Существует еще один способ преобразования макросов в модуль VBA:

1. Выделите макрос Менеджеры по продажам в окне базы данных Борей.

2. Выберите команду Файл | Сохранить как (File | Save As).

3. В появившемся диалоговом окне Сохранение (Save As) в раскрывающемся списке Как (As) выберите элемент Модуль (Module) (рис. 23) и нажмите кнопку ОК

Рис. 12.23. Сохранение макроса в виде модуля


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 221; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.031 с.)
Главная | Случайная страница | Обратная связь