VBA в MS Access Учебный курс. Иерархия объектов


VBA в MS Access Учебный курс

Иерархия объектов MS ACCESS MS Access имеет структуру объектов, отличную от структуры объектов Word и Excel. Например, в Access нет такого объекта как Selection. Кроме того, в Access для организации интерфейса пользователя используются собственные формы и элементы управления. Некоторые объекты Access: Screen – дает доступ к форме, отчёту или элементу управления, который активен в данный момент DoCmd – позволяет выполнять макрокоманды DataAccessPage –является открытой страницей доступа к данным DefaultWebOptions – предоставляет доступ к параметрам приложения Form – ссылается на конкретную открытую форму Report – ссылается еа конкретный открытый отчёт


Объект AccessObject Для работы с объектами предназначен объект AccessObject. Некоторые свойства объекта AccessObject: IsLoaded – является ли объект в данное время загруженным. Принимает значение True или False. Name – имя объекта. Число символов в имени не должно превышать 64. Propeties – возвращает ссылку коллекцию, содержащую все свойства перечисленных объектов Type – возвращает тип объекта: acForm – форма acMacro – макрос acModule – модуль acQuery – запрос acReport – отчёт actable – таблица

Работа с формами и элементами управления: Сослаться на активную форму можно, используя объект Screen. Основными свойствами форм являются ActiveControl (предоставляет доступ к элементу управления, который в данный момент имеет фокус) Activeform (даёт ссылку на форсу, которая в данный момент имеет фокус) Caption (подпись) – название окна формы CloseButton – кнопка закрытия формы (доступна – True или недоступна – False) ControlButton – кнопка оконного меню, определяет доступны ли кнопки управления окном (0 – отсутствуют, 1 – свёртывание, 2 – развёртывание, 3- все) Height – высота формы Width – ширина формы Name – имя формы Visible – отображение формы на экране

Примеры: Dim элемент As Control Set Элемент=Screen.ActiveControl Элемент.Caption=”Active Control” Dim Форма As Control Set Формат=Screen.ActiveFormtrol Форма.Caption=”Active Form” Некоторые свойства форм устанавливаются только программно. Формы имеют несколько методов: Recalc – обновляет все вычисляемые элементы Refresh – обновляет записи источника данных для формы Repaint – завершает все отложенные обновления Requery – обновляет данные источника данных формы или элемента управления SetFocus – устанавливает фокус на указанную форму или элемент управления Undo – восстанавливает значения формы или элемента управления которые были изменены

Ссылки на объекты Для обращения к объекту существует одно общее правило: нужно проследить путь в иерархии объектов, начиная от объекта самого верхнего уровня и записать последовательность имен встреченных на пути объектов или семейств, отделяя их друг от друга точкой. Например, чтобы обратиться к форме, входящей в состав семейства AllForms, необходимо написать следующее выражение: Application.CurrentProject.AllForms ("Заказы клиента") Наиболее часто используемые семейства, объекты, свойства и методы считаются глобальными. Ссылки на них хранятся в специальном объекте с именем Global. Для обращения к глобальному объекту можно пропустить объекты более высокого уровня. Например, семейство Forms является глобальным. Для доступа к объекту этого семейства можно использовать сокращенную ссылку вида: Forms ( "Заказы") вместо полной ссылки: Application. Forms ( "Заказы") Обычно имя семейства и имя объекта разделяются оператором "!" (восклицательный знак), например: Forms ! Товары Если имя объекта состоит из нескольких слов, разделенных пробелом, тогда надо написать Forms![Заказы клиента] Третий способ ссылки состоит в том, что на объект в семействе ссылаются не по названию, а по индексу. Такой способ применяется обычно тогда, когда имя объекта неизвестно. В то же время каждый объект в семействе имеет индекс (порядковый номер), который обычно начинается с нуля. И наконец, последний способ ссылки на объект состоит в использовании вместо имени объекта строковой переменной, например: Reports (strИмяОтчета)

