
- •Часть 2.
- •8 Архитектура проекта
- •8.1 Введение (основные элементы проекта и их построение)
- •8.1.2 Этапы написания проекта
- •Установка (и удаление) элементов управления на лист Excel
- •Установка начальных значения свойств элементов управления
- •Установка порядка расположение элементов управления (установка одного элемента управления над другим)
- •Создание пользовательской формы
- •Создание модулей макросов проекта
- •Создание событийных процедур элементов управления, а так же событийных процедур родительских объектов
- •Быстрый переход в событийную процедуру элемента управления
- •8.1.3 Изменение свойств проекта
- •8.1.4 Установка и снятие защиты проекта
- •9 Доступность подпрограмм и полей модулей проектов
- •9.1 Введение
- •9.2 Надстройки проектов
- •9.2 Ссылка на другой проект
- •10 Отладка кода программы в vba редакторе
- •10.1 “Компиляция” проекта
- •10.2 Запуск подпрограмм, не имеющих входных параметров из редактора vba
- •10.3 Пошаговый запуск подпрограмм, не имеющих входных параметров
- •10.4 Непосредственный запуск формы из редактора vba
- •10.5 Точки останова и оператор Stop
- •10.6 Аварийное прерывание работы программы приложением Excel
- •10.7 Принудительная остановка и принудительное прерывание программы пользователем
- •10.8 Окно локальных переменных и Окно отладки
- •11 Справочная система vba
- •11.1 Переход к справочной системе
- •11.2 Список имен потомков, методов и свойств объектов в окне редактора модуля
- •11.3 Просмотр списка операторов vba в окне редактора модуля (просмотр библиотек)
- •11.4 Окно просмотра свойств, методов, потомков и родителей объектов
- •12 Дополнительная информация
- •12.1 Параметры работы редактора vba
- •12.2 Защита от макровирусов
- •12.3 Причины, по которым код vba проекта может не исполняться
- •Приложение 1 Задание 1 (автозаполнение пола)
- •Задание 2 (автозаполнение комментариев к числам)
- •Задание 3 (заучиватель иностранных слов)
- •Задание 4 (телефонная книжка с поиском)
- •Задание 5 (программирование связей таблиц Excel)
- •Задание 6 (защита служебных полей таблицы Excel)
- •Приложение 2 (Программирование через редактирование макроса) Введение
- •Запись макроса в книгу Excel
- •Запуск макроса из меню.
- •Быстрый переход в код макроса
- •Пример создание процедуры через макрос.
- •Некоторые замечания по запуску макроса из событийных процедур
- •Назначение управляющих клавиш для запуска готового макроса Назначение управляющих клавиш макросам через меню приложений
- •Программное назначение управляющих клавиш макросам
- •Приложение 3( Создание меню ) Введение
- •Типы меню приложений
- •Создание (и удаление) подпунктов главного меню через меню приложений Создание (и удаление) подпункта главного меню
- •Создание (и удаление) пункта меню к макросу
- •Удаление меню
- •Добавление пунктов в меню
- •Свойства и методы пунктов меню
- •Переключатель в пункте меню
- •Коды пиктограмм пункта меню
- •Односеансное контекстное меню
- •После выбора пункта ПервыйУровень
- •После выбора пункта ВторойУровень1 Назначение управляющих клавиш к пункту меню
- •Приложение 4 ( Программная обработка модулей vba ) Введение
- •Экспорт модуля проекта в файл
- •Импорт модуля проекта из файла
- •Импорт модуля через “организатор” (данный код только для Word приложения)
- •Создание свойств и методов пользовательского класса
- •Создание событий пользовательского класса
- •Приложение 6 (Ссылка на приложение ms Office)
- •Приложение 7 (связь с таблицами и запросами базы данных) Введение
- •Связь с базой данных через указатели
- •Непосредственная загрузка таблицы базы данных в Excel таблицу
- •Форма для интерактивной работы с записью таблицы базы данных
- •С записями таблицы базы данных
- •Браузер таблиц и запросов базы данных
- •Методы поиска объекта Recordset
- •Пример использования метода Seek
- •Пример использования методов Find
- •Приложение 8 (Обращение к api-функциям) Введение
- •Скрытие и отображение панели задач через api функции
- •Запуск ярлыка и исполняемых файлов через api функцию
- •Приложение 9 (Основные понятия визуального программирования на доступных примерах)
- •Яблоко1.Сплющить
- •8 Архитектура проекта 3
- •8.1 Введение (основные элементы проекта и их построение) 3
- •Приложение 3( Создание меню ) 64
- •Приложение 4 ( Программная обработка модулей vba ) 90
- •Приложение 5 (Создание модуля класса) 94
- •Приложение 6 (Ссылка на приложение ms Office) 108 Приложение 7 (связь с таблицами и запросами базы данных) 113
- •Часть 2
Связь с базой данных через указатели
С базой данных можно связаться через объектные переменные. Переменную типа Databаse используют для непосредственной связи с базой данных. Через указанную переменную устанавливают указатель на объекты базы данных. Переменная типа Recordset применяется для установки указателя на таблицы базы данных, и для выполнения запросов SQL. Для установки указателя на базу используют метод OpenDatabase объекта WorkSpase(0). Имя объекта WorkSpase(0) при использование метода OpenDatabase, допускается опускать в языке VBA. Метод OpenDatabase должен иметь хотя бы один входной параметр, определяющий путь и имя к открываемой базе данных. Помимо этого параметра имеются еще ряд необязательных параметров, определяющих способ загрузки базы данных:
OpenDatabase( Name [, Options] [, ReadOnly ] [, Conect ] )
Name – полное имя файла базы данных, или имя файла базы данных находящегося в текущей директории текущего диска
Options –если этот параметр имеет значение true, то база данных открывается для монопольного доступа, если false – для общего доступа (режим открытия базы данных по умолчанию)
ReadOnly –если этот параметр имеет значение true, то база данных открывается только для чтения, если false – для чтения и изменения (режим открытия базы данных по умолчанию)
Conect – сведения о подключения базы данных, в том числе и пароли
Методы объекта Database |
||
Имя метода |
Пример вызова |
Назначение метода |
Close |
DB.Close |
Снимает указатель с базы данных и закрывает ее |
Recordsets.Refresh |
DB.Recordsets.Refresh |
Применяется для обновления данных, когда сменили имя таблицы данных или имя запроса |
OpenRecordset |
DB.OpenRecordset(“Имя”) |
Открывает таблицу или запрос. Об этом методе смотрите ниже по тексту |
Объект типа Database имеет метод OpenRecordset, позволяющий установить связь с таблицей базы данных.
OpenRecordset( Name [, Type] [, Options] [, LoskEdit] )
Name – имя или индекс открываемой таблицы, или имя запроса. Так же в Name может использоваться инструкция языка SQL в строковом формате
Type – определяет тип открываемого объекта, в качестве аргумента используется константа, например, dbOpenTable –открытие табличного объекта
Options – определяет работу пользователя с объектом , в качестве аргумента используется константа, например, DbAppendOnly – пользователь может добавлять записи в таблицу, но не может изменять уже существующие записи таблицы.
LoskEdit – устанавливает тип блокировки данных открываемой таблицы для других приложений или для другой переменной Databаse, в качестве аргумента используется константа, например, dbReadOnly – таблица открывается только для чтения.
Объект типа Recordset предназначен для связи с таблицами базы данных. Он имеет ряд свойств и методов предназначенных для обработки таблиц.
Свойства объекта Recordset |
||
Имя свойства |
Тип свойства |
Назначение свойства |
EOF |
Логический |
Определяет положение указателя в перебираемых записях таблицы. Свойство равно True если указатель находится за последней записью таблицы, и False – в противном случаи |
BOF |
Логический |
Определяет положение указателя в перебираемых записях таблицы. Свойство равно True если указатель находится перед первой записью таблицы, и False – в противном случаи |
RecordCount |
Числовой |
Количество записей в таблице. Индекс первой записи в таблице равен 0. |
.Fields( _ "Имя поля").Value
|
Универсальный |
Fields прямой потомок объекта Recordset через свойсво Value которого связываются с полем текущей записи. Во входном параметре данного объекта записывается имя или индекс поля. |
Методы объекта Recordset |
|
Имя метода |
Назначение метода |
MoveFirst |
Переместится на первую запись таблицы |
MoveLast |
Переместится на последнюю запись таблицы |
MoveNext |
Переместится на следующую запись таблицы |
MovePrevious |
Переместится на предыдущую запись таблицы |
Move N _ [ ,Закладка ] |
Переместиться на N позиций от текущей записи, или от закладки, если она указанна во входном параметре. N может иметь значения больше и меньше нуля, а так же быть равным нулю. Закладка создается через метод-свойство BookMark. |
AddNew |
Добавить новую запись в таблицу. После внесения изменений в новую запись необходимо сохранить их методом Update. (Перед внесением изменений в новую запись не нужно включать разрешение на ее редактирование методом Edit) |
Delete |
Удалить текущую запись в таблицы |
Edit |
Метод, разрешающий внести изменения в текущую запись таблицы. После внесения изменений необходимо сохранить их методом Update |
Bookmark |
Устанавливает значение закладки в строковую переменную, и вызывает перемещение к указанной закладке: ‘запомнить закладку (текущую запись в таблице) S = ИмяОбъектаRecordset.Bookmark ‘переместится на закладку ИмяОбъектаRecordset.Bookmark = S Закладок может быть сколько угодно. В закладке содержится не индекс записи, а указатель на запись. Если запись сменила свой индекс, в результате удаления перед ней другой записи, закладка все равно вызовет переход к той записи, на которую она указывала. Форматы некоторых баз данных не позволяют установить закладку на запись таблицы. Определить возможность установки закладки можно через логическое свойство Bookmarkable переменной типа Recordset. Это свойство равно True если есть возможность установки закладки, и False в противном случаи. |
Update |
Обновить текущую запись |
Сlose |
Закрыть доступ к таблице базы данных и снять с нее указатель |
Пример использования методов и свойств объектов, предназначенных для связи с базой данных:
‘Объявляем переменную для ссылки на базу данных
Dim db As Database
‘Объявляем переменную для ссылки на таблицу базы данных
Dim r As Recordset
‘Устанавливаем указатель на базу данных
Set db = _
OpenDatabase("D:\Примеры VBA\VBA for access\Автозаполнение пола.mdb")
‘Устанавливаем указатель на таблицу бызы данных
Set r = db.OpenRecordset("Таблица1")
'переходим на первую запись таблицы
r.MoveFirst
'цикл опроса записей
Do While Not r.EOF
‘читаем значение поля в текущей записи
s = r.Fields("Имя").Value
‘включаем разрешение на редактирование текущей записи
r.Edit
‘изменяем значение поля в текущей записи
r.Fields("Имя").Value = s
‘запоминаем изменения текущей записи
r .Update
'переходим на последующую запись
r.MoveNext
Loop
‘закрываем доступ к таблице базы данных
r.Close
‘закрываем базу данных
db.Close
В данном примере рассмотрено как обращать к записям таблицы базы данных, но иногда необходимо иметь доступ к именам полей таблиц базы данных через свойства объекта Fields, который является прямым потомком объекта типа Recordset.
Свойства объекта Fields |
||
Имя свойства |
Пример вызова |
Назначение свойства |
Count |
ИмяРодителя.Fields.Count |
Определяет количество полей в таблице, индекс последнего поля таблицы равен ИмяРодителя.Fields.Count –1 |
Name |
ИмяРодителя.Fields( _ ИндексПоля).Name |
Определяет имя поля по указанному индексу. Индекс полей начинается с 0. |
Value |
ИмяРодителя.Fields( _ ИндексПоля).Value ИмяРодителя.Fields( _ ИмяПоля).Value |
Определяет значение поля в текущей записи таблицы по указанному индексу или имени поля. |
Иногда необходимо узнать имена таблиц базы данных, а так же иметь доступ к именам, и к тексту запросов базы данных. Такой доступ обеспечивается через объектные переменные типа TableDef и QueryDef. Через свойства Name этих объектов узнается имя соответствующего объекта. Через свойство SQL объекта QueryDef можно узнать текст соответствующего запроса. Можно просмотреть указанные нами объекты при помощи цикла For each.
‘резервируем необходимые переменные
Dim db As Database
Dim tbl As TableDef
Dim qry As QueryDef
'Устанавливаем указатель на базу данных
Set db = OpenDatabase(ИмяБазы)
For Each tbl In db.TableDefs
If Left(tbl.Name, 4) <> "MSys" And Left(tbl.Name, 4) <> "USys" Then
‘Выводим в окно отладки имена всех таблиц, кроме системных
Debug.Print tbl.Name
End If
Next tbl
For Each qry In db.QueryDefs
If InStr(qry.Name, "~") = 0 Then
‘Выводим в окно отладки имена всех запросов, кроме системных
Debug.Print qry.Name
End If
Next qry