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

Access 2007

.pdf
Скачиваний:
117
Добавлен:
11.05.2015
Размер:
23.5 Mб
Скачать

Далее приведено нужное вам условие отбора: [ClassID]=[Forms]![Classes]![ID]

Рис. 14.21. Выражение для фильтрации следует поместить в поле Условие отбора

Это выражение сообщает программе Access о том, что необходимо отображать запись, только если значение поля ClassID в форме StudentEnrollments совпадает со значением поля ID в форме Classes. Другими словами, вы получите список студентов, зачисленных в текущий класс.

Примечание

Странные восклицательные знаки в выражении для фильтрации позволяют связать две формы. Условие отбора задается в форме, которую вы открываете (форма StudentEnrollments) и у которой есть поле ClassID. Но вы должны сократить число отображаемых ею записей на основе поля ID, хранящегося в другой форме (Classes). Синтаксическая запись [Forms] ! [Classes] ! [ID] — просто замысловатый способ сказать программе Access о том, что искать нужное ей значение ID следует в открытой в данный момент форме с именем Classes.

14. Изменение, сделанное в предыдущем пункте, почти завершает корректировку макроса, Но хорошо бы добавить еще одну макрокоманду. Щелкните кнопкой мыши поле, расположенное под макрокомандой ОткрытьФорму, и введите Обновление (Requery) (рис. 14.22).

491

Данная команда заставляет программу Access обновить текущую форму (форму StudentEnrollments, которую вы только что открыли). Этот шаг необходим, поскольку форма StudentEnrollments могла быть уже открыта, когда вы щелкнули мышью кнопку See Students in this Class. Если так и было, в вашем макросе изменился фильтр, но он не выполнил фильтрацию. Для обновления отображаемых записей необходимо выполнить команду Обновление и заставить форму обновить саму себя.

Рис. 14.22. Макрокоманда Обновление обновляет отображение текущей формы. Ей не нужны никакие дополнительные данные

15.Теперь работа завершена. Закройте вкладку с макросом и щелкните мышью кнопку Да

вответ на предложение программы Access сохранить макрос.

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

Для испытания вашей кнопки перейдите в Режим формы и щелкните кнопку мышью. Когда вы щелкните мышью кнопку See Students in this Class и откроется форма StudentEnrollments, сработает заданное условие отбора записей.

Подсказка

Любой пользователь может удалить ваше условие отбора с помощью группы ленты Главная → Сортировка и фильтр (или щелкнув мышью поле С фильтром (Filtered), которая выводится в нижней части формы, рядом с кнопками перехода). Если вам не нужна такая гибкость настройки, можно настроить форму StudentEnroIIments так, что она никому не позволит изменять свои параметры фильтрации. Для этого откройте форму в режиме Конструктора, выделите элемент Форма в списке Окна свойств и измените значение свойства Применение фильтров с Да на Нет.

Отображение более подробных отчетов с помощью связей

Для обеспечения переходов между отчетами можно использовать аналогичный метод. При желании можно сформировать возможность перехода из одного отчета в другой, подчиненный

492

Макрос, который нужно создать, почти идентичен тому, который мы рассматривали в предыдущем примере.

Как правило, специалисты Access применяют этот метод для запуска основного отчета и предоставляют возможность пользователям щелчками кнопки мыши проложить путь к более подробному отчету, который акцентирует внимание на части данных (рис. 14.23 и 14.24).

Рис. 14.23. Первый отчет (TotalsByCustomer) (общая стоимость заказов клиента) отображает всех клиентов и общую стоимость заказов для каждого из них. Щелкните кнопкой мыши одного из клиентов, и программа Access запустит вывод более подробного отчета, показанного на рис. 14.24

Примечание

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

Для создания такого перехода необходимо начать с создания поля ввода, которое выглядит как гиперссылка. (Настоящий элемент управления Гиперссылка использовать нельзя, поскольку он отображает только фиксированный, неменяющийся текст. Вместо этого нужен способ отображения содержимого поля как ссылки — в данном примере код клиента.) Затем можно создать макрос, который запускается при щелчке кнопкой мыши поля для перехода к новому отчету. Задача этого макроса — открыть подробный отчет, который вам нужен, и затем применить фильтр для отображения только связанных записей.

Отформатировать поле ввода легко. Можно выделить любой элемент управления и затем изменить его цвет, шрифт и т. д. с помощью команд на ленте. Но вам даже не нужно выполнять эту работу. У каждого поля есть странное свойство, названное Гиперссылка (Is

493

Hyperlink), — задайте для него значение Да, и элемент управления Поле превратится в подчеркнутый текст синего цвета, что вам и нужно

