Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
466
Добавлен:
02.04.2015
Размер:
3.64 Mб
Скачать

15.4.2. Пример макроса с двусторонним ветвлением

Пример 15.Требуется при просмотре деталей в формеДеталисделать так, чтобы на форме появлялась надписьДорогая,если цена детали превышает, например, 100 руб., иначе – надпись Дешевая. Если цена не введена, то надписей не должно быть.

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

  • открыть форму Det в режиме конструктора;

  • нанести на форму надпись Дорогая и отформатировать ее, используя свойства макета надписи;

  • сделать надпись невидимой, для чего нужно задать значение свойству Вывод на экран этой надписи значение Нет;

  • нанести на форму надпись Дешевая и отформатировать ее;

  • аналогично сделать надпись невидимой, для чего нужно задать значение свойству Вывод на экран этой надписи значение Нет;

  • переместить на форме одну из надписей так, чтобы она «наложилась» на другую надпись. В принципе этого можно не делать, но такое расположение надписей создает некоторый комфорт (сервис) для пользователя БД;

  • создать условный макрос по имени дорогая_дешевая, который показан на рисунке 89 (при создании макроса нужно включить кнопку Показать все действия на ленте).

ЗдесьVisible(быть видимым) – свойство элемента управленияНадпись.Это свойство можно найти в построителе выражений в окне свойств (правое окно в построителе выражений). КонстантыИстинаиЛожьтакже можно найти в построителе выражений в папкеКонстанты.Вместо этих констант можно использовать другие, допустимые значения для логических выражений(да,нетили-1,0).

  • связать событиеТекущая записьформыDetсмакросомдорогая_дешевая;

  • открыть форму Det в режиме формы и, переходя от записи к записи, убе-

Рисунок 89 – Макрос дорогая_дешевая диться в правильности решения зада-

чи.

15.5. Реализация циклов в макросах

Для реализации циклов в макросах используется макрокомандаЗапускМакроса.Рассмотрим примеры.

Пример 16.Выдать на экран три раза одно и то же сообщение. Для решения этой задачи можно три раза использовать макрокомандуОкноСообщения,а можно это сделать с помощью цикла:

  • создать макрос, содержащий единственную макрокомандуОкноСообщения,в аргументах которой укажем повторяемое сообщение, например, слово Ура!. Сохранить макрос, задав ему имя, например,Сообщить.

  • создать другой макрос по имениЗапуск сообщения, который показан на рисунке 90:

Рисунок 90 – Макрос Запуск сообщения

  • исполнить макросЗапуск сообщения.

Рассмотрим более сложные примеры.

Пример 17.Пусть имеем загруженную данными таблицуDet.Требуется отобрать в отдельную таблицу детали с ценой больше 100 руб.,а в другую таблицу – остальные детали.Эту задачу можно решать несколькими способами.

Способ 1.С использованием запросов:

  • создать запрос с именем Дорогие на создание таблицыпо имениДорогие детали,куда будут отбираться записи из таблицыDet,с условием отбора>100для поляCENA;

  • cоздать запрос с именем Дешевые на создание таблицыпо имениДешевые детали,куда будут отбираться остальные детали, в том числе и те, цена для которых не введена; запрос показан на рисунке 91;

!!! Талицы и запросы должны иметь разные имена

Рисунок 91 – Запрос на создание таблицы дешевых деталей и цена которых не введена

  • создать макрос по имениОтбор деталей, который показан на рисунке 92:

Рисунок 92 – Макрос для отбора деталей в таблицы Дешевые детали и Дорогие детали

Макрокоманда УстановитьСообщения запрещает вывод системных сообщений.

Но тогда макрос выполнится «молча». Чтобы проинформировать пользователя БД, что макрос «сделал свое дело» нужно его завершить макрокомандой ОкноСообщения, как показано на рисунке 92.

  • исполнить макросОтбор деталей.В результате будут созданы две таблицыДорогие деталииДешевыедеталис отобранными данными.

Способ 2.С использованием циклов в макросах.

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

  • создать пустую таблицу для дорогих деталей. Назовем ееДорДет.Ее структура должна быть такой же, как и структура таблицыDet за исключением ключевого поля, которое должно быть не счетчиком, а числовым:

  • выделить таблицуDetв окне браузера объектов;

  • скопировать ее в буфер обмена;

  • вставить из буфера обмена, указав в открывшемся окне факт копирования только структуры (соответствующий переключатель);

  • сохранить таблицу с именем ДорДет;

  • открыть таблицу ДорДет в режиме конструктора, и, если ключевое поле – счетчик, то заменить его на числовое;

  • аналогично создать пустую таблицу для дешевых деталей и деталей без цены по имениДешДет;

  • создать автоформыДорДетиДешДет,источником данных для которых являются соответствующие таблицы;

  • создать условный макрос по имениОтбор,который буде выполняться в цикле при условии, что формаDetоткрыта (предполагается, что формаDetбыла заранее создана). Этот макрос в зависимости от значения поляCENAв формеDetбудет копировать запись из таблицыDetв таблицуДорДетилиДешДетчерез соответсвующие формы. МакросОтборприведен на рисунке 93:

Рисунок 93 – МакросОтбор

  • создать макрос Завершение отбора, который даст возможность убедиться в правильности заполнения данными таблиц ДорДет и ДешДет, а также закрыть все вспомогательные открытые объекты, то есть корректно завершить задачу (см. рисунок 94);

  • создать макросОтборв цикле,который запускает два макроса: Отбор и Завершение отбора.

Макрос Отбор в цикле показан на ри-

сунке 95.

В этом макросе вместо аргументаЧис-

ло повторовможно указатьУсловие

повтора:

Not is Null (Формы![Det]![DIM]),

что означает“Пока не пусто значение

поля DIM в таблице Det”.Это условие можно использовать, если для всех де-

талей введено имя. Здесь поле DNис

пользовать нельзя, так как DN – ключ.

Рисунок 94 – Макрос Завершение отбора

  • на форму Det в режиме конструктора нанести кнопку, на которой написать

Отбор в цикле;

  • связать событиеНажатие кнопкис макросомОтбор в цикле.

  • открыть формуDetв режиме формы,по кнопкеОтбор в циклеи убедиться, что поставленная задача решается правильно.

Рисунок 95 – Макрос Отбор в цикле

Соседние файлы в папке Материалы для лабораторных Базы данных