Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA For Excel Часть 02.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1.08 Mб
Скачать

Связь с базой данных через указатели

С базой данных можно связаться через объектные переменные. Переменную типа 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]