Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка БД .doc
Скачиваний:
3
Добавлен:
24.11.2019
Размер:
649.73 Кб
Скачать

Установка значений

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

Рассмотрим данную тему на примере. Создадим форму Запрос, которая позволит автоматизировать поиск телефонных номеров в ка­талоге. Критерий поиска номера должен вводиться в поле этой фор­мы. Содержимое поля с критерием поиска будет применяться в ка­честве фильтра для формы Каталог телефонов. Номер телефона, полу­ченный в результате фильтрации, должен быть скопирован из этой формы в буфер обмена и вставлен в поле индикации формы Запрос.

Форма Запрос должна содержать текстовые поля Фамилия и Телефон, а также кнопки Поиск и Отмена. Создать ее нетрудно. При этом следу­ет воспользоваться конструктором форм, выбрав в качестве базовой таблицу Адреса. В окне конструктора формы следует разместить в области данных поля и кнопки так, как показано на рисунке.

-------------- ---------------------

| Фамилия | | |

-------------- ---------------------

-------------- ---------------------

| Телефон | | |

-------------- ---------------------

----------- -----------

| Поиск | | Отмена |

----------- -----------

В строке Данные свойств поля Фамилия должно быть установлено значение Фамилия.

Для автоматизации работы с такой формой понадобятся три мак­роса:

- Открыть запрос - открывает форму Запрос в режиме заполне­ния;

- Поиск запроса - макрос для кнопки Поиск;

- Прервать запрос - макрос для кнопки Отмена.

Макрос Открыть запрос состоит только из одной макрокоманды - ОткрытьФорму. При этом аргумент Режим окна должен иметь значение Окно диалога, чтобы размер окна был неизменен. Макрос Прервать запрос состоит из макрокоманды Закрыть, у которой аргумент Тип объекта имеет значение Форма, a apгумент Имя объекта - значение Запрос. Макрос Поиск запроса несколько сложнее. Для его разработ­ки необходимо выполнить следующие действия:

- Создать новый макрос, в котором первой должна быть макро­команда ОткрытьФорму со значением Каталог телефонов для аргумента Имя формы . Таким образом будет открыта форма Каталог телефонов.

Для аргумента Режим окна необходимо установить значение Зна­чок. В качестве значения для аргумента Условие отбора необходимо использовать следующее выражение:

[Фамилия]=Forms![Запрос]![Фамилия]

Это выражение будет применяться в качестве фильтра для формы Каталог телефонов, отображаемой в виде пиктограммы.

- Во вторую строку макроса ввести макрокоманду КЭлементуУп­равления со значением Телефон для аргумента Имя элемента. В ре­зультате содержимое поля Телефон найденной записи будет маркиро­вано.

- В третью строку вставить макрокоманду ВыполнитьКоманду с аргументом Copy. В результате номер телефона будет скопирован в буфер обмена.

- В следующую строку ввести макрокоманду Закрыть, после вы­полнения которой форма Каталог телефонов будет закрыта. Для аргу­мента Тип объекта этой макрокоманды установить значение Форма, а для аргумента Имя объекта - Каталог телефонов. Таким образом бу­дет указан тип закрываемого объекта и его имя.

- В следующую строку ввести макрокоманду ВыделитьОбъект. Ус­тановить для ее аргумента Тип объекта значение Форма, а для аргу­мента Имя объекта - значение Запрос. Данная макрокоманда активи­зирует форму Запрос.

- Следующая макрокоманда КЭлементуУправления с аргументом Телефон предназначена для выделения поля Телефон формы Запрос.

- Последняя макрокоманда, ВыполнитьКоманду, с аргументом Paste помещает содержимое буфера обмена в поле Телефон формы Запрос.

- Сохранить макрос под именем Поиск запроса.