Стандартные модули Стандартные модули содержат общие процедуры, которые не связаны с конкретным объектом: формой или отчетом. Эти процедуры могут вызываться из других модулей и использоваться при обработке событий в разных объектах, для вычисления значений в разных запросах или формах и т. д. Если в процедурах модуля нет ссылок на конкретные объекты данного приложения (формы, отчеты, элементы управления), то такой модуль может быть с успехом использован другими приложениями Access. Стандартные модули применяются также для объявления глобальных (то есть доступных из всех модулей приложения) переменных, констант, типов. Список стандартных модулей всегда можно увидеть, нажав кнопку Модули (Modules) в окне База данных (Database). Создание модулей Для того чтобы создать стандартный модуль или модуль класса, нужно: Выбрать команду Модуль (Module) или Модуль класса (Class Module) в меню Вставка (Insert) или в списке кнопки Новый объект (New Object) выбрать соответствующий объект. При этом откроется редактор кода VBA с пустым окном модуля. Создать необходимые процедуры и описания. Сохранить модуль, нажав кнопку Сохранить (Save) на панели инструментов. При этом выдается диалоговое окно Сохранение (Save), в котором необходимо ввести имя нового модуля и нажать кнопку ОК. После этого новый модуль появляется в списке модулей окна базы данных. Чтобы его открыть, можно нажать кнопку Конструктор (Design) окна базы данных.

Основные события MS ACCESS Обычно события инициируются действиями пользователя. В зависимости от производимых пользователем действий события можно разделить на несколько типов: события данных, события фокуса, события клавиатуры, события мыши, события печати, события фильтра, события окна, события ошибок и событие таймера

События данных К этому типу относятся события, происходящие тогда, когда пользователь вводит, удаляет или изменяет данные в форме, а также перемещается от одной записи к другой. Текущая запись Событие Текущая запись (Current) происходит, когда очередная запись получает фокус или выполняется повторное обращение к источнику данных формы — таблице или запросу. Таким образом, оно возникает как при открытии формы, так и при переходе от одной записи к другой. Удаление Событие Удаление (Delete) происходит, когда пользователь пытается удалить запись из формы. Оно происходит до того, как запись реально удаляется из базы данных. Изменение Событие Изменение (Change) возникает в следующих случаях: при изменении содержимого текстового поля или поля со списком, при этом изменением может считаться любой непосредственно введенный или удаляемый символ; при изменении значения свойства Текст (Text) элемента управления с помощью макроса или процедуры VBA; в элементе управления Набор вкладок (Tab Control) при переходе с одной вкладки на другую. Отсутствие в списке Событие Отсутствие в списке (NotlnList) возникает в поле со списком, когда пользователь вводит вручную значение в текстовую часть поля, которое отсутствует в списке, и после этого пытается перейти в другое поле или сохранить запись. Уход с записи Событие Уход с записи (RecordExit) происходит всякий раз, когда пользователь пытается выйти (переместить фокус) с текущей записи: перейти к другой записи, закрыть форму, обновить данные в форме и т. д. Процедура обработки этого события может использоваться для проверки корректности данных в текущей записи. Процедура имеет один параметр: cancel. Если установить его значение равным True, то можно запретить пользователю покидать текущую запись. Отмена Событие происходит, когда пользователь отменяет изменения, сделанные в текущем поле или текущей записи, например, нажав клавишу

События фокуса События фокуса происходят, когда форма, отчет или элемент управления в форме получают или теряют фокус, а также когда форма или отчет становятся активными или, наоборот, неактивными. Вход Событие Вход (Enter) происходит перед тем, как элемент управления в форме получает фокус от другого элемента управления в той же форме или когда при открытии формы получает фокус первый элемент управления. Выход Событие Выход (Exit) происходит перед тем, как данный элемент управления передаст фокус другому элементу управления той же формы. Замечание События Вход (Enter) и Выход (Exit) не определены для флажков и переключателей в группах, они определены только для группы как целого. События Вход (Enter) и Выход (Exit) не происходят, если фокус переходит к элементу другой формы или отчета. Получение фокуса Событие Получение фокуса (GetFocus) происходит, когда форма или элемент управления формы получают фокус. Элемент управления может получить фокус, только если оно видимо и доступно (его свойства Вывод на экран (Visible) и Доступ (Enabled) имеют значения Да). Потеря фокуса Событие Потеря фокуса (LostFocus) происходит каждый раз, когда форма или элемент управления в форме теряют фокус. Включение Событие Включение (Activate) возникает, когда форма или отчет получают фокус, становясь активной формой или отчетом. Это происходит, когда форма или отчет открываются. Отключение Событие Отключение (Deactivate) происходит, когда фокус из формы или отчета переносится на другое окно (таблицы, запроса, формы, отчета, макроса, модуля или окно базы данных).