Рис.14.24.ПредставленныйотчетCustomerPurchasesотражает привычкивыбранногоклиентатратить деньги.Выражение построениятекстовойстроки(="Products Purchased By " & [FirstName] & " " & [LastName]) помещает имяи фамилиютекущего клиентав заголовок формы

После того как вы справились с описанной странностью, самое время добавить необходимый макрос. Можно предпринять следующие действия с БД Boutique Fudge (включена в загружаемое из Интернета содержимое примеров для данной главы) для вставки ссылки, открывающей отчет CustomerPurchases (покупки клиента) в отчете TotalsByCustomer (общая стоимость заказов клиента).

1.Откройте отчет, который хотите использовать, в режиме Конструктора. В данном примере все начинается с формы Totals By Customer.

2.Если на экране не видно Окна свойств, выберите на ленте Инструменты конструктора отчетов | Конструктор → Сервис → Страница свойств (Report Design Tools | Design Tools Property Sheet).

3.Решите, какое поле хотите использовать для создания ссылки, и выделите его.

Обычно применяется уникальное значение кода (ID), связывающее две таблицы друг с другом. В данном примере используется поле ID, хранящее идентификатор клиента. Если вы его еще не отформатировали, сделайте это сейчас с помощью свойства Гиперссылка так, чтобы поле выглядело как ссылка.

Теперь следует создать и присоединить макрос.

4.В Окне свойств перейдите на вкладку События и щелкните кнопкой мыши поле Нажатие кнопки (OnClick). Щелкните мышью кнопку с многоточием (...)

494

На экране появляется диалоговое окно Построитель (Choose Builder) и запрашивает способ создания кода, который будет выполняться, когда ссылку щелкают кнопкой мыши.

5.Выберите Макросы (Macro Builder) и затем щелкните мышью кнопку ОК. На экране появится окно редактирования макроса.

6.В первой строке, в столбце Макрокоманда щелкните кнопкой мыши направленную вниз стрелку. Выберите команду ОткрытьОтчет.

Вы также можете выбрать макрокоманду ОткрытьФорму для открытия формы (для редактирования записей), когда ссылку щелкают кнопкой мыши.

7.В разделе Аргументы макрокоманды измените свойство Имя отчета, задайте имя отчета, который хотите использовать.

В данном примере это CustomerPurchases.

8.Теперь необходимо задать свойство Условие отбора (Where Condition) для применения фильтра. Он должен отбирать клиентов, соответствующих значению ID в текущей записи.

Нужное вам выражение очень похоже на то, которое использовалось в примере с формами. Необходимо выбрать верное поле в отчете, который открыли (поле CustomerlD в отчете CustomerPurchases), и затем сравнить его с полем, которое вы щелкнули кноп-

кой мыши (поле ID в отчете TotalsByCustomers). Далее приведено нужное выражение: [CustomerlD]=[Reports]![TotalsByCustomer]![ID]

Как и в примере с формами, это выражение использует замысловатый синтаксис с восклицательными знаками, чтобы сообщить программе Access о том, как найти отчет

TotalsByCustomers.

9. Под макрокомандой ОткрытьОтчет введите Обновление.

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

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

11.Перейдите в режим Представление отчета и опробуйте ссылку.

Теперь можно щелкнуть ссылку кнопкой мыши и углубиться в более подробный отчет.

Вы можете проверить этот пример самостоятельно, воспользовавшись тренировочными БД для данной главы.

495

Часть V

Программирование в Access

Глава 15. Автоматизация задач с помощью макросов Глава 16. Автоматизация выполнения задач средствами языка Visual Basic

Глава 17. Написание кода с более развитой логикой

496

Глава 15

Автоматизация задач с помощью макросов

Секрет долгих и счастливых отношений с программой Access кроется в умении заставить ее работать так, как вы хотите.

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

Макрос — это небольшая программа, которую вы создаете и храните в БД. Макрос может быть крайне простым (например, команда отображения формы) и головоломно сложным (например, макрос с условием, проверяющий количество сырого мяса на складе и автоматически печатающий заказ в трех экземплярах, если ваш холодильник пуст).

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

На профессиональном уровне. Макросы по сравнению с программным кодом

Впрошлом у макросов была немного сомнительная репутация. Некоторые специалисты

Access избегали их, предпочитая применять более мощный язык программирования Visual Basic (VB) (с которым вы познакомитесь в следующей главе). Корпорация Microsoft внесла в эту ситуацию свою лепту, полагая, что макросы — это устаревшие средства и не лучший выбор для передовых разработчиков.

