Отображение связанных записей в отдельной форме
В главе 13 вы узнали, как элемент управления Подчиненная формаможет отображать связанные записи в одном месте. Но подчиненные формы не всегда предоставляют достаточно места для работы. В зависимости от способа обработки и величины объема реальной информации, с которой вы сталкиваетесь, возможно, вы предпочтете отображать подчиненные записи в другом месте. Можно добавить на форму кнопку, которая раскрывает другую форму со связанными записями. Для реализации этого метода во второй форме применяется фильтрация для отображения только подчиненных записей. На рис. 14.19 и 14.20 показан пример из БД Cacophone Studios.
Формы, представленные на рис. 14.19 и 14.20, можно создать без особых усилий. Немного сложнее обстоит дело с кнопкой See Students in this Class.
Далее перечислено все, что нужно сделать, для реализации кнопки, открывающей вторую форму для отображения связанных записей.
1. Откройте родительскую форму.
В данном случае начните с формы Classes.
2. На вкладке ленты Конструкторщелкните кнопкой мыши пиктограмму Кнопка.Нарисуйте кнопку на вашей форме.
Запустится Мастер кнопок.
3. Выберите категорию Работа с формойи действие Открыть формуи щелкните мышью
кнопку Далее.
На следующем этапе мастер отобразит все формы в вашей БД.
Рис. 14.19. Форма Classes выводит на экран список классов. Щелкните мышью кнопку See Students in this Class(просмотреть список студентов этого класса) для открытия второй формы (рис. 14.20)
Рис. 14.20. Форма StudentEnrollments (список студентов) содержит студентов только одного класса
4. Выберите подчиненную форму, в которой есть связанные записи, и затем щелкните
мышью кнопку Далее.
В данном случае выберите форму StudentEnroIlments.
5. Выберите переключатель Открыть форму и показать все записии затем щелкните
мышью кнопку Далее.
Этот пункт кажется немного странным — разве вы не собирались отображать только связанные записи из таблицы StudentEnrollments?Конечно, да. Но, к сожалению, Мастер кнопок не может помочь — в этой области у него существенная ошибка, мешающая создать правильное условие отбора. Поэтому вам придется проделать немного больше работы, определив самостоятельно условие отбора записей.
6. Введите какой-нибудь текст и выберите рисунок.
Начиная с этой точки, Мастер кнопок отображает стандартные этапы, которые вам уже известны (см.разд. "Выполнение действий с помощью кнопок" главы 13).
7. Задайте имя кнопки и щелкните мышью кнопку Готово.
Теперь у вас есть кнопка, открывающая нужную форму, но не задана фильтрация. Для этого необходимо изменить макрос, который использует данная кнопка.
Примечание
Макрос — это список действий, которые вы хотите заставить выполнить программу Access. В следующей главе будут подробно рассмотрены макросы. А сейчас у вас достаточно знаний для создания нужной вам кнопки.
8. Если на экране нет Окна свойств,выберите на ленте Инструменты конструктора форм | Конструктор → Сервис →Страница свойств(Form Design Tools | Design →Tools →Property Sheet).
9. Выделите кнопку, щелкнув ее мышью на рабочей поверхности формы.
Ее также можно выбрать из списка в верхней части Окна свойств.
10. ВОкне свойстввыберите вкладку Событияи щелкните кнопкой мыши поле Нажатие кнопки(OnClick).
Вы увидите в нем текст [Внедренный макрос],свидетельствующий о том, что к данному событию присоединен макрос.
11. Щелкните мышью кнопку с многоточием для открытия окна редактирования макроса.
Появится новая вкладка, на которой перечислены по порядку все макрокоманды, выполняемые макросом. Вы познакомитесь с этим окном в главе 15. Сейчас нужно внести только два простых изменения.
12. В начале списка вы увидите макрокоманду ОткрытьФорму.(Она открывает подчиненную форму при щелчке мышью кнопки.) Выделите ее, щелкнув кнопкой мыши (рис. 14.21).
Когда в макросе выбрана макрокоманда, в разделе Аргументы макрокоманды,расположенном в нижней части окна, появляется набор сведений о ней.
13. Щелкните кнопкой мыши поле Условие отбора(в нижней части окна, в разделе Аргументы макрокоманды)и затем введите ваше выражение для фильтрации записей.
Это условие отбора должно выбрать связанные записи. В данном примере это означает, что вас интересуют записи, у которых текущий код класса.
Далее приведено нужное вам условие отбора:
[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).
Данная команда заставляет программу Access обновить текущую форму (форму StudentEnrollments,которую вы только что открыли). Этот шаг необходим, поскольку форма StudentEnrollmentsмогла быть уже открыта, когда вы щелкнули мышью кнопку See Students in this Class. Если так и было, в вашем макросе изменился фильтр, но он не выполнил фильтрацию. Для обновления отображаемых записей необходимо выполнить команду Обновление и заставить форму обновить саму себя.
Рис. 14.22.Макрокоманда Обновлениеобновляет отображение текущей формы. Ей не нужны никакие дополнительные данные
15. Теперь работа завершена. Закройте вкладку с макросом и щелкните мышью кнопку Да в ответ на предложение программы Access сохранить макрос.
У вас появилась замечательная кнопка перехода, которая отображает связанную форму и ограничивает ее лишь теми записями, которые вас интересуют. В следующей главе вы узнаете гораздо больше о тонкой настройке макросов.
Для испытания вашей кнопки перейдите в Режим формыи щелкните кнопку мышью. Когда вы щелкните мышью кнопку See Students in this Classи откроется форма StudentEnrollments,сработает заданное условие отбора записей.
Подсказка
Любой пользователь может удалить ваше условие отбора с помощью группы ленты Главная → Сортировка и фильтр(или щелкнув мышью поле С фильтром(Filtered), которая выводится в нижней части формы, рядом с кнопками перехода). Если вам не нужна такая гибкость настройки, можно настроить форму StudentEnroIImentsтак, что она никому не позволит изменять свои параметры фильтрации. Для этого откройте форму в режиме Конструктора,выделите элемент Формав списке Окна свойстви измените значение свойства Применение фильтровс Да на Нет.