События клавиатуры События клавиатуры происходят в форме и элементе формы, когда пользователь нажимает клавиши на клавиатуре или же выполняется макрокоманда sendKeys. Все события клавиатуры связываются с тем объектом в форме, который имеет в данный момент фокус. Обычно это один из элементов управления. Замечание События клавиатуры не определены для элементов управления в отчетах, а также для флажков и переключателей в группах. Они определены только для группы в целом. Клавиша вниз и Клавиша вверх События Клавиша вниз (KeyDown) и Клавиша вверх (KeyUp) возникают всякий раз, когда пользователь нажимает или отпускает клавишу на клавиатуре и при этом фокус находится на элементе управления или форме. Они имеют два параметра: KeyCode и Shift. Параметр KeyCode — это целое число, представляющее код нажатой клавиши. Параметр Shift позволяет определить, какие сочетания клавиш нажимались: 1 — соответствует

События мыши События мыши происходят, когда какое-либо действие в форме или ее элементе управления выполняется с помощью мыши. События мыши не определены для элементов управления в отчетах, а также для флажков и переключателей в группах, они определены только для группы в целом. Нажатие кнопки Это наиболее широко распространенное событие. Оно возникает как в самой форме, так и в элементах управления формы. Для формы событие Нажатие кнопки (Click) возникает, когда пользователь щелкает мышью на пустой области формы или на области выделения записи в форме. Для элемента управления событие Нажатие кнопки (Click) возникает при щелчке мыши не только на самом элементе, но и на присоединенной к нему надписи. Двойное нажатие кнопки Событие происходит после быстрого двойного щелчка любой клавиши на форме или элементе управления. Для элементов управления результат этого события зависит от типа элемента управления. По умолчанию двойной щелчок мыши в текстовом поле приводит к выделению слова, а в объекте OLE — запускает этот объект для редактирования. Перемещение указателя Это событие генерируется непрерывно, когда пользователь перемещает указатель мыши по объектам формы. Пока указатель движется в границах объекта, событие генерируется для данного объекта, когда указатель попадает на пустую область формы, область выделения записи или полосу прокрутки, генерируется событие Перемещение указателя (MouseMove) для формы. Процедура обработки события имеет четыре параметра: Button — определяет состояние кнопок мыши в момент возникновения события (перемещение указателя может происходить при нескольких нажатых или не нажатых кнопках мыши); Shift — определяет состояние клавиш

События мыши Колесико мыши Событие возникает, когда пользователь перемещает указатель мыши с помощью колесика скроллирования. Процедура обработки события имеет два параметра: Page — принимает значение True при перемещении указателя на другую страницу; Count — количество линий, на которое переместился указатель при прокрутке формы с помощью колесика мыши. Кнопка вниз и Кнопка вверх События Кнопка вниз (MouseDown) и Кнопка вверх (MonseUp) возникают, когда пользователь нажимает и, соответственно, отпускает кнопку мыши. Процедуры обработки этих событий имеют четыре параметра: Button, Shift, х и Y. Эти параметры аналогичны параметрам процедуры для события Перемещение указателя (MouseMove) за исключением первого параметра — Button. Так как в данном случае нажимается конкретная кнопка мыши, параметр Button определяет, какая это кнопка.

