На рис. 10.1 приведена структура объектов MS Access. MS Access имеет структуру объектов несколько отличную от структуры ранее рассмотренных приложений MS Office 2000. Например, в MS Access нет такого объекта, как Selection, который имеют все ранее рассмотренные приложения. Еще одним важным отличием является то, что в MS Access для организации интерфейса пользователя используются собственные формы и элементы управления, а не формы, содержащиеся в библиотеке объектов MS Forms. Очевидно, что эти особенности связаны с назначением приложения и его функциональными возможностями.
В списке, представленном ниже, кратко рассмотрены некоторые объекты, входящие в структуру объектов MS Access (следует отметить, что многие из них появились только в MS Access 2000).
· Объект Screen позволяет получить доступ к форме, отчету или элементу управления, которые в текущий момент имеют фокус.
· Объект DoCmd позволяет выполнять макрокоманды MS Access из программ VBA с помощью методов данного объекта.
· Объект DataAccessPage представляет собой открытую страницу доступа к данным. Все объекты DataAccessPage являются членами коллекции DataAccessPages. Данный объект является новинкой версии MS Access 2000.
· Объект DefaultWebOptions предоставляет доступ к параметрам приложения, используемым в MS Access по умолчанию при открытии и сохранении Web-страниц.
· Объект DBEngine находится на вершине иерархии объектной модели DAO (Data Access Object), с помощью которой возможно выполнение большинства операций, используемых при работе с базами данных, включая:
- открытие базы данных;
- создание запросов;
- удаление, добавление и изменение записей в таблицах базы данных и т.д.
· Объект Module ссылается на стандартный модуль или модуль класса. Данный объект описывает содержимое модуля в строках кода.
Здесь подробно рассмотрим только объекты, позволяющие работать с основными составляющими базы данных MS Access, включающими формы и отчеты. Для работы с таблицами и запросами следует использовать объектные модели DAO или ADO.
Для работы с перечисленными в заголовке объектами можно использовать объект AccessObject. Данный объект позволяет получить доступ к ряду свойств форм, отчетов, запросов, макросов и т. п. Тип объекта AccessObject зависит от того, в какой коллекции он содержится.
В табл. 10.1 представлены коллекции и соответствующие им объекты MS Access. Например, коллекция AllForms содержит все формы базы данных, а коллекция AllReports — все отчеты базы данных.
ПРИМЕЧАНИЕ:Для коллекции AllForms, как и для остальных коллекций, не существует методов, которые позволяют добавить или удалить элементы этих коллекций.
Объект AccessObject и коллекции, элементами которых он является, позволяют задать или возвратить значение достаточно ограниченного количества свойств форм, отчетов, запросов и таблиц. Чтобы работать с отчетами и формами, следует использовать объекты Form и Report, которые являются элементами соответственно коллекций Forms и Reports.
Объект AccessObject
Объект AccessObject представляет собой конкретный объект MS Access, содержащийся в одной из коллекций, представленных в табл. 10.1.
Таблица 10.1. Коллекции, содержащие объект AccessObject соответствующего типа.
Коллекция
Тип объекта
Объект MS Access
AllForms
Form
Формы
AllReports
Report
Отчеты
AllMacros
Macro
Макросы
AllModules
Module
Модули
AllDataAccessPages
Dataaccesspage
Страницы доступа к данным
AllTables
Table
Таблицы
AllQueries
Query
Запросы
AllViews
View
Представления
AllStoredProcedures
Stored procedure
Хранимые процедуры
AllDatabaseDiagrams
Database diagram
Схемы данных
Свойство IsLoaded
Свойство IsLoaded показывает, является ли загруженным в данный момент объект AccessObject. Оно может принимать одно из двух значений: True (объект загружен) или False (объект не загружен). Значение этого свойства доступно только для чтения.
Свойство Name
Свойство Name задает строковое выражение, которое представляет собой имя объекта AccessObject, элемента управления или объекта Reference. Для таких объектов MS Access, как таблицы, запросы формы и т. п., число символов в имени не должно превышать 64. Для элементов управления длина имени может составлять 255 символов.
Свойство Properties
Свойство Properties возвращает ссылку на коллекцию AccessObjectProperties объектов AccessObject, CurrentProject или CodeProject. Эта коллекция содержит все свойства перечисленных объектов.
Свойство Туре
Свойство Туре объекта AccessObject возвращает тип объекта MS Access. Допустимые значения данного свойства приведены в табл. 10.2.
Таблица 10.2. Константы, определяющие тип объекта AccessObject
Константа
Описание
acDataAccessPage
Страница доступа к данным
acForm
Форма
acMacro
Макрос
acModule
Модуль
acQuery
Запрос
acReport
Отчет
acServerView
Представления
acStoredProcedure
Хранимая процедура
acTable
Таблица
Ранее мы уже говорили, что формы в MS Access не соответствуют формам, используемым в MS Word и MS Excel. Так, в структуре объектов MS Access присутствуют объекты Form и Control, которые позволяют работать соответственно с формами и элементами управления. В MS Word и MS Excel для этих целей используются объекты UserForm и Control, содержащиеся в библиотеке Microsoft Forms 2.0.
Использование в MS Access для работы с формами объектов, отличных от объектов других приложений MS Office, вполне естественно, так как его формы и элементы управления обладают рядом специфичных свойств. Например, формы MS Access имеют оригинальное свойство Источник записей (RecordSource), которое определяет, записи какой таблицы или запроса отображаются в форме.
Внешний вид форм и используемые элементы управления в формах MS Access практически те же, что и в MS Word и MS Excel. Создание форм также аналогично созданию форм в интегрированной среде разработки, однако оно производится непосредственно в MS Access в режиме конструктора форм.
Если вы посмотрите на структуру объектов MS Access 2000, то увидите, что здесь присутствуют две коллекции, в названии которых содержится слово Form (форма): коллекция Forms и коллекция AllForms. Эти коллекции имеют принципиальное различие: элементами первой из них являются объекты Form, каждый из которых представляет собой открытую форму, а элементами второй являются объекты AccessObject, что, как мы понимаем, не одно и то же. Поэтому для разных целей можно использовать разные коллекции и содержащиеся в них объекты.
Например, чтобы узнать, сколько всего форм содержится в базе данных, мы можем воспользоваться свойством Count коллекции AllForms, а для определения количества открытых в данный момент форм можно воспользоваться тем же свойством коллекции Forms. Аналогично можно поступить в случае, когда требуется узнать, открыта ли какая-либо форма в данный момент:
· можно перебрать все элементы коллекции Forms (с помощью цикла For Each);
· можно воспользоваться свойством IsLoaded объекта AccessObject, являющегося элементом коллекции AllForms.
Для работы с формой или элементом управления, которые в данный момент имеют фокус, удобно использовать объект Screen.
Объект Screen
Используя свойства объекта Screen, можно сослаться на активную форму, отчет или элемент управления, которые в данный момент имеют фокус.
Свойство ActiveControl
Свойство ActiveControl позволяет получить доступ к элементу управления, который имеет фокус. Ниже представлен пример назначения подписи кнопке, которая имеет фокус.
Dim ctlCurrControl As Control
Set ctlCurrControl = Screen.ActiveControl
ctlCurrControl. Caption = "Active Control"
Использование данного свойства в случае, когда ни один из элементов управления не имеет фокуса, приведет к ошибке.
Свойство ActiveForm
Свойство ActiveForm дает ссылку на объект Form, представляющий собой форму, которая в данный момент имеет фокус. Если фокус имеет подчиненная форма, то данное свойство возвращает ссылку на главную форму.
Ниже представлен пример задания подписи формы, которая имеет фокус.