1. Начинается конструирование макроса со строки Если, которую можно добавить из списка макрокоманд или 2с по кнопке Если в окне каталога макрокоманд, как показано на рисунке 85.
Рисунок 85 – Добавление строки Если в макрос
2. Начинается анализ с неверного пароля. В условии
Not [Формы]![пароль]![пар]="123"
пароль 123 указан не как числовой, а как строка символов. Это сделано потому, что, если неверный пароль будет введен символами, то появится системное сообщение о несоответствии типов.
3. Макрокоманда ЗадатьЗначение удаляет символы неверного пароля из поля и сохраняет курсор в поле для повторного ввода пароля.
4. Макрокоманда ОстановитьМакрос завершает выполнение макроса. При повторном вводе пароля макрос выполняется сначала.
5. При вводе верного пароля открывается таблица Det, которую можно просматривать и редактировать, так как задан режим данных Изменение.
Часто при реализации пользовательского интерфейса приходится контролировать действия пользователя, например, осуществлять проверку выполнения пользователем некоторых предписанных ему действий. Если пользователь какое-то из этих действий не выполнил, то нужно напомнить ему об этом и подождать, когда он все же выполнит это действие. В следующем примере рассмотрена одна из таких ситуаций.
Пример 14. Пусть требуется показать детали, которые поставляет поставщик из заданного города. Эту задачу можно решить разными способами. Укажем один из них.
Создадим форму по имени Выбор деталей. В область данных этой формы нанесем поле со списком, в котором отобразим города поставщиков из таблицы Post. При выборе из списка города по кнопке Детали выведем сведения о деталях, поставляемых из этого города. Если пользователь забыл выбрать город из списка, то напомним ему об этом и сведения о деталях выведем только тогда, когда пользователь выберет город.
Для решения поставленной задачи нужно выполнить следующую последовательность действий:
· создать конструктором форм форму без источника данных;
· «почистить форму», задав значения свойств макета формы:
Ø Кнопки навигации: Нет;
Ø Область выделения: Нет;
· нанести в область данных поле со списком;
· исправить присоединенную к полю со списком надпись на Выберите город;
· отформатировать надпись;
· для поля со списком задать значения свойств (вкладка Данные):
Ø Тип источника данных: Таблица или запрос;
Ø Для задания значения свойству Источник строк нужно построить запрос. Для этого нужно поставить курсор в строку свойства Источник строк, кнопкой с тремя точками открыть окно конструктора запросов и создать запрос, показанный на рисунке 86:
Рисунок 86 – Запрос для свойства Источник строк поля со списком
После закрытия запроса свойству Источник строк будет автоматически присвоено значение SELECT Post.GOR FROM Post GROUP BY Post.GOR, что обеспечит вывод в поле со списком городов поставщиков без повторений;
· Свойству Имя (вкладка Другие) вместо ПолеСоСписком2 задать значение города (написать с использованием клавиатуры);
· нанести на форму кнопку, на которой написать Детали;
· закрыть форму, сохранив результаты редакции и задав форме имя Выбор деталей;
· создать запрос (см. рисунок 87), с помощью которого отбираются детали из выбранного города:
Рисунок 87 – Запрос для отображения деталей, поставляемых из выбранного города
· сохранить запрос с именем для поля со списком;
· создать условный макрос (см. рисунок 88), который проверяет, выбрал ли пользователь город, и, если выбрал, то отоб-
Рисунок 88 – Условный макрос для вывода ражает детали, поставляемые из этого го-
Сведений о поставляемых деталей из рода. Если – не выбрал, то выдается поль-
выбранного города зователю напоминание о необходимости
выбора.
!!! Выделенные макрокоманды из-за недоработок разработчиков Access необходимы для корректного решения поставленной задачи
· сохранить макрос с именем сведения о деталях из выбранного города;
· связать событие Нажатие кнопки для кнопки Детали с созданным макросом
· открыть форму Выбор деталей и убедиться в правильности решения поставленной задачи.
Пример макроса с двусторонним ветвлением
Пример 15. Требуется при просмотре деталей в форме Детали сделать так, чтобы на форме появлялась надпись Дорогая, если цена детали превышает, например, 100 руб., иначе – надпись Дешевая. Если цена не введена, то надписей не должно быть.
Для решения этой задачи нужно выполнить следующую цепочку действий:
· открыть форму Det в режиме конструктора;
· нанести на форму надпись Дорогая и отформатировать ее, используя свойства макета надписи;
· сделать надпись невидимой, для чего нужно задать значение свойству Вывод на экран этой надписи значение Нет;
· нанести на форму надпись Дешевая и отформатировать ее;
· аналогично сделать надпись невидимой, для чего нужно задать значение свойству Вывод на экран этой надписи значение Нет;
· переместить на форме одну из надписей так, чтобы она «наложилась» на другую надпись. В принципе этого можно не делать, но такое расположение надписей создает некоторый комфорт (сервис) для пользователя БД;
· создать условный макрос по имени дорогая_дешевая, который показан на рисунке 89 (при создании макроса нужно включить кнопку Показать все действия на ленте).
Здесь Visible (быть видимым) – свойство элемента управления Надпись. Это свойство можно найти в построителе выражений в окне свойств (правое окно в построителе выражений). Константы Истина и Ложь также можно найти в построителе выражений в папке Константы. Вместо этих констант можно использовать другие, допустимые значения для логических выражений (да, нет или -1,0).
· связать событие Текущая запись формы Det с макросом дорогая_дешевая;
· открыть форму Det в режиме формы и, переходя от записи к записи, убе-
Рисунок 89 – Макрос дорогая_дешевая диться в правильности решения зада-