2. Вызовите Мастер отчетов с помощью команд меню:
Создание → Мастер отчетов.
Используя Мастер отчетов, создайте отчет Картотека_студентов типа «в один столбец» для отображения содержимого таблицы Студенты в виде отдельных карточек. Задайте сортировку карточек по фамилии студента в алфавитном порядке. Выполните операцию по формированию отчета и просмотрите содержимое отчета в режиме Preview. Распечатайте отчет Картотека_студентов для членов бригады.
3.С помощью Мастера отчетов создайте на базе таблицы Дисциплины отчет Перечень_дисциплин табличного типа. Доработайте отчет, введя в него вычисляемые элементы для подсчета суммарного количества часов по всем видам занятий (лекции, лабораторные работы, практические занятия) для каждой дисциплины. Добавьте в область Примечание отчета вычисляемые поля для подсчета суммарного количества часов по всем видам занятий для всех дисциплин и среднего количества часов по всем дисциплинам. Выполните операции по просмотру и печати отчета.
4.На базе запроса Выбрать_зачетка (см. лаб. раб. 4) создайте отчет Зачетка_фамилия для формирования зачетной книжки. Введите в отчет вычисляемый элемент для подсчета среднего балла по всем экзаменам. Выполните отчет Выбрать_зачетка поочередно для каждого члена бригады и распечатайте результаты выполнения. Следует отметить, что выполнение отчета, построенного на базе запроса, автоматически вызывает выполнениесоответствующегозапроса.
5.Создайте вспомогательный формуляр Документы и разместите на нем командные кнопки: Картотека_студентов, Перечень_дисциплин, Зачетка и
свяжите с ними макрокоманды для вызова соответствующих отчетов. Для выполнения отчета Зачетка_фамилия вставьте в формуляр поле Фамилия_студента и внесите ссылку на это поле в условие запроса Выбрать_зачетка. После такой доработки в базе данных появляется возможность автоматического формирования зачетки для любого члена бригады с использованием одного универсального запроса, так как фамилия студента будет передаваться из формуляра Документы непосредственно в условие выборки информации запроса Выбрать_зачетка.
6.Доработайте главный формуляр базы данных Dekanat, вставив в него командную кнопку Документы для открытия формуляра Документы и получения доступа ко всем отчетам базы данных. Проверьте работу СУБД Деканат в новых режимах.
31
Содержание отчета:
1.Описание всех спроектированных отчетов.
2.Документы, полученные в результате выполнения отчетов.
3.Макет формуляра Документы с командными кнопками вызова отчетов.
4.Тексты макрокоманд, обеспечивающих выпуск документов.
5.Выводы по работе.
Лабораторная работа 6. ПРОЕКТИРОВАНИЕ МОДУЛЕЙ НА ЯЗЫКЕ ACCESS BASIC В СРЕДЕ MS ACCESS
Цель работы – разработка программных модулей на языке Access Basic для использования в базе данных, созданной в среде универсальной СУБД
Microsoft Access.
6.1. Основные положения
Система управления реляционными банками данных Access дает пользователю возможность создавать достаточно сложные базы данных с развитыми средствами управления, не написав при этом ни одной строки программного кода. Технология визуального проектирования, реализованная в Access, поднимает пользователя до уровня разработчика и позволяет ему самому решить все проблемы, не обращаясь к услугам профессиональных программистов. Но проектная оболочка Access, как и любой другой инструментарий, имеет свои ограничения, и по мере приобретения квалификации пользователь начинает эти ограничения чувствовать. Оболочка Access и предусмотренные в ней возможности макропрограммирования при усложнении СУБД уже не могут решить всех поставленных задач, поскольку набор доступных макроопераций ограничен. Выходом из такого положения является написание необходимых программных модулей на диалекте языка Visual Bacic, встроенного в Access.
6.2. Основы программирования на access basic
6.2.1. Модули Access Basic
Модуль является самостоятельным объектом банка данных, объединяющих одну или несколько процедур. При этом процедура состоит из последовательности Basic-операторов (инструкций), действие которых подобно действию Access-макрокоманды. Составляющие процедуру инструкции являются программным кодом, или просто кодом. Входящие в модуль проце-
32
дуры объединены общей областью деклараций. В ней устанавливаются определения и правила, которые являются общепринятыми для процедур модуля. Иерархия описанных объектов выглядит так: банк данных, модуль, область деклараций, процедура, код, оператор.
По способу обращения все процедуры можно разделить на две различные категории.
Функциональные процедуры (или кратко функции) после выполнения возвращают некоторое значение, которое может применяться как элемент выражения. Написанные пользователем функции могут, к примеру, генерировать специальное значение, используемое по умолчанию для некоторого поля, или вычислять сложный критерий в рамках запроса.
Процедуры-подпрограммы (или кратко подпроцедуры) не возвращают никакого значения, а просто выполняют некоторую последовательность операций. С помощью подпроцедуры пользователь может, например, выполнить установку характеристикформуляраили заполнитьсписоквычисленными значениями.
Для всех разновидностей процедур общим является то, что при необходимости они могут принимать и обрабатывать ряд аргументов. С помощью аргументов, передаваемых процедуре при ее вызове, можно подробнее описать метод получения результата, задать коэффициенты расчета и пр.
Теоретически, любая процедура может быть вызвана из любых модулей, а функциональная процедура и из таких обьектов, как формуляры, запросы и отчеты банка данных. Кроме таких общедоступных (типа Global) процедур, которыми являются все процедуры по умолчанию, можно создать также и локальные (типа Local), или приватные процедуры, доступные для вызова только в рамках того модуля, где они описаны.
Процедура состоит из последовательности инструкций. Инструкция определяет выполняемую операцию. В инструкциях часто пользуются встроенными в Access функциями, названиями методов и характеристик. Для обращения к этим элементам, а также для обозначения самих операторов используются ключевые слова, которые обычно записываются с прописной буквы (например, Function).
6.2.2. Проектирование модулей
Проектирование модуля выполняется в окне модуля. При этом разработчик пользуется специализированным текстовым редактором, предназначенным для ввода программного кода.
33
Окно модуля открывается при обращении в режиме проектирования к существующему модулю или при создании нового модуля. В первом случае в окне банка данных (пиктограмма Module) следует выбрать среди модулей требуемый и нажать кнопку Design, во втором – нажать командную кнопку New.
При создании нового модуля ему автоматически присваивается уникальное имя, которое потом можно изменить. Для первого модуля это имя Module1. Следует помнить, что при проектировании модуля (в отличие от процесса заполнения таблиц) вводимые операторы и вносимые изменения сохраняются не сразу необходимо выполнять принудительное сохранение. Поэтому рекомендуется по мере ввода объемного программного кода сохранять текст модуля через определенные промежутки времени. Сохранение происходит при выполнении директивы File/Save.
После открытия окна модуля в нем можно видеть содержимое области деклараций. В этой области задаются общие для всего модуля определения. По умолчанию для нового модуля в области декларации появляется оператор:
Option Compare Database .
Этим оператором задается режим сравнения данных. В Access предусмотрены три различных режима сравнения, но по умолчанию применяется режим Binary.
Описание режимов сравнения приведено в таблице.
Режим |
Описание |
Binary |
При сравнении принимается во внимание ANSI-кoдировка символов, |
|
вследствие чего различаются прописные и строчные буквы |
Database |
При сравнении принимается во внимание установленный при создании базы |
|
данных порядок сортировки |
Text |
При сравнении не различаются прописные и строчные литеры |
Наряду с областью декларации модуль может включать несколько процедур. В окне модуля всегда видна только одна процедура. Для выбора просматриваемой (редактируемой) процедуры следует пользоваться списком процедур в пиктографическом меню.
Переход к следующей и предыдущей процедурам в списке процедур модуля можно выполнить с помощью специальных кнопок, расположенных рядом со списком процедур в пиктографическом меню.
Вносить изменения в код, приведенный в окне модуля, можно используя стандартные для текстовых редакторов клавиши и клавиатурные комбинации.
34
6.2.3. Проектирование функциональной процедуры
Рассмотрим пример. При вводе в прейскурантный формуляр цен, выраженных в DM, цены должны быть автоматически пересчитаны в американские доллары с внесением результата пересчета в отдельное поле. Формуляр с именем Прейскурант содержит три поля (Название_товара, Це-
на_в_марках и Цена_в_долларах), которые однозначно связаны с сответствующими полями таблицы каталога товаров.
Для решения поставленной задачи пересчета необходимо разработать функциональную процедуру, которая определяет значение поля USD, вычисляя его по содержимому поля с ценой в DM:
Function Марки_в_доллары( )
‘Пересчет цены в марках в цену в долларах
Forms!Прейскурант!USD = Forms!Прейскурант!DM / 1.63 End Function
Как только завершается ввод очередной строки в тело процедуры, Access проверяет синтаксис введенной инструкции на наличие ошибок. Если обнаружена синтаксическая ошибка, то на экране появляется соответствующее сообщение. Access проверяет только «локальный» синтаксис, т. е. корректность написания операторов. Он не может обнаружить, например попытку обратиться к полю, которого нет. Ошибки в именах формуляра тоже не будут обнаружены, они проявятся только при выполнении процедуры. Для сохранения текста процедуры необходимо выполнить директиву File/Save.
6.2.4. Применение функциональной процедуры
Для связывания разработанной функциональной процедуры с вычисляемым полем в Access предусмотрен ряд способов. Способ связывания функциональной процедуры зависит от ее типа. Функциональные процедуры можно связывать с событиями. Это значит, что такая процедура может вызываться щелчком «мыши» на некотором поле. Можно вызвать ее также и из макрокоманды или из другой процедуры. Результат выполнения функциональной процедуры может применяться:
–в качестве значения по умолчанию для поля таблицы;
–в качестве значения критерия для запросов или фильтров;
–в качестве содержимого поля.
В рассматриваемом примере оформления прейскуранта следует воспользоваться ориентированным на событие вызовом функции внутри форму-
35