События окна События окна запускаются при открытии и закрытии форм и отчетов, а также при изменении размеров формы. Открытие Событие Открытие (Open) происходит после того, как выполнен запрос, лежащий в основе формы или отчета, но до отображения первой записи или печати отчета. Закрытие Событие Закрытие (Close) является последним перед тем, как форма будет удалена с экрана. Для отчета событие происходит, когда закрывается режим Предварительного просмотра или заканчивается печать отчета. Загрузка Событие Загрузка (Load) происходит сразу после события Открытие (Open), но в отличие от него не может быть отменено. Выгрузка Событие Выгрузка (Unload) происходит при закрытии формы до события и может быть отменено. Изменение размера Событие Изменение размера (Resize) возникает при открытии формы и при изменении ее размеров. Его обычно применяют, если требуется подстроить размер элементов управления под изменяющиеся размеры формы или вычислить заново вычисляемые элементы.

Управление базами данных. Библиотека ADO Библиотека ADO (ActivX Data Object) – это специальный инструмент для работы с данными

Компания Microsoft разработала специальный интерфейс доступа к различным типам данных – интерфейс OLE DB. Он предоставляет доступ к объектам баз данных, электронным таблицам, мультимедийным данным и т.д. При организации такого доступа используют следующие компоненты: – потребители данных – любое приложение, которое использует интерфейс OLE DB – провайдеры данных – предоставляют потребителям доступ к данным – службы – реализуют дополнительные возможности, которые отсутствуют у провайдеров. Доступ и использование интерфейса OLE DB реализует библиотека ADO. Она позволяет работать с различными типами данных, для которых существуют провайдеры OLE DB. Иерархия объектов библиотеки ADO: Объектом верхнего уровня является объект Conection, который представляет собой открытое соединение с источником данных. Этот объект содержит все остальные объекты и семейства. Connection (обеспечивает подключение к источнику данных) Errors Properties Command (представляет собой инструкцию SQL) Parameters (позволяет задавать параметры и значения для таблиц) Properties Recordset (предназначен для редактирования и обновления источников данных Fields Properties Properties Подключение к источнику данных можно выполнить, используя метод Execute объекта Command.

Объект Connection: Позволяет создать подключение к источнику данных. Методы: Close – закрывает соединение и все активные наборы записей для данного подключения Open – открывает сеанс подключения к источнику данных Execute – выполняет запрос, инструкцию либо процедуру, доступную провайдеру Свойства: ConnetionString – определяет параметры, используемые при подключении к источнику данных (имя провайдера, имя файла с информацией о подключении, путь к файлу сервера) CursorLocation – определяет расположение курсора или область, где выполняется работа с данными Mode – определяет режим доступа для изменения данных (только для чтения, только для записи и т.д.) Provider – определяет имя провайдера для данного подключения

Пример подключения к источнику данных: Public Sub Work_Connection() Dim conn As New ADODB.Connection Dim ConnString As String Dim cmd As New ADODB.Command Dim rs As ADODB.Recordset задаем строку подключения ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=H:Specia;WorkSALES1.MDB;" _ & "Persist Security Info=False" 'подключение к источнику данных conn.Open ConnString 'ссылка на подключение Set cmd.ActiveConnection = conn cmd.CommandText = "SELECT*from Товары" 'свойства набора записей rs.CursorLocation = adUseClient 'открываем набор записей rs.Open cmd, , adOpenStatic, adLockBatchOptimistic 'закрываем набор данных rs.Close 'закрываем подключение conn.Close End Sub

Выполнение команд: Для задания и выполнения команд в ADO существует объект Command. Данный объект имеет два свойства: Command.Text и CommandType, задающие текст и тип команды. Для запуска команды предусмотрен метод Execute. При этом команда применяется к тому подключению, которое является активным в данный момент времени. Кроме того существуют ещё некоторые методы и свойства объекта Command: Метод CreatParameter – создаёт новый параметр с заданными свойствами Свойство ActiveConnection – определяет активный в данный момент объект Connection

Пример работы с командами: Public Sub Work_Command() Dim conn As New ADODB.Connection Dim ConnString As String Dim SQLString As String Dim cmd As New ADODB.Command Dim rs1 As ADODB.Recordset Dim rs2 As ADODB.Recordset Dim rs3 As ADODB.Recordset задаем строку подключения ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=H:Specia;WorkSALES1.MDB;" _ & "Persist Security Info=False" 'подключение к источнику данных conn.Open ConnString SQLString = "SELECT*from Товары" 'ссылка на подключение Set cmd.ActiveConnection = conn cmd.CommandText = SQLString Set rs1 = cmd.Execute rs1.Close 'свойства набора записей rs2.CursorLocation = adUseClient rs2.Open cmd, , adOpenStatic, adLockBatchOptimistic ‘закрываем набор записей rs2.Close Set rs3 = cmd.Execute(SQLString) rs3.Close ‘закрываем подключение conn.Close End Sub.

Задание параметров команды Многие провайдеры поддерживают команды с параметрами. Для этого используют коллекцию Parameters. С её помощью можно: – определить имя параметра – задать или узнать значение параметра – задать такие свойства параметра, как тип, размер и т.д. Свойство Direction коллекции Parameters: определяет тип параметра (входной, выходной, неизвестен, возвращает значение) Методы: Delete – удаляет параметр Refresh –обновляет параметры для отображения доступных провайдеру объектов

Работа с набором записей: Для работы с набором записей служит объект Recordset, который представляет собой полный набор записей для таблицы или результат выполнения некоторой команды. в определенный момент времени данный объект ссылается только на одну запись, которая становится текущей. Объект Recordset является основным объектом библиотеки ADO, используемым для работы с данными провайдера. Набор записей, представляемых данным объектом состоит из записей и полей. Методы объекта Recordset: Move – передвигает позицию текущей записи Open – открывает набор записей Requery – обновляет данные записей путем повторного выполнения запроса Resync –обновляет данные в текущем наборе записей из основной базы данных Save – сохраняет набор записей в файл Seek – выполняет поиск индекса набора записей для быстрого поиска строки, в которой находится искомое значение Delete – удаляет текущую запись или группу записей Update – сохраняет любые изменения текущей записи Свойства объекта Recordset : BOF – имеет значение true, если текущая запись находится перед первой записью EOF – имеет значение true, если текущая запись находится после последней записи RecordCount – определяет количество записей Source – определяет источник данных для записей

Пример работы с набором записей Public Sub Work_Record() Dim conn As New ADODB.Connection Dim ConnString As String Dim SQLString As String Dim cmd As New ADODB.Command Dim rs As ADODB.Recordset 'задаем строку подключения ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=H:Specia;WorkSALES1.MDB;" _ & "Persist Security Info=False" 'подключаемся к источнику данных conn.Open ConnString SQLString = "SELECT*from Товары" 'задаем ссылку на подключение Set cmd.ActiveConnection = conn cmd.CommandText = SQLString rs.CursorLocation = adUseClient 'открываем набор записей rs.Open cmd, , adOpenStatic, adLockBatchOptimistic 'добавляем новую запись rs.AddNew

'задаем значения полей rs!Категория = 1 rs!Цена = 1000 rs!Наименование = "Товар 1" 'сохраняем запись rs.UpdateBatch 'удаляем внесенную запись rs.Delete rs.UpdateBatch 'закрываем набор записей rs.Close 'закрываем подключение conn.Close End Sub

Объект Field Представляет собой столбец данных одного типа, т.е. поле набора записей. Свойства объекта Field: Name – определяет имя объекта (в данном случае поля) Value – позволяет задать или получить данные для текущей записи DefinedSize – возвращает размер поля ActualSize –возвращает размер данных, содержащихся в поле Type – возвращает основные свойства поля

Пример работы с полями: Public Sub Work_Fields() Dim conn As New ADODB.Connection Dim ConnString As String Dim SQLString As String Dim cmd As New ADODB.Command Dim rs As ADODB.Recordset Dim fld As ADODB.Field ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=H:Specia;WorkSALES1.MDB;" _ & "Persist Security Info=False" conn.Open ConnString Set cmd.ActiveConnection = conn cmd.CommandType = adCmdTable cmd.CommandText = "Товары" rs.Open cmd, , adOpenStatic, adLockBatchOptimistic Debug.Print "Поля таблицы Товары" For Each fld In rs.Fields Debug.Print "Имя: " & fld.Name Next fld rs.Close End Sub

vba_v_ms_access.ppt
- Количество слайдов: 27