Автоматизация работы приложения с помощью макросов. Упрощение ввода с помощью копирования данных. Создание макроса, страница 2

 ' Возвращает значения True, если форма открыта

 Const conObjStateClosed = 0

 Const conDesignView = 0

 If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then

 If Forms(strFormName).CurrentView <> conDesignView Then

 IsLoaded = True

 End If

 End If

End Function 

2.  Выберите вкладку ленты Создание, в группе Макросы и код и сделайте щелчок левой кнопкой мыши по значку Модуль

 

3.  Вставьте скопированной в буфер текст, нажмите на кнопку Сохранить и подтвердите предлагаемое имя модуля.

 

Создание макроса Обновить заказ в группе макросов Товары

1.  Откройте группу макросов Товары в режиме конструктора и вложите новый  макрос.

2.  В поле Вложенный макрос введите Обновить заказ

3.  В поле Если с помощью функции IsLoadedвведите проверку, открыта ли форма Заказы и было ли в форме Товары введено значение поля КодТовара:

IsLoaded("Заказы") And [Forms]![Товары]![КодТовара] Is Not Null

4.  Если условие выполняется, то с помощью макрокоманды ОбновитьОбъект обновите форму Заказы: 

5.  Ниже с помощью макрокоманды ЗадатьЗначение задайте копирование значения поля КодТовара из формы Товары в форму Заказы:

 

Привязка формы Товары к макросу Обновить заказ в группе макросов Товары

1.  Откройте форму Товары в режиме конструктора и откройте окно свойств формы.

2.  Во вкладке События щелкните в строке Закрытие и выберите макрос с именем Товары.Обновить заказ.

 

Пример 4.7.Обеспечить обновление информации в форме Заказы, когда Access в нее возвращается из формы Ввод покупателей после ввода нового покупателя.

Каскадное удаление данных

При определении всех связей в базе данных и включении режима поддержания целостности Access гарантирует, что:

            для несуществующих клиентов или товаров вы не введете ни одного заказа;

•  удалить клиента или товары можно только после удаления связанных с ними заказов.

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

•  посмотреть, имеется ли ссылка на этот товар в каком-либо заказе;

•  если ссылка имеется, то вместо обычного выводимого Access сообщения о невозможности удаления товара выдать более информативное сообщение.

Создание макроса Удаление в группе макросов Товары

1.  Откройте группу макросов Товары в режиме конструктора.

2.  Из окна Каталог макрокоманд отбуксируйте элемент Вложенный макрос в область макроса.

3.  Введите имя макроса – Удаление. 

4.  Из окна Каталог макрокоманд отбуксируйте элемент Если в область макроса.

5.  Используя построитель в поле Если введите выражение

DCount("[КодТовара]";"[Заказы]";"[КодТовара] =Forms![Товары]![КодТовара] ")<>0

6.  В поле Добавить новую макрокоманду выберите макрокоманду ОкноСообщения.

7.  В качестве элемента Сообщение макрокоманды введите

«Для товара существуют заказы. Перед удалением товара сначала должны быть удалены все заказы на этот товар» 

8.  В следующее поле Добавить новую макрокоманду выберите макрокоманду ОтменитьСобытие.

9.  В следующее поле Добавить новую макрокоманду выберите макрокоманду ОстановитьМакрос.

10. Нажмите Конец блока «Если».

Примечание. Т.е. если заказы на удаляемый товар имеются, то

v с помощью макрокоманды ОкноСообщениявыводится сообщение о невозможности удаления товара;

v с помощью макрокоманды ОтменитьСобытиемыотказываемся от удаления прежде, чем Access выдаст свое предупреждающее сообщение;

v с помощью макрокоманды ОстановитьМакроспрекращаем работу макроса.

11. Из окна Каталог макрокоманд отбуксируйте новый элемент Если в область макроса. Используя построитель в поле Если введите выражение

MsgBox("Вы уверены, что хотите удалить товар " & [Формы]![Товары]![НаимТов] & "?";33;"Удаление товара")<>1

Примечание. Второй аргумент функции MsgBox (см. Приложение) – число 33, формирует в диалоговом окне две кнопки - OK и Cancel. Если пользователь нажмет кнопку ОК, то функция MsgBox возвратит

1. 

12. В поле Добавить новую макрокоманду выберите макрокоманду ОтменитьСобытие для вывода предупреждающего сообщения.