Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Днепропетровский областной советСтр 1 из 15Следующая ⇒
Днепропетровский областной совет Областное коммунальное высшее учебное заведение «Институт предпринимательства «Стратегия»»
Кафедра компьютерных и
Конспект лекций
по дисциплине Пакеты прикладных программ
Раздел ІІ. СУБД
Разработала Ст. преподаватель кафедры КИТ Гапонова Людмила Алексеевна
г. Желтые Воды 2011 г.
Содержание раздела
Тема. Системи керування базами даних План. Основні поняття теорії баз даних. 3 Моделі організації даних. 4 Ієрархічна модель. 4 Мережева модель. 4 Реляційна модель даних. 5 Програмні системи керування базами даних. 8 Застосування СКБД в економіці 9 Ключові поняття. 10 Самостійна робота: 10 Література. 10 У самому широкому змісті будь-яка програма має справу з деякої зовнішньої стосовно її коду інформацією, що задає які-небудь параметри або режим її роботи. Таку інформацію також називають даними програми. Очевидно що залежно від типу розв'язуваних завдань проблеми організації роботи з даними будуть якісно різними. У переважній більшості випадків при рішенні господарських, економічних і фінансових завдань доводиться мати справe з великими специфічно структурованими й взаємозалежними масивами даних. Такі складні набори даних традиційно прийнято називати базами даних. Моделі організації даних Набір принципів, що визначають організацію логічної структури зберігання даних у базі, одержав назву моделі даних. Моделі баз даних визначаються трьома компонентами: • припустимою організацією даних; • обмеженнями цілісності; • безліччю припустимих операцій. У теорії систем керування базами даних виділяють моделі трьох основних типів: ієрархічну, мережеву й реляційну. Ієрархічна модель У ієрархічній моделі всі записи, агрегати й атрибути бази даних утворять Ієрархічно організований набір, тобто таку структуру, у якій всі елементи зв'язані відносинами підпорядкованості й при цьому будь-який елемент може підкорятися тільки одному якому-небудь іншому елементу. Таку форму залежності зручно зображувати за допомогою деревоподібного графа (схеми, що складає із крапок і стрілок, що зв'язна й не має циклів). Приклад ієрархічної структури бази даних наведений на рис. 1. Рис 1. Схема ієрархічної моделі даних
Типовим представником сімейства баз даних, заснованих на ієрархічній моделі, є Information Management System (IMS) фірми IBM, перша версія якої з'явилася в 1968 р. Мережева модель Концепція мережевої моделі даних пов'язана з ім'ям Ч. Бахмана. Мережевий підхід до організації даних є розширенням ієрархічного. В ієрархічних структурах запис-нащадок повинна мати в точності одного предка; у мережевій структурі даних нащадок може мати будь-яке число предків (рис. 2). Рис.2. Схема мережевої моделі даних Мережева БД складається з набору записів і набору зв'язків між цими записами, точніше, з набору екземплярів записів заданих типів (із припустимого набору типів) і набору екземплярів із заданого набору типів зв'язку. Прикладом системи керування даними з мережною організацією є Integrated Database Management System (IDMS) компанії Cullinet Software Inc., розроблена в середині 70-х років. Вона призначена для використання на «більших» обчислювальних машинах. Архітектура системи заснована на пропозиціях Data Base Task Group (DBTG), Conference on Data Systems Languages (CODASYL), організації, відповідальної за визначення стандартів мови програмування Кобол. Серед достоїнств систем керування даними, заснованих на ієрархічній або мережній моделях, можуть бути названі: їхня компактність й, як правило, висока швидкодія, а серед недоліків - не універсальність, високий ступінь залежності від конкретних даних. Реляційна модель даних Концепції реляційної моделі вперше були сформульовані в роботах американського вченого Едгара Кодда і ґрунтується на понятті відношення (relation). Звідки відбувається її друга назва — модель Кодда. Ключові поняття - база даних; - СКБД - наочна область; - ключ; - запис, - поле; - Атрибут; - Відношення; - Елемент; - Домен; - Об’єкт; - Кортеж; - Первинний ключ; - Зовнішній ключ; - сутність (суттєвість); - модель даних; - SQL; - Трансакція. Самостійна робота: 1. Опрацювати теоретичний матеріал з практичним застосуванням та дати відповіді на контрольні питання ¾ Контрольні питання: 1. Що таке база даних і що таке СКБД? У чому розходження цих понять? 2. Дайте визначення наступних понять: об'єкт, атрибут, запис, ключ. 3. Що таке модель даних? Які моделі ви знаєте? В чому полягає заслуга кожної із них? 4. Основні властивості реляційної моделі даних. 5. Що таке нормальні форми? 6. Які нормальні форми Ви знаєте? Дайте їх визначення. 7. Застосування СКБД в економіці. 8. На які класи можливо поділити СКБД?
Література 1. Інформатика Комп'ютерна техніка Комп'ютерні технології. За редакцією буд.е.н, проф.. О.І.Пушкаря. Київ, "Академія», 2001. 450-458
Рис. 5. Главное окно базы данных в Access Основные разделы главного окна соответствуют типам объектов, которые может содержать база данных Access. Это Таблицы, Запросы, Отчеты, Макросы и Модули. Заголовок окна содержит имя файла базы данных. В данном случае он называется db1. Интерфейс работы с объектами базы данных унифицирован. По каждому из них предусмотрены стандартные режимы работы: • Создать — предназначен для создания структуры объектов; • Конструктор — предназначен для изменения структуры объектов; • Открыть (Просмотр, Запуск) — предназначен для работы с объектами базы данных. Важным средством, облегчающим работу с Access для начинающих пользователей, являются мастера — специальные программные надстройки, предназначенные для создания объектов базы данных в режиме последовательного диалога. Для опытных и продвинутых пользователей существуют возможности более гибкого управления ресурсами и возможностями объектов СУБД в режиме конструктора. Специфической особенностью СУБД Access является то, что вся информация, относящаяся к одной базе данных, хранится в едином файле. Такой файл имеет расширение *.mdb. Данное решение, как правило, удобно для непрофессиональных пользователей, поскольку обеспечивает простоту при переносе с одного рабочего места на другое. Внутренняя организация данных в рамках mdb - формата менялась от версии к версии, но фирма Microsoft поддерживала их совместимость снизу вверх, то есть базы данных из файлов в формате ранних версий Access могут быть конвертированы в формат, используемый в версиях более поздних.
Ключевые понятия - база данных; - предметная область; - ключ; - запись, поле; - модель данных; - индекс (индексная таблица); - модель данных; - SQL; - транзакция Контрольные вопросы
План Основные режимы работы с таблицами. 16 Создание таблиц. 19 1. Создание таблиц с помощью Мастера. 22 1.1. Создание схемы данных. 24 1.2. Разработка запросов к базе данных. 25 1.3. Конструирование простых экранных форм для работы с данными. 28 Основные режимы работы с таблицами В Access существует четыре режима работы с таблицами: режим Таблицы, режим Конструктора, режим Сводной таблицы и режим Сводной диаграммы. В режиме Таблицы осуществляется работа с данными, находящимися в таблице: просмотр, изменение, добавление, сортировка и т. п. В режиме Конструктора создается или модифицируется структура таблицы, т. е. задаются имена полей таблицы и их типы, определяются их свойства. В режимах Сводной таблицы и Сводной диаграммы удобно выполнять анализ данных, динамически изменяя способы их представления. Существует также дополнительный режим — режим предварительного просмотра, который позволяет увидеть расположение данных на листе перед осуществлением печати таблицы. Для быстрого перехода из одного режима в другой служит кнопка Вид на панелях инструментов Таблица в режиме таблицы, Конструктор таб лиц , Сводная таблица и Сводная диаграмма. Чтобы переключиться в нужный режим, достаточно нажать эту кнопку или щелкнуть на стрелке на этой кнопке и выбрать из выпадающего списка нужный режим. Открыть таблицу в режиме Таблицы можно несколькими способами: - дважды щелкнуть мышью на имени таблицы в списке таблиц в окне базы данных; - выделить таблицу в списке таблиц в окне базы данных и нажать кнопку Открыть в верхней части окна базы данных; - щелкнуть правой кнопкой мыши на имени таблицы и из контекстного меню выбрать команду Открыть. В любом случае на экране появится окно с содержимым таблицы, например (рис. 1)
Рис . 2.1. Таблица Клиенты, открытая в режиме Таблицы
В верхней части таблицы располагаются имена полей (ячеек, находящихся в одном столбце таблицы), ниже следуют записи (строки таблицы), в которые вносятся данные. Одна запись всегда является текущей, и рядом с ней расположен указатель текущей записи (стрелка в поле выделения в левой части окна). В нижней части окна расположены кнопки навигации, позволяющие перемещать указатель текущей записи по таблице (на первую запись, на предыдущую запись, на следующую запись, на последнюю запись). Там же находятся поле номера текущей записи, кнопка создания новой записи и указатель общего количества записей в таблице. Для создания новой записи также служит последняя строка таблицы, отмеченная в поле выделения звездочкой (на рис. 1 она не видна). Горизонтальная полоса прокрутки полей таблицы позволяет увидеть те поля таблицы, которые нe поместились в окно таблицы. Аналогично вертикальная полоса прокрутки записей таблицы позволяет увидеть записи, находящиеся за пределами окна. При открытии таблицы в верхней части окна приложения появляется стандартная панель инструментов Таблица в режиме таблицы (рис. 2). Открыть таблицу в режиме Конструктора можно следующими способами: - выделить таблицу в списке таблиц в окне базы данных и нажать кнопку Конструктор в верхней части окна базы данных; - щелкнуть правой кнопкой мыши на имени таблицы и из контекстного меню выбрать команду Конструктор . После выполнения указанных действий на экране появится окно таблицы в режиме Конструктора, а также панель инструментов Конструктор таблиц (рис. 3).
Окно таблицы в режиме Конструктора состоит из двух панелей. Верхняя панель содержит таблицу из трех столбцов: Имя поля, Тип данных и Описание. В столбце Имя поля содержатся имена полей таблицы, в столбце Тип данных указывается тип данных для каждого поля. Заполнение двух первых столбцов является обязательным. На нижней панели располагаются две вкладки, содержащие свойства полей: Об щие и Подстановка , а также область контекстной справки. Ключевое поле таблицы помечается специальным значком — ключик в поле выделения в левой части окна. Чтобы выделить поле, достаточно просто щелкнуть мышью по строке, в которой описывается данное поле. При этом в нижней части окна будут показаны параметры именно для этого поля. Перемещаться между столбцами в верхней панели окна можно с помощью клавиши <ТаЬ>, а для перемещения по списку т вверх и вниз пользуйтесь клавишами со стрелками. С помощью клавиши <F6> можно перемещаться между панелями. В верхней части окна приложения появляется стандартная панель инструментов Конструктор таблиц. Режим Сводной таблицы позволяет отображать табличные данные в более удобном и обозримом виде. Сводная таблица позволяет группировать, суммировать или каким-то образом обрабатывать данные из обычной таблицы Access. Этот режим является, с одной стороны, аналогом сводных таблиц в Excel, а с другой — развитием уже давно используемых в Access перекрестных запросов. Режим Сводной диаграммы тесно связан со сводной таблицей. Это просто графическое представление сводной таблицы. В предыдущих версиях Access диаграммы могли использоваться только в отчетах. Теперь они стали динамическими, и есть возможность создавать эти диаграммы и управлять ими в интерактивном режиме прямо на экране монитора. Однако хотя можно создать сводную таблицу для обычной таблицы Access, на наш взгляд, наиболее эффективен этот режим для запросов и форм. Таблицы Access, если они правильно спроектированы, как правило, не бывают сложными. А вот запросы и формы обычно собирают информацию из разных таблиц. И поэтому именно для анализа этих данных удобно создавать сводные таблицы и диаграммы. Создание таблиц В Access используются три способа создания таблиц: путем ввода данных, с помощью Конструктора таблиц и с помощью Мастера создания таблиц. Для каждого из этих способов существует специальный ярлык новых объектов в списке таблиц (рис. 4). Если вы создали новый файл базы данных, то кроме этих ярлыков в списке таблиц больше ничего нет. ( Замечание) Если эти ярлыки не видны, необходимо открыть окно Параметры (с помощью команды Сервис | Параметры, затем раскрыть вкладку Вид и установить флажок новые ярлыки объектов. Можно вместо ярлыка нажать кнопку Создать в окне базы данных. Тогда появится диалоговое окно Новая таблица, в котором и нужно выбрать способ создания таблицы (рис. 2.5). И наконец, на панели инструментов База данных расположена кнопка Новый объект. Если щелкнуть мышью по стрелке на этой кнопке и выбрать из списка объект Таблица, откроется то же диалоговое окно Новая таблица. Для создания новой таблицы можно воспользоваться любым из описанных способов. Обычно создание таблиц путем ввода данных используют, когда структура таблицы очень проста, например справочник. Тогда многие свойства полей устанавливаются по умолчанию. Потом можно переключить таблицу в режим Конструктора и посмотреть, как эти свойства будут установлены. Использование Мастера таблиц, если нужно создать какую-то типовую таблицу, тогда можно воспользоваться шаблонами, которые он предложит. Наиболее часто применяется режим Конструктора. Он используется не только для просмотра структуры таблицы, но и для ее изменения. Рис. 6. Создание описания структуры таблицы Бумаги Обратим внимание на тип Счетчик, присвоенный полю КодБум (код бумаги). Он означает, что СУБД будет самостоятельно помещать в это поле некоторое числовое значение для каждой вновь создаваемой записи таблицы, обеспечивая таким образом его уникальность. Выбор типа данных в Access одновременно определяет набор дополнительных атрибутов соответствующего поля. В частности, поле ДатаЭм (дата эмиссии) имеет тип Дата и, как это показано на рис. 6, может иметь дополнительные атрибуты: • формат поля, определяющий условия вывода данных из этого поля (по умолчанию); • маска ввода, определяющая условия ввода данных в поле; • подпись — содержит расширенный заголовок; • значение по умолчанию — позволяет указать значение, автоматически присваиваемое полю при создании новой записи. В нашем случае по умолчанию будет задаваться текущая дата, возвращаемая встроенной функцией Date(); • условие на значение — определяет требования к данным, вводимым в поле. Например, для выполнения требования, чтобы дата эмиссии предшествовала текущей, следует задать выражение <=Date(); • сообщение об ошибке — определяет текст сообщения, которое будет выводиться в случае нарушения заданного выше условия; • обязательное поле — указывает, требует или нет поле обязательного ввода значения; • индексированное поле - определяет индекс, создаваемый по данному полю. Индекс ускоряет выполнение запросов, в которых используются индексированные поля, и операции сортировки и группировки. Основываясь на опыте проектирования различных баз, необходимо заметить, что не следует пренебрегать возможностями управления данными, которые открывают дополнительные атрибуты полей. Их грамотное и продуманное использование позволяет организовать централизованный и эффективный контроль над корректностью и целостностью данных. На завершающем этапе процесса проектирования структуры таблицы происходит задание ключей и индексов. В первом случае достаточно выделить строки, которые должны составить ключевое выражение, и щелкнуть мышью по пиктограмме Ключ на панели инструментов (рис. 7). В таблице Бумаги роль уникального ключевого идентификатора выполняет поле КодБум. Рис. 7. Панель инструментов конструктора таблиц Также при создании таблицы имеет смысл заранее продумать возможные упорядочения, которые могут понадобиться при работе с содержащимися в ней данными. Задание индексов с соответствующими ключевыми выражениями может в дальнейшем существенно ускорить процесс работы (особенно с большими массивами данных). В частности, при работе с данными из таблицы Бумаги весьма вероятно, что нам придется выводить их в алфавитном порядке по названиям, а также отсортированными в порядке убывания дат. Процесс задания соответствующих индексов показан на рис. 8 Рис. 8. Создание индексов для таблицы
Рис. 9. Задание списка подстановки для поля Эффективным методом решения задач контроля корректности входных данных является ограничение множества допустимых значений поля некоторым списком. Рассмотрим это более подробно на примере поля Тип Бум (тип бумаги), которая, допустим, в рассматриваемой торговой системе может быть либо акцией, либо облигацией. Нетрудно заметить, что будет разумным присвоить типу Акция код 1, а типу Облигация — код 2. Это позволит существенно сэкономить место за счет уменьшения объема хранимой информации (особенно при большом количестве записей). Однако с точки зрения восприятия вводимой информации пользователем гораздо удобнее иметь дело с осмысленным текстом, чем запоминать, какие коды ему соответствуют. Средством решения этой проблемы в Access является задание подстановочного списка значений для поля. Для этого следует выбрать вкладку Подстановка в окне Свойства поля, далее для свойства Тип элемента управления задать значение Список. На рис. 9 показано, как описать другие свойства элемента управления Список, чтобы организовать заполнение поля Тип Бум требуемыми значениями. После создания описания структуры таблицы можно перейти в режим непосредственного ввода в нее данных. Как уже говорилось, важным преимуществом интерфейса СУБД Access является продуманная гибкая система перехода от режима Конструктора к режиму ввода данных в таблицу (Режим таблицы). Такой переход можно осуществить, щелкнув мышью по пиктограмме Вид, расположенной на панели инструментов, либо выбрав функцию меню Вид > Режим таблицы. На рис. 10 показано окно режима непосредственного ввода данных в таблицу Бумаги. Рис. 10. Ввод данных в таблицу Бумаги Обратим внимание на то, что выбор типа бумаги осуществляется из заранее предопределенного списка который был сформирован в окне рис. 9. Создание схемы данных Очевидно, что те действия, которые были подробно описаны для таблицы Бумаги, следует проделать и для остальных информационных массивов: Агенты, Портфели, Заявки. В результате мы получим систему таблиц базы данных . Подчеркнем, именно систему, так как находящиеся в них данные тесно и содержательно связаны между собой. Действительно, данные, находящиеся в поле Кодагента таблицы Портфели, должны быть согласованы по типу и размеру с данными, находящимися в одноименном поле таблицы Бумаги. Более того, логика рассматриваемой задачи требует, чтобы, работая с информацией, относящейся к портфелю, мы могли одновременно обратиться к данным, характеризующим текущего агента, и т. д. Механизм описания логических связей между таблицами в Access реализован в виде объекта, называемого Схемой данных. Перейти к ее созданию можно из панели инструментов База данных, доступной из главного окна. Альтернативный вариант вызова данного режима доступен через меню Сервис > Схема данных. Вид, который будет иметь схема данных для построенных на предыдущих шагах таблиц, представлен на рис. 11. Рис.11. Создание схемы данных Интерфейс задания связей между полями в схеме основан на «перетаскивании» (перемещении при нажатой левой кнопки мыши) выбранного поля и «наложении» его на то поле, с которым должна быть установлена связь. Для связывания сразу нескольких полей их следует перемещать при нажатой клавише Ctrl. Выделяют несколько типов связей между таблицами в схеме. «Один к одному» (1:1) — одному значению поля в одной таблице соответствует только одно значение поля в другой. «Один ко многим» (1:°°) — одному значению поля в одной таблице соответствует несколько (одно или более) значений в другой. Важнейшей задачей, которую позволяет решать схема, является обеспечение ло гической целостности данных в базе. Так, в базе данных TradeTest нарушение целостности может возникнуть в случае удаления из таблицы Бумаги записей по тем бумагам, о которых существуют записи в таблицах Портфели или Заявки, в результате чего в их составе окажутся ссылки на «потерянные» коды. Очевидно, что это можно предотвратить, если каскадно удалить как записи из таблицы Бумаги, так и записи из связанных с ней таблиц. Такой эффект в Access может быть достигнут за счет задания определенных свойств для связи. Чтобы это сделать, необходимо щелкнуть кнопкой мыши, находясь на линии схемы, обозначающей связь. После этого появляется диалоговое окно, предназначенное для изменения свойств связи. Как видно из рис. 12, в рамках режима обеспечения целостности данных можно по выбранной связи задать как каскадное обновление значений для связанных полей, так и каскадное удаление связанных записей. Рис. 12. Задание свойств связи Работа с объектами
| 'Копирование | КопироватьОбъект (CopyObject) | |||||||||||||||
КопироватьФайлБазыДанных (CopyDatabaseFile) | |||||||||||||||||
переименование | Переименовать (Rename) | ||||||||||||||||
сохранение объекта | Сохранить (Save) | ||||||||||||||||
'Удаление объекта | УдалитьОбъект (DeleteObject) | ||||||||||||||||
'Изменение размеров или положения окна | Развернуть (Maximize) | ||||||||||||||||
Свернуть (Minimize) | |||||||||||||||||
СдвигРазмер (MoveSize) | |||||||||||||||||
Восстановить (Restore) | |||||||||||||||||
Открытие и закрытие объекта | ОткрытьФорму (OpenForm) | ||||||||||||||||
ОткрытьФункцию (OpenFunction) | |||||||||||||||||
ОткрытьМодуль (Open Module) | |||||||||||||||||
ОткрытьЗапрос (OpenQuery) | |||||||||||||||||
ОткрытьОтчет (OpenReport) | |||||||||||||||||
ОткрытьТаблицу (OpenTable) | |||||||||||||||||
ОткрытьСтраницуДоступаКЦанным(OpenDataAccessPage) | |||||||||||||||||
ОткрытьСхему (OpenDiagram) | |||||||||||||||||
ОткрытьСохраненнуюПроцедуру(OpenStoreProcedure) | |||||||||||||||||
ОткрытьПредставление (OpenView) | |||||||||||||||||
Закрыть (Close) | |||||||||||||||||
Печать объекта | Печать (Printout) | ||||||||||||||||
Выделение объекта | ВьlелитьОбъект (SelectObject) | ||||||||||||||||
Задание значения поля элемента управления или свойства | ЗадатьЗначение (SetValue) | ||||||||||||||||
Обновление объекта | ОбновитьОСъект (RepaintObject) | ||||||||||||||||
Прочие | Создание специальной или общей строки меню, специального или глобального контекстного меню | ДобавитьМеню (AddMenu) | |||||||||||||||
Задание состояния пунктов меню в специальной или общей строке меню | ЗадатьКомандуМеню (SetMenultem) | ||||||||||||||||
Вывод информации на экран | ВьводНаЭкран (Echo) | ||||||||||||||||
ПесочныеЧасы (Hourglass) | |||||||||||||||||
Сообщение (MsgBox) | |||||||||||||||||
УстанозитьСообшения (SetWarnings) | |||||||||||||||||
iГенерация нажатий клавиш | КомандыКлавиатуры (SendKeys) | ||||||||||||||||
'Вывод на экран или скрытие встроенной или специальной панели инстру-ментов | ПанельИнструментов (ShowToolbar) | ||||||||||||||||
Подача звукового сигнала | Сигнал (Веер) |
Как видно из этой таблицы, действия, которые могут быть выполнены с помощью макросов, очень разнообразны. Эти макрокоманды можно использовать и в процедурах VBA.
Использование макросов оправдано тем, что их легко создавать, и для этого не нужно изучать синтаксис языка программирования. Для создания макроса требуется знать лишь основные приемы работы в Microsoft Access и Windows, такие как перетаскивание объектов из окна База дан ных (Database) в специальное окно — Конструктор макросов (Macro Design), выбор действия из списка и ввод выражений в качестве аргументов макрокоманды.
Как уже говорилось ранее, основное назначение макросов — это создание удобного интерфейса приложения: чтобы формы и отчеты открывались при нажатии кнопок в форме или на панели инструментов или же привычным выбором команды меню; чтобы при открытии приложения пользователь видел на экране не окно База данных (Database), наполненное множеством таблиц, запросов, форм и отчетов, а некую понятную форму, с помощью которой можно было бы сразу производить желаемые действия, и т. д.
С помощью макросов можно создать удобные меню и панели инструментов для приложения.
Но использование макросов имеет и некоторые недостатки, о которых здесь уместно сказать.
- Возможности макрокоманд ограничены по сравнению с возможностями языка VBA, поэтому в ряде случаев без программирования на VBA не обойтись, хотя сначала нужно быть уверенным, что эти дополнительные возможности действительно нужны. Язык VBA предоставляет более широкие возможности для работы с данными, позволяет использовать механизм программирования объектов для связи с другими приложениями, вызывать функции из динамически связываемых библиотек (Dynamic Link Library, DLL) Windows и создавать собственные специализированные функции.
- Макросы можно использовать практически везде, где используются процедуры VBA, однако процедуры VBA, как правило, выполняются быстрее.
- Макросы являются объектами, существующими отдельно от форм и отчетов, в которых они используются, поэтому, когда этих объектов становится очень много, их поддержка достаточно трудоемка. Процедуры обработки событий VBA, используемые в формах и отчетах, являются неотъемлемой частью этих форм и отчетов, и в этом есть свои преимущества. Например, при переносе форм и отчетов из одной базы данных в другую с ними автоматически переносятся связанные процедуры.
Тем не менее, как уже отмечалось, во многих случаях использование макросов вполне оправдано, т. к. это существенно упрощает и ускоряет разработку приложения. С помощью макросов можно создавать небольшие однопользовательские приложения, хотя при создании многопользовательских или клиент-серверных приложений, где скорость работы приложения критична, лучше применять VBA.
Создание макросов
В Access существует специальное средство для создания макросов — Конструктор макросов (Macro Design). Рассмотрим процесс создания макроса с его помощью.
Конструктор макросов
Открыть окно Конструктор макросов (Macro Design) для создания нового макроса можно разными способами:
1. Раскройте список макросов в окне База данных (Database), щелкнув левой кнопкой мыши по ярлыку Макросы (Macros), и нажмите кнопку Создать (New) в верхней части окна.
2. Шелкните по стрелке на кнопке Новый объект (New Object) панели инструментов База данных (Database) и выберите элемент Макрос (Macro).
3. Выполните команду меню Вставка | Макрос (Insert | Macros)
Окно Конструктора построено аналогично Конструктору таблиц, т. е. разделено по горизонтали на две части: панель описаний и панель аргументов.
Верхняя часть окна Конструктора — панель описаний — состоит из нескольких столбцов. По умолчанию на этой панели выводится два столбца: Макрокоманда (Action) и Примечание (Comments). Панель описаний позволяет определить последовательность макрокоманд, из которых состоит макрос.
Строка в столбце Макрокоманда (Action) представляет собой поле со списком, в котором можно выбрать нужную макрокоманду.
Строка в столбце Примечание (Comments) — это обычное текстовое поле, в которое можно ввести комментарий, описывающий выполняемое действие.
Когда поле Макрокоманда (Action) заполнено, в нижней части окна Конструктора макроса появляется панель аргументов, предназначенная для ввода значений аргументов соответствующей макрокоманды. Список полей на этой панели зависит от выбранной макрокоманды и может отсутствовать, если макрокоманда не имеет аргументов. Таким образом, при создании макросов не нужно запоминать список аргументов для каждой макрокоманды.
Панель инструментов Конструктор макросов представлена на рис. 1, а в табл. 2 приведены описания ее кнопок.
Рис . 1. Панель инструментов Конструктор макросов
Таблица 2. Панель инструментов Конструктор макросов
Кнопка | Описание | Команда меню |
Имена макросов (Macro Name) | Позволяет отобразить или скрыть столбец с именами макросов в группе | Вид | Имена макросов (View | Macro Name) |
Условия (Conditions) | Позволяет отобразить или скрыть столбец с условиями выполнения макрокоманд | Вид | Условия (View | Conditions) |
Добавить строки (Insert Rows) | Добавляет строку в макрос | Вставка | Строки (Insert I Rows) |
Удалить строки (Delete Rows) | Удаляет строку в последовательности макрокоманд | Правка | Удалить строки (Edit | Delete Rows) |
Запуск (Run) | Запускает макрос на выполнение | Запуск I Запуск (Run | Run) |
По шагам (Step) | Включает режим пошагового выполнения макроса | Запуск | По шагам ( Run | Step) |
На рис. 2 проиллюстрирован выбор макрокоманды применитьФильтр (ApplyFilter). На панели аргументов имеются два поля, которые позволяют задать имя фильтра и условие отбора записей. Для того чтобы задать условие отбора записей, можно воспользоваться построителем выражений
Такой макрос можно использовать в форме или отчете для того, чтобы ограничить число отображаемых записей.
Совет
Для быстрого переключения между панелями описаний и аргументов , так же как при работе с таблицами и запросами в режиме Конструктора , можно использовать кла вишу < F 6>.
Существует еще один очень простой способ ввода макрокоманды. Допустим, нужно создать макрос, который должен открывать форму клиенты (Customers) в приложении Борей (Northwind). Для этого в окне База данных (Database) необходимо щелкнуть по ярлыку Формы (Forms), затем, используя панель инструментов, открыть Конструктор макросов (Macro Design) и перетащить с помощью мыши форму Клиен Клиенты (Customers) в поле Макрокоманда (Action) окна Конструктора макросов.
Рис. 2. Окно Конструктора макросов
Совет
Для удобства перетаскивания объектов из окна База данных ( Database ) в форму выберите команду Окно | Слева направо ( Window | Tile Vertically ), чтобы располо жить окна на экране рядом
Тогда в поле Макрокоманда (Action) автоматически появится макрокоманда от-крытьФорму (OpenForm) (рис. 3), а на панели аргументов автоматически заполнятся поля: в поле Имя формы (Form Name) появится имя формы клиенты (Customers), в поле Режим (View) — значение по умолчанию Форма (Form), в поле Режим окна (Window Mode) — значение Обычное (Normal). Остальные поля останутся пустыми. Мы можем в этой же макрокоманде задать фильтр для отбора записей, Для этого введем в поле Имя фильтра (Filter Name) имя какого-нибудь фильтра, например Менеджеры по продажам, который можно было построить как запрос.
Кроме того, можно сделать записи в этой форме недоступными для изменений, для чего в поле Режим данных (Data Mode) необходимо ввести значение Только чтение (Read Only).
Рис. 3. Автоматическое создание макрокоманд путем перетаскивания объектов
Аналогично можно создавать макрокоманды, перетаскивая из окна База данных (Database) таблицы, запросы, отчеты и другие макросы. При этом в окне Конструктора макросов будут появляться соответствующие макрокоманды: ОткрытьТаблицу (ОреnТаblе), ОткрытьЗапрос (OpenQuery), ОткрытьОтчет (OpenReport), ЗапускМакроса (RunMacro).
Для ввода аргументов макрокоманды чаще всего требуется выбирать значения из списков или вводить выражения. Для ввода выражений можно воспользоваться Построителем выражений, кнопка которого находится справа от поля аргумента. Еще одна кнопка Построителя выражений располагается на панели инструментов. Как и в других случаях, перед выражением нужно ставить знак равенства (=). Исключения составляют аргумент Выражение (Expression) макрокоманды задатьЗначение (SetValue) и аргумент Число повторений (Repeat Count) макрокоманды ЗапускМакроса (RunMacro). Если ввести знак равенства перед выражением, задающим значение этих аргументов, то оно будет вычисляться дважды, что может привести к нежелательным результатам.
Если в качестве аргумента макрокоманды необходимо задать имя объекта базы данных, то его можно либо ввести с помощью клавиатуры, либо выбрать из раскрывающегося списка, либо указать название объекта, перетащив его из окна базы данных.
Итак, созданная нами макрокоманда будет открывать форму Клиенты (Customers) в режиме Только чтение (Read Only) и показывать в ней только менеджеров по продажам. Как уже было сказано ранее, макрос может содержать последовательность из нескольких макрокоманд. Поэтому в этом же макросе в следующей строке мы выберем макрокоманду сообщение (MsgBox), которая после открытия формы будет отображать диалоговое окно с сообщением о том, какие клиенты представлены в форме. Для этого введем в поле Сообщение (Message) на панели аргументов текст сообщения, например Установлен фильтр Менеджеры по продажам, остальные поля можем оставить без изменения. Аргумент Сигнал (Веер) определяет, будет ли вывод сообщения сопровождаться звуковым сигналом. Аргумент Тип (Туре) определяет вид диалогового окна сообщения. Аргумент Заголовок (Title) позволяет задать текст, который будет выведен в заголовке окна сообщения.
Если база данных большая, отбор записей в форме может занять некоторое время, поэтому рекомендуется вывести на экран курсор в форме песочных часов, который будет показывать, что идет обработка данных. Для того чтобы сделать это, воспользуемся макрокомандой ПесочныеЧасы (Hourglass). Макрокоманды в макросе выполняются в той последовательности, в которой они записаны в столбце Макрокоманда (Action), т. е. сверху вниз. Макрокоманду ПесочныеЧасы (Hourglass) следует поставить первой, т. к. курсор должен измениться перед выводом формы. Таким образом, нам нужно вставить новую строку на панели описаний. Для этого установим курсор в первую строку панели и нажмем кнопку Добавить строки (Insert Rows) на панели инструментов или просто клавишу <Insert>. Появится пустая строка. В этой строке в поле Макрокоманда (Action) выберем макрокоманду ПесочныеЧасы (Hourglass). В поле Включить (Hourglass On) панели аргументов появится значение Да (Yes), установленное по умолчанию, что нам и нужно. Чтобы вернуть первоначальный вид указателю мыши, в конце созданного макроса нужно ввести такую же макрокоманду ПесочныеЧасы (Hourglass), но со значением Нет (No) аргумента Включить (Hourglass On).
Строго говоря, эту макрокоманду лучше поставить перед макрокомандой вывода сообщения на экран. Сделать это элементарно, поскольку макрокоманды легко меняются местами с помощью мыши. Чтобы поменять две последние макрокоманды местами, выделите последнюю строку, щелкнув левой кнопкой мыши по области выделения строк (слева в окне конструктора) и перетащите строку вверх. Горизонтальная линия показывает место нового положения строки. Отпустите кнопку мыши, когда эта линия окажется над предпоследней строкой.
Теперь остается только сохранить созданный макрос. Для этого можно выбрать в меню Файл (File) команду Сохранить как (Save As) или нажать клавишу <F12>. Появится окно сохранения макроса. Занесите в поле ввода имя макроса, соблюдая правила именования объектов Access, например Менеджеры по продажам.
Замечание
В Microsoft Word и Excel имеются средства автоматической записи макросов . Эти средства очень удобны для изучения VBA , поскольку позволяют автоматически создать процедуру , включив запись макроса , выполнив необходимые действия и оста новив запись . Тогда все действия пользователя , выполняемые после включения записи и до ее остановки , преобразуются в текст процедуры VBA . Затем этот текст можно просмотреть и отредактировать с помощью редактора VBA . В Microsoft Access средств автоматической записи макросов нет , так же как нет и средств автоматической генерации кода VBA ( за исключением того , что создают Мастера ).
Создание групп макросов
При разработке приложения с использованием макросов их количество может оказаться очень большим. Поэтому важно хорошо организовать доступ к нужным макросам. Для этого в одном объекте Макрос (Macro) можно объединить несколько макросов. Например, рекомендуется все макросы, связанные с событиями в форме или отчете, объединить в отдельный объект, соответствующий данной форме или отчету. Для того чтобы можно было это сделать, каждый макрос группы должен иметь свое имя, а имя объекта Макрос (Macro) будет являться именем группы макросов.
Чтобы создать группу макросов, выполните следующее:
1. Откройте Конструктор макросов одним из способов.
2. Нажмите кнопку Имена макросов (Macro Name) на панели инструментов. На панели описаний в окне Конструктора появится еще один столбец — Имя макроса (Macro Name) (рис. 4).
3. В этот столбец введите имя первого макроса. Остальные поля данной строки лучше оставить пустыми — это облегчит перемещение и копирование макрокоманд.
4. Начиная со следующей строки, введите все макрокоманды макроса и соответствующие аргументы для каждой макрокоманды.
5. Пропустите одну строку.
6. Повторите шаги 3—5 для каждого макроса.
Рис. 12.4. Создание группы макросов
На рис. 4 в окне Конструктора представлен макрос клиенты (Customers) базы данных Борей (Northwind). Для указания конца макроса не требуется отдельной макрокоманды. Access продолжает выполнение макроса, входящего в группу, пока не обнаружит строку, содержащую имя в столбце Имя макроса (Macro Name), либо пока не дойдет до последней строки окна макросов.
При обработке макроса пустые строки игнорируются, поэтому их удобно использовать для разделения макросов в группе. Этот прием, а также ввод комментариев для сложных макросов, состоящих из большого числа макрокоманд, позволяет улучшить читаемость макросов.
Для запуска одного из макросов группы используется полное имя макроса, которое формируется таким образом: имяГруппы.имяМакроса.
Замечание
Можно настроить систему так , чтобы столбец Имя макроса ( Macro Name ) выводился всегда в Конструкторе макросов . Для этого необходимо установить соответст вующие параметры на вкладке Вид ( View ) в диалоговом окне Параметры ( Options ).
Назначение макроса событию
Наиболее часто макросы используются в приложении Access для обработки событий. Событие — это любое действие, распознаваемое объектом. Можно определить реакцию объекта на событие. События происходят в результате действий пользователя, выполнения инструкций VBA или генерируются системой. Примером событий является вывод на экран формы, отчета, ввод данных в текстовое поле, нажатие кнопки мыши или клавиши. Каждому из этих событий можно назначить макрос или процедуру VBA, которые будут автоматически выполняться в ответ на произошедшее событие. Практически все программирование в Access сводится к написанию макросов или процедур, обрабатывающих события, т. е. программируется реакция объектов на события. Существует большое количество различного рода событий, на которые реагируют объекты, причем часто возникает не одно, а целая последовательность событий.
ВО Первых. Откроем форму Клиенты (Customers) в базе данных Борей. В этой форме отображается информация о клиенте. Допустим, мы хотели бы видеть не только эту информацию, но и данные о купленных клиентом продуктах. Было бы хорошо создать кнопку Заказы клиента, при нажатии которой появлялась бы форма Заказы (Orders) с заказами только того клиента, который в данный момент выбран в форме клиенты (Customers). Для того чтобы получить желаемое, создадим макрос, который будет выполняться, когда произойдет событие Нажатие кнопки (On Click) в форме Клиенты (Customers).
Чтобы создать макрос, определяющий описанную реакцию приложения на событие Нажатие кнопки (OnClick), выполните следующее:
1. Откройте форму клиенты (Customers) в режиме Конструктора.
2. Создайте кнопку в области заголовка формы. При этом кнопка Мастера на пане
ли элементов должна быть отжата, т. к. в противном случае вам будет предложе
но создать процедуру обработки событий, а не макрос.
3. Откройте окно свойств только что созданной кнопки, если оно еще не открыто,
и раскройте вкладку События (Event).
4. Обратите внимание, сколько разных событий связано только с командной кнопкой. Помимо обычного нажатия, которое мы сейчас и будем использовать, в набор событий кнопки входят получение и потеря фокуса, двойной щелчок кнопкой мыши, простое перемещение указателя мыши над кнопкой и пр. Такое многообразие событий дает разработчику большие возможности по созданию удобного интерфейса пользователя. Теперь найдите в списке событие Нажатие кнопки (On Click) и установите курсор в соответствующую ячейку. Это поле со списком, и в данный момент оно пустое. Если открыть этот список, то первым его элементом будет [Процедура обработки событий] ([Event procedure]), а далее идет перечень всех макросов, существующих в приложении (рис. 11).
Рис. 11. Диалоговое окно свойств кнопки
5. Поскольку нужного нам макроса в списке нет, давайте его создадим. Для этого нажмите кнопку Построителя, находящуюся справа от поля. Появится окно По строитель (Choose Builder), в котором предлагается выбрать один из трех Построителей: Выражения (Expression Builder), Макросы (Macro Builder) и Програм мы (Code Builder) (рис. 12).
Рис. 12. Диалоговое окно Построитель
6. Выберите Макросы (Macro Builder) и нажмите кнопку ОК. Откроется окно мак
росов и диалоговое окно, в которое нужно ввести имя создаваемого макроса.
Введите имя Заказы клиента.
В макрос нужно добавить единственную макрокоманду ОткрытьФорму (OpenForm).
Значения аргументов этой макрокоманды приведены в табл. 4.
Таблица 4. Макрокоманда ОткрытьФорму
Аргумент | Значение | Пояснение |
Имя формы (Form Name) | Заказы (Orders) | Указывается имя открываемой формы. Это обязательный аргумент |
Режим (View) | Форма (Form) | Определяет режим, в котором форма должна быть открыта. Он может принимать значения: Форма (Form), Конструктор (Design), Просмотр (Print Preview), Таблица (Datasheet), Сводная таблица (PivotTable) и Сводная Диаграмма(PivotChart) |
отбора Условие (Condition) | [КодКлиента]= [Forms]![Клиенты]![КодКлиента] | Определяет условие для отбора записей, отображаемых в фор ме. Условие представляет собой выражение. В данном случае это выражение содержит ссылку на элемент управления КодКлиента (CustomerlD) в фор ме Клиенты (Customers), что позволяет выбрать все записи из таблицы Заказы (Orders),в которых код клиента равняется значению, заданному в поле КодКлиента (CustomerlD) формы Клиенты (Customers) |
Режим данных (Data Mode) | Только чтение (Rea d Only) | Определяет способ работы с данными и может принимать одно из значений: Добавление(Add), Изменение (Edit) или Только чтение (Read Only) |
Режим окна (Window Mode) | Обычное (Normal) | определяет тип окна: Обычное(Normal), Невидимое (Hidden), Значок (Icon) и Окно диалога(Dialog) |
8. Закройте окно макроса, сохранив изменения. В окне свойств кнопки в поле Нажатие кнопки (On Click) появится имя макроса Заказы клиента.
9. Раскройте вкладку Макет (Format) и введите в поле Подпись (Caption) название кнопки: Заказы клиента. То же самое имя рекомендуется ввести в поле Имя (Name) на вкладке Другие (Other).
Теперь остается перейти в режим формы и проверить, как макрос отрабатывает событие Нажатие кнопки (On Click). Если вы нигде не ошиблись, то должны увидеть на экране картинку, похожую на ту, что изображена на рис. 13.
Рис. 13. Форма Заказы
Однако мы выполнили еще не все необходимые действия. Если перейти к следующей записи в форме Клиенты (Customers), данные в форме Заказы (Orders) уже не будут правильно отражать ситуацию — они не меняются. Нужно сделать так, чтобы эти данные изменялись синхронно с переходом к другим записям в форме Клиенты (Customers), либо чтобы это окно просто закрывалось.
Рассмотрим реализацию второго варианта. Форма Заказы (Orders) открывается, когда мы нажимаем кнопку Заказы клиента, и становится активной. Требуется сделать так, чтобы она закрывалась, когда активной становится форма клиенты (Customers). Для этого нужно выбрать соответствующее событие и задать процедуру или макрос его обработки. Если вы откроете окно Свойства (Properties) формы Клиенты (Customers) и раскроете вкладку События (Event), то среди множества событий увидите событие Включение (On Activate). Это как раз то событие, которое нам нужно. Выберем это событие, но теперь мы не будем создавать новую группу макросов, а добавим новый макрос в группу макросов Клиенты (Customers), которая уже содержит макросы для формы Клиенты (Customers). Выберите эту группу макросов в раскрывающемся списке и нажмите кнопку Построителя. Откроется окно, в котором отобразятся два макроса. Добавим к ним еще один макрос. Назовем его Закрытие и введем макрокоманду Закрыть (Close) с соответствующими параметрами (табл. 5). Но перед закрытием формы необходимо проверить, открыта ли она. Для этого воспользуемся функцией isLoaded(), которая возвращает значение Истина, если форма открыта, и Ложь —в противном случае. В качестве аргумента в функцию isLoaded() нужно передать имя формы. Итак, в столбец Условие (Condition), напротив команды закрыть (Close), введите IsLoaded( "Заказы") (или IsLoaded ("Orders")). Готовый макрос показан на рис. 14.
Таблица 5. Макрокоманда закрыть
Аргумент | Значение | Пояснение |
Тип объекта (Object Type) | Форма (Forms) | Определяет тип закрываемого объекта. Если этот аргумент не задан, то закрывается текущее окно |
Имя объекта (Object Name) | Заказы (Orders) | Определяет имя закрываемого объекта |
Сохранение (Save) | Нет (No) | Позволяет определить, будет ли Access при закрытии формы отображать диалоговое окно для подтверждения сохранения измененных данных. Поскольку мы открывали форму Заказы (Orders) в режиме только чтение, изменение данных запрещено, поэтому данному аргументу необходимо присвоить значение Нет (No) |
Рис . 14. Макрос для закрытия формы
Закройте окно макроса, сохранив изменения. Измените имя макроса, назначенного событию Включение (On Activate). Для этого выберите в списке или введите имя Клиенты.Закрыть (Customers.Close) и нажмите клавишу <Enter>. Теперь сохраните форму, перейдите в режим формы и проверьте, как работают созданные макросы.
Замечание
Название семейства форм при написании ссылки мы используем английское — Forms ( оно же используется в языке VBA ) Построитель выражения создает ссылку с русским названием — Формы И тот и другой вариант можно употреблять .
Перемещение по данным
Эта группа макрокоманд связана с перемещением по записям и элементам упраапения. В качестве примера использования макрокоманд этой группы рассмотрим ситуацию, когда пользователь работает с формой клиенты (Customers) и хочет найти заказ текущего клиента, номер которого ему известен. Во-первых, создали в форме Клиенты (Customers) кнопку Заказы клиента для отображения заказов выбранного клиента. Попробуем усовершенствовать эти формы. Если номер заказа известен пользователю, он может ввести его в текстовое поле Поиск заказа, которое можно добавить в форму Клиенты (Customers). Тогда в открываемой форме Заказы (Orders) следует сразу показать запись, содержащую соответствующий счет. Добавим поле Поиск заказа в заголовок формы и сделаем так, чтобы при открытии формы Заказы (Orders) проверялось значение этого поля и, если оно не пустое, производился бы поиск счета с указанным номером и выполнялся переход на соответствующую запись. В противном случае текущей становилась бы первая запись из отфильтрованного набора записей. На рис. 18 показана форма клиенты (Customers) с новым полем и макрос поиск заказа, который связан с событием Загрузка (On Load) формы Заказы (Orders).
Рис. 18. Пример макроса для перемещения по данным
Поскольку добавленный макрос обработки события ссылается на элемент yпрaвлeния в форме Клиенты (Customers), он должен выполняться только в том случае, если эта форма открыта, и, кроме того, поиск должен производиться только тогда, когда поле поиск заказа не пусто. Исходя из этого, формируются условия макроса. Прежде чем производить поиск записи по образцу в одном из полей, необходимо активизировать это поле, для чего используется макрокоманда КЭлементуУправления (GoToControl). С ее помощью устанавливается фокус на поле КодЗаказа (Orderld).
Но это поле в форме Заказы (Orders) недоступно, поэтому сначала нужно изменить значение свойства Доступ (Enabled) данного поля. В противном случае выполнение макрокоманды КэлементуУправления (GoToControl) приведет к возникновению ошибки.
Макрокоманда КэлементуУправления (GoToControl) используется, как правило, если требуется изменить стандартный порядок перехода между полями в форме. Обычно переход между полями выполняется с помощью клавиши <ТаЬ>, однако иногда требуется пропустить ряд полей и переместить фокус к определенному элементу управления. Это может зависеть от каких-либо условий, например от значения поля. В таком случае на событие После обновления (After Update) для данного поля назначается макрос, который перемещает фокус на нужный элемент управления в форме. В качестве аргумента для макрокоманды необходимо указать короткое имя элемента управления. В случае излишне длинного имени переход к элементу управления не произойдет и отобразится сообщение об ошибке.
Работа с объектами
Это наиболее обширная категория макрокоманд.
Рассмотрим сначала, как используется макрокоманда ЗадатьЗначение (SetValue), которая позволяет устанавливать значения свойств элементов управления в формах и отчетах. Мы уже использовали эту макрокоманду в предыдущих примерах.
Установка свойств элементов управления позволяет динамически, в зависимости от условий, делать эти элементы недоступными или невидимыми. Приведем несколько примеров.
Существуют макрокоманды для открытия и закрытия объектов Access: ОткрытьФорму (OpenForm), ОткрытьЗапрос (OpenQuery), ОткрытьОтчет (OpenReport) и т. д. Для открытия объекта каждого типа применяется отдельная макрокоманда, а для закрытия объекта используется общая для объектов всех типов макрокоманда закрыть (Close). Тип объекта, к которому следует применить эту макрокоманду, указывается в качестве одного из ее аргументов. В предыдущих примерах уже использовались макрокоманды ОткрктьФорму (OpenForm) и Закрыть (Close) для активного объекта.
Макрокоманда ОткрытьЗапрос (OpenQuery) позволяет выполнить любой тип запроса, в том числе запрос на изменение данных. Если в качестве аргумента этой макрокоманды задается имя запроса на выборку или перекрестного запроса, то результатом выполнения макрокоманды будет вывод на экран выбранных записей. Если же аргумент — имя запроса на изменение данных, то макрокоманда выполнит запрос, изменяя соответствующим образом данные в таблицах.
При выполнении запроса, изменяющего данные, на экране будут отображаться предупреждающие сообщения. Чтобы отключить вывод этих сообщений, используйте макрокоманду УстановитьСообщения (SetWarnings) со значением аргумента Нет (No). Только не забудьте после выполнения запроса снова включить вывод системных сообщений, применив ту же макрокоманду, но с аргументом Да (Yes). Иначе в Access не будут отображаться никакие системные сообщения, что может привести к выполнению нежелательных действий в приложении.
Макрокоманда ОткрытьПредставление (OpenView) аналогична макрокоманде ОткрытьЗапрос (OpenQuery), только применяется она в проектах Access и предназначена для работы с данными, хранящимися на сервере.
Макрокоманда ОткрытьСохраненнуюПроцелуру (OpenStoreProcedure) позволяет выполнить или открыть в режиме редактирования хранимую процедуру сервера.
В данном разделе описаны далеко не все макрокоманды. Для получения полной информации используйте справочную систему. Информацию о макросах и макрокомандах вы найдете в разделе Программная поддержка (Programmability) оглавления Справки Access (Access Help).
Преобразование макросов в процедуры VBA
Если вы создали много макросов, а потом решили перейти к программированию на VBA, не беспокойтесь о том, что придется заново переписывать на VBA все созданные макросы. В Access существует возможность автоматического преобразования макросов в процедуры VBA. Это касается как макросов, связанных с событиями в формах и отчетах, которые преобразуются в процедуры обработки событий, так и общих макросов, не связанных с формами и отчетами. Все они преобразуются в отдельные стандартные модули.
Давайте попробуем преобразовать в процедуры обработки событий макросы, назначенные событиям формы наклейки для клиентов (Customers Labels Dialog):
1. Откройте форму Наклейки для клиентов (Customers Labels Dialog) в режиме Конструктора.
2. Выберите команду Сервис | Макрос | Преобразовать макросы формы (Tools | Macro | Convert form's Macros to Visual Basic).
3. В диалоговом окне Преобразование макросов формы (Convert form macros) (рис. 20) нажмите кнопку Преобразовать (Convert), оставив флажки установленными по умолчанию.
Рис. 20. Преобразование макроса в процедуру VBA
4. Когда преобразование закончится, в форме Наклейки для клиентов (Customers Labels Dialog) щелкните правой кнопкой мыши, например по кнопке Отменить, и выберите команду Свойства (Properties).
5. В диалоговом окне Свойства (Properties) раскройте вкладку События (Events).
6. В поле для события Нажатие кнопки (On Click) оказалось установленным значение [Процедура обработки событий] ([Event Procedure]). Щелкните по кнопке Построителя, находящейся справа от поля, — откроется окно редактора VBA с текстом процедуры (рис. 21).
Рис. 21. Процедура, полученная из макроса
В этой процедуре, полученной из макроса, используется объект DoCmd для выполнения макрокоманды закрытия формы. В соответствии с флажками, установленными в окне Преобразование макроса (Convert Macro), комментарии в макросе были преобразованы в комментарии в процедуре, и был добавлен код обработки ошибки, который выдает на экран сообщение об ошибке в случае ее возникновения.
Аналогично выполняется преобразование макросов, назначенных событиям отчета.
Теперь рассмотрим преобразование в процедуру VBA макроса, не связанного с событием формы или отчета, например созданного ранее макроса Менеджеры по продажам.
1. Щелкните по ярлыку Макросы (Macros) в окне базы данных Борей. Появится список макросов. Выделите макрос менеджеры по продажам.
2. Выберите команду Сервис | Макрос | Преобразовать макросы (Tools | Macro | Convert Macros to Visual Basic).
3. Откроется такое же диалоговое окно, как в предыдущем примере (см. рис. 20), в котором необходимо нажать кнопку Преобразовать (Convert). По окончании процесса преобразования появится сообщение об успешном завершении процесса преобразования и откроется окно редактора VBA, в котором можно посмотреть полученный код на VBA (рис. 22).
Макрос преобразуется в функцию с аналогичным именем Менеджеры_по_продажам (пробелы заменились символами подчеркивания)
Рис. 12.22. Результат преобразования макроса Менеджеры по продажам
После преобразования исходный макрос Менеджеры по продажам не был удален, а в списке модулей в окне базы данных Борей появился новый модуль с именем Преобразованный макрос — Менеджеры по продажам (Converted Macro — Менеджеры по продажам).
Существует еще один способ преобразования макросов в модуль VBA:
1. Выделите макрос Менеджеры по продажам в окне базы данных Борей.
2. Выберите команду Файл | Сохранить как (File | Save As).
3. В появившемся диалоговом окне Сохранение (Save As) в раскрывающемся списке Как (As) выберите элемент Модуль (Module) (рис. 23) и нажмите кнопку ОК
Рис. 12.23. Сохранение макроса в виде модуля
Стандартные модули
Стандартные модули содержат общие процедуры, которые не связаны с конкретным объектом: формой или отчетом. Эти процедуры могут вызываться из других модулей и использоваться при обработке событий в разных объектах, для вычисления значений в разных запросах или формах и т. д. Если в процедурах модуля нет ссылок на конкретные объекты данного приложения (формы, отчеты, элементы управления), то такой модуль может быть с успехом использован другими приложениями Access. Стандартные модули применяются также для объявления глобальных (т. е. доступных из всех модулей приложения) переменных, констант, типов.
Список стандартных модулей приложения всегда можно увидеть, нажав кнопку Модули (Modules) в окне База данных (Database). В этом окне обычно и выполняется работа с модулями.
Пример (изображен на рисунке 1) универсальной функции, которая проверяет, загружена ли форма, имя которой передается ей в качестве аргумента. Она никак не связана не только с объектом, но и с данным приложением и может использоваться как в нем самом, так и в любом другом приложении Access.
Рис . 1. Функция IsLoaded
Модули класса
Вторым типом модуля в Access является модуль класса. Модуль класса отличается от стандартного модуля тем, что, кроме процедур, он содержит описание объекта и используется для создания объектов. Процедуры, определенные в этом модуле, являются методами и свойствами объекта. Примерами модулей класса являются модули форм и отчетов.
Модули форм и отчетов связаны с конкретной формой или отчетом и содержат процедуры обработки событий для этой формы или отчета. Модуль формы не создается сразу при создании новой формы. Он создается и связывается с формой, как только вы попытаетесь создать первую процедуру обработки событий для этой формы или одного из элементов управления формы или же нажмете кнопку Программа (Code) в окне Конструктора формы.
Чтобы убедиться в этом, откройте любую форму БД в режиме Конструктора и посмотрите свойства этой формы. На вкладке Другие (Others) есть свойство Наличие модуля (Has Module). Оно должно иметь значение Нет (No). После нажатия кнопки Программа (Code), которая служит для открывания редактора кода VBA, значение этого свойства изменится на Да (Yes) (рис. 2).
Рис . 2. Диалоговое окно свойств формы
В окне редактора VBA отображается объект Form (Форма), а справа — поле со списком событий, которые могут обрабатываться процедурами VBA (рис. 3).
Если в модуле для некоторого события существует процедура, то это событие выделяется в списке жирным шрифтом. В данном случае таких событий нет, т. к. обработка событий в форме Клиенты (Customers), которую мы открыли, выполняется с помощью макросов. При попытке открытия редактора VBA автоматически создается модуль формы, который будет иметь название Form_клиенты (Form_Customers).
Если теперь закрыть окно редактора кода, а затем форму, то, хотя мы не вносили никаких изменений в форму, на экране появится вопрос: Сохранить изменения макета или структуры формы Клиенты? (Do you want to save changes to the design of form 'Customers'?) Вопрос связан с появлением модуля формы. Если вы ответите Нет (No), модуль не будет сохранен.
Для того чтобы из программы VBA открыть форму и изменить какие-либо свойства формы или ее элементов управления, можно использовать два метода:
· Макрокоманду OpenForm, как метод объекта DoCmd, например:
DoCmd . OpenForm " Товары "
Forms [ Товары . RecordSource = " Товары клиента "
Ссылку на соответствующий модуль класса, например:
Form_Toвapы. Visible = True
Form!Toвapы.RecordSоurce = "Товары клиента"
В том и в другом случае при выполнении открывается стандартный экземпляр формы Товары (Products) и подменяется источник записей для этой формы.
VBA позволяет открывать сразу несколько экземпляров класса формы. Это может потребоваться, например, когда хотят показать в разных окнах головную организацию и дочернюю фирму. Информация о той и другой может храниться в разных записях одной таблицы, и вам необходимо открыть два экземпляра одной формы с разными записями в каждом экземпляре.
Класс формы может иметь только один стандартный экземпляр, поэтому в данном случае придется создать нестандартный экземпляр формы. Для этого в программе нужно описать переменную, типом которой является имя модуля класса формы, при этом в описание переменной включить ключевое слово New. Например, следующая команда создает новый экземпляр формы клиенты (Customers) и связывает его с переменной типа Form:
Dim frm As New Form_Клиенты
Теперь изменим источник данных для этой формы, расположение на экране (иначе формы просто перекроются) и присвоим свойству Вывод на экран (Visible) значение Да (Yes):
frm.RecordSource = "Наша организация"
DoCmd . MoveSize 1440, 2400
frm.Visible = True
Рис . 3. Окно редактора кода VBA
Для изменения положения на экране используется макрокоманда MoveSize (СдвигРаз-мер), в которой в данном случае задаются координаты верхнего левого угла окна формы относительно главного окна Access.
( Замечание )
Для того чтобы второй экземпляр формы не исчез с экрана сразу после появления , переменная frm должна быть описана на уровне модуля , т . е . объявлена в разделе ( Declarations ) модуля с помощью ключевого слова Private .
Значения свойств формы или элементов управления формы относятся только к текущему экземпляру формы и не сохраняются после того, как он закроется. Это является отличием модуля класса от стандартного модуля: они по-разному хранят данные. В стандартном модуле можно объявить переменную Public, и она, будучи установлена, сохраняет свое значение до тех пор, пока явно не будет изменена другой командой в любом другом модуле. В модуле класса данные относятся к одному экземпляру класса, т. е. одному объекту. Они появляются, когда объект создается, и исчезают, когда исчезает объект. Это означает, что переменные Public в модуле класса могут быть доступны только до тех пор, пока существует переменная, содержащая ссылку на отдельный экземпляр класса. Это утверждение справедливо также для процедур, объявленных Public.
Формы и отчеты являются стандартными классами объектов в Access, однако можно использовать модули класса для создания пользовательских объектов. Имя, под которым сохраняется модуль класса, становится именем специального объекта. Процедуры типа sub и Function, определенные в модуле класса, при этом станут методами объекта, а процедуры типа Property Let, Property Get и Property Set — свойствами объекта. Для описания метода, не возвращающего никакого значения, используется процедура Sub, а для метода, возвращающего значение, — процедура Function. Процедура Property Get возвращает значение свойства объекта. Процедура Property Set присваивает значение свойству объекта. Процедура Property Let устанавливает значение свойства, не принадлежащего объекту.
Более детальные сведения об этих процедурах можно получить из справки Visual Basic в окне редактора кода, набрав в качестве критерия поиска имя процедуры: Property Let, Property Get И Property Set, соответственно.
Точно так же, как и в модуле формы, новый экземпляр объекта создается путем объявления переменной, например:
Dim с ls As New MyClass
После этого обращение к его методам и свойствам осуществляется с помощью данной переменной. Например, если в модуле определена процедура MyProcedure, для того чтобы выполнить эту процедуру, используется выражение
с ls . MyProcedure
Создание модулей
Для того чтобы создать стандартный модуль или модуль класса, нужно:
1. Выбрать команду Модуль (Module) или Модуль класса (Class Module) в меню Вставка (Insert) или в списке кнопки Новый объект (New Object) выбрать соответствующий объект (рис. 4). При этом откроется редактор кода VBA с пустым окном модуля.
2. Создать необходимые процедуры и описания.
3. Сохранить модуль, нажав кнопку Сохранить (Save) на панели инструментов. При
этом выдается диалоговое окно Сохранение (Save), в котором необходимо ввести
имя нового модуля и нажать кнопку ОК.
После этого новый модуль появляется в списке модулей окна базы данных. Чтобы его открыть, можно нажать кнопку Конструктор (Design) окна базы данных. Если у вас открыты форма или отчет в режиме Конструктора, то для того чтобы открыть модуль формы (отчета), следует нажать кнопку Программа (Code) на панели инструментов.
Рис . 4. Создание нового модуля
Ссылки на объект Module
Для обращения к модулям в программах VBA используется семейство Modules, которое содержит все открытые объекты типа Module. Дая того чтобы открыть объект Module, можно использовать макрокоманду OpenModule (ОткрытьМодуль). Ссылка на модуль может быть создана тремя способами:
· имяСемейстза!имяОбъекта — например Modules!Startup;
· имяСемейства ("имяОСъекта") — например Modules ("Startup");
· имяСемейства (индекс), где индекс— индекс объекта в семействе.
Для ссылки на модуль формы или отчета можно использовать или имя модуля, например Modules!Form_Kлиенты, или свойство формы, например Forms!Клиенты.Module.
Объект Module имеет свойство Туре. Значение этого свойства определяет тип модуля: для стандартного модуля используется значение 0, для модуля класса — 1
Список літератури
1. Самоучитель Microsoft Office XP : Пошаговая интерактивная обучающая система. – М. : КомпактБук ; Новый Диск, 2004.
2. Гайдамакин Н.,Автоматизированные информационные системы, базы и банки данных: Вводный курс ,Гелиос, 2002, Р
3. Гаврилова Т.,Базы знаний интеллектуальных систем ,СПб., 2001, Р
4. Кренке Д.,Теория и практика построения баз данных ,Питер, 2003, Р
5. Хомоненко А.,Базы данных ,СПб., 2000, Р
6. Хомоненко А.,Базы данных ,СПб., 2004, Р
7. Пасічник В.В.,Організація БД і знань,«Знання», 2008, у
8. Гайна Г.М.,Основи проектування баз даних. Навч.пос.,«Центр навчальної літератури», 2007, У
Днепропетровский областной совет
Последнее изменение этой страницы: 2019-04-19; Просмотров: 273; Нарушение авторского права страницы