- •Основы программирования с использованием ado, доступ и работа с базами данных Access.
- •I. Два этапа подготовки работы с базами данных:
- •II. Практическая работа с базой данных:
- •Задания по работе с базой данных.
- •Доступ к данным из набора записей: Свойство Fields объекта Recordset.
- •Листинг 4. Извлечение данных из набора записей
- •Поиск записи.
- •Добавление новой записи
- •1. Извлечение значений из поля
- •2. Извлечение записей
Задания по работе с базой данных.
Листинг 1. Открытие таблицы базы данных
Sub Открытие_таблицы()
Dim нз As Recordset
'Создание обьекта Recordset
Set нз = CreateObject("ADODB.Recordset")
'Открытие обьекта
нз.Open "Сотрудники", "db1"
MsgBox нз("Имя")
нз.Close
Set нз = Nothing
End Sub
Листинг 2. Открытие объекта «Recordset» с предварительным заданием свойств
Sub Открытие_таблицы2()
Dim нз As Recordset
'Создание обьекта Recordset
Set нз = CreateObject("ADODB.Recordset")
'Открытие обьекта
With нз
.Source = "Сотрудники"
.ActiveConnection = "db1"
.Open
End With
MsgBox нз("Адрес")
'Закрытие обьекта
нз.Close
Set нз = Nothing
End Sub
Открытие набора записей с помощью оператора «SELECT», упрощенный синтаксис оператора SELECT:
SELECT [DISTINCT] - имена_полей
FROM - имя_табпицы
WHERE - критерий
ORDER BY - имена_полей[DESC];
DISTINCT - Это необязательное ключевое слово позволяет указать, что следует возвращать только уникальные записи (т.е. те, которые не повторяются);
Имена_полей - Если необходимо, чтобы набор записей содержал только определенные поля, введите названия этих полей через запятую. Чтобы набор записей содержал все поля, введите символ «*»
FROM имя_таблицы - Название таблицы, в которой содержатся требуемые данные
WHERE критерий - Здесь можно задать критерий, после чего в набор записей попадут только те записи, которые удовлетворяют этому критерию
ORDER BY имена_полей [DESC] - Здесь можно указать, что полученные результаты следует отсортировать в возрастающем порядке на основе полей, указанных в аргументе имена_полей (если сортировка проводится по нескольким полям, то они разделяются запятыми). Чтобы отсортировать полученные записи в убывающем порядке, следует ввести (необязательное) ключевое слово desc
Примеры использования оператора SELECT :
SELECT * FROM Сотрудники WHERE Страна='Россия' RDER BY Фамилия;
SELECT Марка, Цена FROM Товары WHERE Цена < 500;
Листинг 3. Открытие объекта «Recordset» с помощью оператора «SELECT»
Sub Открытие_запроса()
Dim нз As Recordset
Dim Выбор As String
'Создание обьекта Recordset
Set нз = CreateObject("ADODB.Recordset")
'Открытие обьекта
Выбор = "SELECT * FROM Типы WHERE Категория = 'Фрукты'"
нз.Open Выбор, "db1", adOpenKeyset
MsgBox нз("Категория")
'Закрытие обьекта
нз.Close
Set нз = Nothing
End Sub
Доступ к данным из набора записей: Свойство Fields объекта Recordset.
Recordset.Fields(FieldName)
Recordset Объект типа Recordset, с которым будем работать
FieldName Строка или строковая переменная, содержащая название поля, в котором хранятся искомые данные
Например: текущий_контакт = нз.Fields("ОбращатьсяК")
Листинг 4. Извлечение данных из набора записей
Sub Данные_набора_записей()
Dim нз As Recordset
Dim Выбор As String
'Создание обьекта Recordset
Set нз = CreateObject("ADODB.Recordset")
'Открытие обьекта
Выбор = "Select * FROM Клиенты where Страна='Канада'" & "Order By Название;"
нз.Open Выбор, "db1", adOpenKeyset
MsgBox нз("ОбращатьсяК") & "," & нз("Название")
'Закрытие обьекта
нз.Close
Set нз = Nothing
End Sub
Перемещение по записям
свойство Fields возвращает данные из текущей записи.
После первого открытия набора записей текущей является первая запись.
Способы перемещения по записям, которые используются чаще всего:
Recordset.MoveFirst. Перемещает к первой записи указанного набора записей.
Recordset.MoveLast. Перемещает к последней записи объекта
Recordset.MoveNext. Перемещает к следующей записи объекта
Recordset.MovePrevious. Перемещает к предыдущей записи объекта Recordset
С помощью этих способов изменяется значение, которое указывает на текущую запись.
Две исключительные ситуации:
Первая запись является текущей, и вызывается метод MovePrevious.
Последняя запись является текущей, и вызывается метод MoveNext.
сообщение об ошибке, которое начинается со слов Either BOF or EOF is True
Recordset.bof. Возвращает значение True, если указатель находится перед первой записью объекта Recordset
Recordset.EOF. Возвращает True, если указатель находится после последней записи объекта Recordset
Чтобы избежать ошибок, в процедурах следует проводить проверку значений этих свойств.
Например,
нз.MoveNext
If нз.ЕОF Then
нз.MoveFirst
End If
метод Move - переносит указатель на заданное количество записей от текущей.
Recordset.Move MoveRecords, Start
Recordset Объект типа Recordset, с которым работаем
MoveRecords Число записей, на которое нужно переместить указатель. Положительные значения используются для перемещения вперед, а отрицательные — назад
Start Необязательный аргумент, который определяет начальную запись, начиная с которой выполняется перемещение
Аргумент Start должен включать название переменной типа Variant, которая содержит закладку. В закладке хранится расположение записи в наборе записей.
свойство Bookmark объекта Recordset – позволяет установить и просмотреть закладки - всегда указывает на текущую запись.
Пример: два оператора выполняют одно и то же действие:
нз.Bookmark = закладка
нз.Move 0, закладка
Листинг 5. Перемещение по набору записей с использованием закладки
Sub Перемещение()
Dim нз As Recordset
Dim строка_SELECT As String
Dim закладка As Variant
' Создание объекта Recordset
Set нз = CreateObject("ADODB.Recordset")
' Открытие объекта
строка_SELECT = "SELECT * FROM Клиенты"
нз.Open строка_SELECT, "db1", adOpenKeyset
' Перемещение и сохранение текущей записи как
' закладки. Вывод на экран данных.
нз.Move 3
закладка = нз.Bookmark
MsgBox нз("ОбращатьсяК") & "," & нз("Название")
' Перемещение текущей записи
нз.Move -2
MsgBox нз("ОбращатьсяК") & "," & нз("Название")
' Перемещение относительно закладки
нз.Move 5, закладка
MsgBox нз("ОбращатьсяК") & "," & нз("Название")
' Перемещение к закладке
нз.Bookmark = закладка
MsgBox нз("ОбращатьсяК") & "," & нз("Название")
' Закрытие объекта
нз.Close
Set нз = Nothing
End Sub