ВAccess 2007 Microsoft наконец уделила макросам больше внимания и улучшила их репутацию. Несмотря на то, что у макросов и близко нет таких функциональных возможностей, как у чистого VB-кода, они просты, ясны и быстры настолько, что никакой VBкод не сможет с ними сравниться. Но самое главное достоинство макросов — безопасность. Поскольку программа Access знает, что делает каждый макрос, она может утверждать, что большинство из них безопасны. Другими словами, Access знает, что макро-

команда ОткрытьФорму (OpenForm) может применяться только для открытия формы, поэтому не стоит беспокоиться о том, что она может удалить ваши файлы, отправить снам вашим друзьям или отформатировать ваш жесткий диск. В случае VB-кода у программы Access нет такой уверенности.

497

В результате она склонна блокировать ваши снабженные кодом средства, даже если они не более опасны, чем два волоска, свернувшиеся на подушке. (Вы более подробно познакомитесь с проблемой безопасности в разд. "Макросы и безопасность" далее в этой главе.)

Даже если вы решили не тратить времени на макросы и стать программистом на Visual Basic, обладающим черным поясом, все равно следует начать с данной главы. Здесь вы узнаете важную информацию о том, как макросы встраиваются в формы (см. разд. "Присоединение макросов к формам" далее в этой главе). Как вы увидите в следующей главе, программные процедуры взаимодействуют с формами точно так же.

Базовые сведения о макросах

Несмотря на то, что вы могли этого не осознать, вы уже пользовались макросами. В главе 14 вы создавали кнопки, способные выполнять полезные задачи, например, открывать другие формы или переходить к конкретной записи. Для создания этих макрокоманд вы применяли мастер создания кнопок, который задает несколько простых вопросов и затем генерирует сделанный по мерке макрос.

Рис. 15.1. Этот макрос состоит из двух макрокоманд. Первая открывает таблицу, а вторая переходит к заданной записи. Когда вы запускаете макрос, программа Access начинает с вершины списка и двигается вниз, последовательно выполняя макрокоманды

498

Хотя мастер создания кнопок прост в применении, его не обвинишь в излишней гибкости. Теперь вы достаточно подготовлены для того, чтобы стать еще сильнее и создать собственный макрос.

Создание макроса

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

1. Выберите на ленте Создание Другие Макрос.

На экране появится новое окно для создания нового макроса. Неофициально оно называется конструктором макроса.

Любой макрос состоит либо из последовательности одного или нескольких шагов, либо из действий (макрокоманд). Для создания макроса вы формируете список макрокоманд, помещая каждую из них в отдельную строку (рис. 15.1). Первоначально этот список пуст и ваш макрос ничего не выполняет.

Рис.15.2. Щелкните кнопкой мыши направленную вниз стрелку (обведена), чтобы просмотреть представленные в алфавитном порядке макрокоманды, которые можно использовать. После того как макрокоманда выбрана, в нижнем правом углу окна появляется краткое, но полезное описание

499

2.Выберите первую макрокоманду.

Упрограммы Access есть предварительно подготовленный список макрокоманд, которые можно использовать для приготовления макросов. Когда добавляется команда, ее просто выбирают из этого списка, как показано на рис. 15.2. В данном примере начните с выбора макрокоманды ОткрытьТаблицу (ОреnТаble).

Примечание

В данный момент вы работаете только с макрокомандами, которые программа Access считает безопасными для всех БД. Немного позже (см. разд. "Опасные макрокоманды" далее в этой главе) вы рассмотрите возможность применения нескольких команд, использование которых программа Access считает рискованным делом.

Рис. 15.3. Когда в списке выбирается макрокоманда, все аргументы отображаются в нижней части окна. Как видно из данного примера, у макрокоманды ОткрытьТаблицу — три аргумента (Имя таблицы, Режим и Режим данных). Каждый раз, когда вы щелкаете кнопкой мыши в одном из этих полей, в поле, расположенном справа, появляется краткое описание аргумента. Значения ваших аргументов также отображаются в виде разделенного запятыми списка в столбце Аргументы, расположенном рядом с макрокомандой

3.В нижней части вкладки макроса в разделе Аргументы макрокоманды (рис. 15.3) выберите параметры для вашего макроса.

Большинству макрокоманд для выполнения их работы нужна от вас некоторая информация. В макрокоманде ОткрытьТаблицу (ОреnТаble) мало смысла до тех пор, пока вы

500

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]