| ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
Работа с базами данных с помощью DAO Введение
Всё больше программ использует для хранения данных базы данных. Один из инструментов для работы с базами данных - библиотека DAO (Data Access Objects). О ней и пойдёт речь в этой статье. Выборка данных Как осуществить выборку данных? Сначала объявляем переменные. Dim db As DAO.Database 'Объявляем базу данных Dim rs As DAO.Recordset 'Объявляем рекордсет Dim sSQL As String 'Переменная, где будет размещён SQL запрос Открываем базу данных. Для этого вызываем метод OpenDatabase, и в качестве параметра передаём полный путь и имя файла базы данных. Обратите внимание, что db - это объект и поэтому пишем ключевое слово Set. Set db = DAO.OpenDatabase ("C:\db.mdb")
Формируем строку SQL запроса. Допустим, нам нужно получить все поля таблицы Orders. sSQL = "SELECT * FROM Orders;"
Теперь открываем рекордсет. Для этого вызываем метод OpenRecordset объекта db с первым параметром - SQL запросом. У этого объекта есть ещё 3 необязательных параметра.
Значение по умолчанию для параметра type - dbOpenTable.
Set rs = db.OpenRecordset (sSQL)
Рекордсет открыт. Информация, выбранная из базы данных, находится в объекте rs. Теперь нам нужно достать оттуда данные. Для передвижения по записям в объекте типа RecordSet используется 5 методов:
Также пригодятся свойства BOF и EOF.
Текущая запись находится в классе Fields. With rs .MoveFirst 'Перемещаемся к первой записи Do While Not .EOF 'Выполнять пока есть записи Debug.Print .Fields (0) 'Достаем значение текущей записи для поля номер 0 Debug.Print .Fields (1) 'Достаем значение текущей записи для поля номер 1 Debug.Print .Fields (2) 'Достаем значение текущей записи для поля номер 2 ': .MoveNext 'Перемещаемся к следующей записи Loop End With Вместо Debug.Print естественно можно поставить и оператор присваивания (=) a = .Fields (0)
Закрываем рекордсет и базу данных rs.CloseВ конце процедуры для того, чтобы освободить память пишем Set rs = Nothing Set db = Nothing Добавление и изменение записей
Для добавления и изменения записей используется похожая технология. Dim db As DAO.Database 'Объявляем базу данных
Для добавления записи используется метод AddNew объекта типа Recordset. rs.AddNew
Теперь запись добавлена, и мы заполняем все поля для данной записи. rs.Fields (0) = "Значение 1"
Обновляем рекордсет. rs.Update
Закрываем рекордсет и базу данных и освобождаем память. rs.Close
Код для изменения записи очень похож на предыдущий код. Для изменения записи используется метод Edit. Также нужно изменить SQL запрос и сделать его примерно таким: SELECT * FROM Orders WHERE ID = 23;
Предполагается наличие поля ID, тип которого числовой и его значение уникально для каждой записи. В данном случае мы будем изменять запись значение поля ID которой равно 23. Dim db As DAO.Database 'Объявляем базу данных Dim rs As DAO.Recordset 'Объявляем рекордсет Dim sSQL As String 'Переменная, где будет размещён SQL запрос Set db = DAO.OpenDatabase ("C:\db.mdb") 'Открываем базу sSQL = "SELECT * FROM Orders;" 'Формируем запрос Set rs = db.OpenRecordset (sSQL) 'Открываем рекордсет rs.Edit 'Редактируем запись 'Ставим новые значения rs.Fields (0) = "Значение 1" rs.Fields (1) = "Значение 2" ': rs.Update 'Обновляем рекордсет 'Закрываем рекордсет и базу данных rs.Close db.Close 'Освобождаем память Set rs = Nothing Set db = Nothing Удаление записи
Удаление записи можно произвести двумя путями. Первый путь - исполнение SQL запроса с командой DELETE. Идентифицировать запись будем по полю ID. Предполагается, что значения поля ID уникальны для каждой записи. Удаляем запись, ID которой равно 5. Dim db As DAO.Database 'Объявляем базу данных
Рекордсет открывать не нужно, так как нам не надо получать данные из базы. Для исполнения запроса мы используем метод Execute объекта типа Database. Он имеет 2 параметра. Первый параметр Query - строка исполняемого запроса. Второй необязательный параметр options - константа или комбинация констант, отражающая характеристики исполняемого запроса. db.Execute sSQL
Второй способ удаления записи заключается в использовании метода Delete объекта типа Recordset. Этот метод удаляет текущую запись. Он не имеет параметров. rs.Delete Количество записей и номер текущей записи
Для определения количества записей в рекордсете используется свойство RecordCount объекта типа Recordset. Но есть небольшая неувязочка... Если рекордсет типа Dynaset, Snapshot или ForwardOnly, то свойство RecordCount покажет число записей, только при достижении последней записи. В этом случае нужно сразу переместиться к концу рекордсета. rs.MoveLast
Номер текущей записи определяется с помощью свойства AbsolutePosition. Отсчёт начинается с нуля. Т.е. если текущая запись - первая, то AbsolutePosistion покажет 0. Если текущая запись находится до первой или после последней, то свойство AbsolutePosition покажет -1. Debug.Print "Количество записей " & CStr (rs.RecordCount) Пример работы с DAO можно взять здесь. |
|
| ||||||||||||||||
|