Входящее в макрокоманду ОткрытьФорму условие автоматически оформляется как фильтр. Условием отбора записей этим фильтром яв­ляется идентичность содержимого поля Фамилия формы Запрос и поля Фамилия формы Каталог телефонов (последняя открывается с помощью макрокоманды ОткрытьФорму, поэтому можно обойтись краткой формой записи, а не указывать полное имя этой формы). В результате филь­трации форма Каталог телефонов будет содержать только ту запись, которая соответствует критерию фильтрации. После этого поле Теле­фон отфильтрованной записи активизируется, а его содержимое копи­руется в буфер обмена. Все это происходит, когда форма Каталог телефонов отображается на экране в виде пиктограммы.

Внимание!

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

После закрытия формы Каталог телефонов активизируется поле Телефон формы Запрос, в которое вставляется номер телефона из бу­фера обмена.

Чтобы обеспечить нормальное функционирование формы Запрос, необходимо связать макросы Поиск запроса и Прервать запрос с со­ответствующими кнопками в форме. Для этого следует перейти в ре­жим конструктора формы, маркировать кнопку Поиск и открыть окно ее свойств. В качестве значения параметра Нажатие кнопки надлежит задать имя макрокоманды Поиск запроса. Те же действия нужно вы­полнить и для кнопки Отмена, связав с ней макрокоманду Прервать запрос.

Если нужная фамилия не найдена в форме Каталог телефонов, макрос Поиск запроса выдает сообщение об ошибке при выполнении команды ВыполнитьКоманду с аргументом Copy и завершается из-за того, что в результате фильтрации не найдена ни одна запись, удовлетворяющая заданным условиям. Команда КЭлементуУправления в таком случае активизирует поле Телефон, но не маркирует его со­держимое, что приводит к невыполнению команды Copy и к появлению сообщения об ошибке.

Чтобы сообщение об ошибке не появлялось при отсутствии в по­ле Телефон отобранной записи, в макрос следует включить условие обработки макрокомандой исключительной ситуации. Форму Каталог те­лефонов необходимо закрыть, а в поле Телефон формы Запрос - по­местить текст Не указан (это реакция на исключительную ситуацию). После этого сообщения можно прервать выполнение макроса.

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

- Открыть макрос Поиск запроса в режиме конструктора и после второй строки вставить четыре пустые строки с помощью кнопки До­бавить строки панели инструментов.

- Открыть столбец условий Условия.

- В поле Условия третьей строки ввести следующее выражение:

Forms![Каталог телефонов]![Телефон]=""

Это условие, позволяющее проверить, пусто ли поле Телефон.

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

- В следующей строке поля условий ввести многоточие, а поля Макрокоманда - ВыделитьОбъект. Для аргумента Тип объекта этой макрокоманды установить значение Форма, а для аргумента Имя объ­екта - значение Запрос.

- Следующую строку начать с многоточия и ввести в нее макро­команду ЗадатьЗначение. Для аргумента Элемент задать значение Те­лефон (в это поле макрокоманда будет устанавливать значение), а для аргумента Выражение - значение "Не указан" (кавычки обяза­тельны!).

- В последнюю пустую строку ввеcти макрокоманду Остановить- Макрос. В поле Условие этой макрокоманды вставить многоточие.

- Сохранить макрос.

Условие в первой из вставленных строк проверяет, не является ли поле Телефон в форме Каталог телефонов пустым. Если это поле ничего не содержит (т.е. содержит строку нулевой длины ""), усло­вие соблюдается, и выполняется макрокоманда Закрыть.

Многоточия в столбце условий следующих трех строк нужны для того, чтобы макрокоманды в этих строках выполнялись при соблюде­нии того же условия. Посредством команды ЗадатьЗначение в поле Телефон формы Запрос передается текст Не указан, после чего мак­рос прерывается с помощью макрокоманды ОстановитьМакрос.

Внимание!

При отсутствии макрокоманды ОстановитьМакрос выполнение мак­роса продолжается со следующей макрокоманды, а пользователь получает повторное сообщение об ошибке при попытке скопировать отсутствующее содержимое поля в буфер обмена.