Замечания
Объект Recordset представляет набор записей в основной таблице или набор записей, который получается в результате выполнения запроса.
Объекты Recordset используются для обработки данных в базе данных на уровне записи. При работе с объектами доступа к данным (DAO) почти все операции выполняются с помощью объектов Recordset. Каждый объект Recordset состоит из записей (строк) и полей (столбцов). Существуют объекты Recordset пяти типов:
- Объект Recordset типа таблицы — программное представление основной таблицы; используется для добавления, изменения или удаления записей из отдельной таблицы базы данных (только в рабочей области Microsoft Jet).
- Объект Recordset типа динамического набора записей — набор обновляемых записей, полученный в результате выполнения запроса. Объект Recordset типа динамического набора записей позволяет добавлять, изменять или удалять записи в основной таблице или таблицах. В объекте Recordset этого типа динамического набора могут содержаться поля из одной или нескольких таблиц базы данных. Этот тип объектов соответствует указателю ключевого набора записей ODBC.
- Объект Recordset типа статического набора записей — статическая копия набора записей, используемая для поиска данных или создания отчетов. Объект Recordset типа статического набора записей может содержать поля из одной или нескольких таблиц базы данных, но не допускает обновления полей. Этот тип объектов соответствует указателю статического набора записей ODBC.
- Объект Recordset типа статического набора записей с последовательным доступом — аналогичен статическому набору записей с тем лишь исключением, что в нем отсутствует указатель. Пользователь имеет возможность прокручивать записи только вперед. Это повышает быстродействие в ситуациях, когда достаточен однократный проход по набору записей. Этот тип объектов соответствует указателю набора записей с последовательным доступом ODBC.
- Объект Recordset динамического типа результирующий набор записей запроса по одной или нескольким основным таблицам, в котором допускается добавление, изменение или удаление записей. В таком объекте Recordset отображаются записи, добавляемые, удаляемые или изменяемые в основных таблицах другими пользователями. Этот тип объектов соответствует динамическому указателю ODBC (только в рабочей области ODBCDirect).
При создании нового объекта
Recordset тип объекта определяется с помощью аргумента тип метода
OpenRecordset.
В рабочей области
Microsoft Jet, если аргумент тип не задан, механизм
DAO пытается создать тип объекта
Recordset с максимально возможными функциональными характеристиками, начиная с таблицы. Если таблицу создать не удается, делается попытка создать динамический набор записей, затем статический набор записей и наконец, набор записей с последовательным доступом.
В рабочей области
ODBCDirect, если аргумент тип не задан, механизм
DAO пытается создать тип объекта
Recordset, обеспечивающий максимально быстрое выполнение запроса, начиная с набора записей с последовательным доступом. Если объект этого типа создать невозможно, механизм
DAO делает попытку создать статический набор записей, затем динамический набор записей, и наконец, объект
Recordset динамического типа.
При создании объекта
Recordset на основе неприсоединенного объекта
TableDef в рабочей области
Microsoft Jet создаются объекты
Recordset типа таблицы. На основе присоединенных таблиц или таблиц в базах данных
ODBC, подключенных к ядру
Microsoft Jet, могут быть созданы только объекты
Recordset типа динамического набора записей или статического набора записей.
Новый объект
Recordset автоматически добавляется в семейство
Recordsets при открытии объекта и автоматически удаляется из семейства при закрытии объекта.
При описании в программе объекта
Recordset и содержащего его объекта
Database с помощью объектных переменных необходимо обеспечить, чтобы эти переменные имели одинаковую область определения или одинаковое время жизни. Например, при описании общей переменной, представляющей объект
Recordset, необходимо обеспечить, чтобы переменная, представляющая объект
Database, содержащий объект
Recordset, также была общей, либо описать эту переменную в процедуре
Sub или
Function с ключевым словом
Static.
В приложении допускается определение произвольного числа объектных переменных, представляющих объект
Recordset. Разные объекты
Recordset могут иметь доступ к одним таблицам, запросам и полям без возникновения конфликтов.
Объекты
Recordset типа динамического набора записей, статического набора записей и статического набора записей с последовательным доступом сохраняются в локальной оперативной памяти. Если в оперативной памяти не хватает места, ядро базы данных
Microsoft Jet сохраняет избыточные данные в каталоге временных файлов на диске. Если и этот объем окажется недостаточным, возникает перехватываемая ошибка.
Объекты
Recordset по умолчанию помещаются в семейство
Fields. Используемым по умолчанию свойством объекта
Field является свойство
Value (значение). Эти используемые по умолчанию характеристики позволяют упростить программу.
Если созданный объект
Recordset содержит записи, то текущей записью становится первая запись. Если записи в объекте отсутствуют, свойство
RecordCount получает значение 0, а свойства
BOF и
EOF значение
True.
Изменить положение указателя текущей записи позволяют методы
MoveNext,
MovePrevious,
MoveFirst и
MoveLast. Для объектов
Recordset типа статического набора записей с последовательным доступом поддерживается только метод
MoveNext. При выполнении цикла по всем записям с помощью методов
Move ("прохода" по объекту
Recordset) свойства
BOF и
EOF используются для проверки начальной и конечной границы объекта
Recordset.
Для объектов
Recordset типа динамического статического набора записей в рабочей области
Microsoft Jet допускается также использование методов группы
Find, таких как
FindFirst, позволяющих найти запись, удовлетворяющую определенным условиям. Если запись не обнаруживается, свойство
NoMatch получает значение
True. Для объектов
Recordset типа таблицы допускается сканирование записей с помощью метода
Seek.
Тип созданного объекта
Recordset задается свойством
Type, а возможность изменения записей в объекте определяется свойством
Updatable.
Сведения о структуре основной таблицы, такие как имя и тип данных каждого поля (объект
Field) и индекса (объект
Index) сохраняются в объекте
TableDef.
При ссылках на объект
Recordset используют его порядковый номер в семействе или значение свойства
Name (имя):
Recordsets(0)
Recordsets("имя")
Recordsets![имя]
Для одного источника данных или базы данных допускается открытие нескольких объектов
Recordset, что приводит к образованию повторяющихся имен в семействе
Recordsets. В этом случае необходимо присваивать объекты
Recordset объектным переменным и ссылаться на них по именам переменных.
Пример
Следующая программа открывает объект Recordset типа статического набора записей с последовательным доступом, демонстрирует его доступность только для чтения, а затем осуществляет проход по объекту Recordset с помощью метода MoveNext.
Sub dbOpenForwardOnlyX()
Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Dim fldLoop As Field
Set dbsNorthwind = OpenDatabase("Борей.mdb")
' Открывает набор записей с последовательным доступом.
' Для перемещения по этому объекту Recordset могут
' использоваться только методы MoveNext и Move.
Set rstEmployees = dbsNorthwind.OpenRecordset("Сотрудники", dbOpenForwardOnly)
With rstEmployees
Debug.Print "Набора записей с последовательным доступом: " & .Name & ", Updatable = " & .Updatable
Debug.Print " Field - DataUpdatable"
' Отображает семейство Fields, печатает свойства Name
' и DataUpdatable каждого объекта Field.
For Each fldLoop In .Fields
Debug.Print " " & fldLoop.Name & " - " & fldLoop.DataUpdatable
Next fldLoop
Debug.Print " Данные"
' Печатает данные из набора записей.
Do While Not .EOF
Debug.Print " " & !Имя & " " & !Фамилия
.MoveNext
Loop
.Close
End With
dbsNorthwind.Close
End Sub