Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Тема 5. Модули как объекты Access⇐ ПредыдущаяСтр 15 из 15
ПЛАН
Стандартные модули. 62 Модули класса. 63 Создание модулей. 65 Ссылки на объект Module. 66 Код VBA в приложении Access содержится в модулях. Модули являются объектами Access, такими же как таблицы, запросы, формы, отчеты, страницы и макросы, о чем свидетельствует ярлык на панели объектов в окне База данных (Database). Основное содержание модулей — это процедуры на языке VBA. Существует два типа модулей: стандартные модули и модули класса. Стандартные модули Стандартные модули содержат общие процедуры, которые не связаны с конкретным объектом: формой или отчетом. Эти процедуры могут вызываться из других модулей и использоваться при обработке событий в разных объектах, для вычисления значений в разных запросах или формах и т. д. Если в процедурах модуля нет ссылок на конкретные объекты данного приложения (формы, отчеты, элементы управления), то такой модуль может быть с успехом использован другими приложениями 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) на панели инструментов. При После этого новый модуль появляется в списке модулей окна базы данных. Чтобы его открыть, можно нажать кнопку Конструктор (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; Просмотров: 380; Нарушение авторского права страницы