Шаг 117 - Метод Clone

Описание
Создает копию объекта Recordset, которая связана с исходным объектом.

Set копия = оригинал.Clone

Параметры
копия
Объектная переменная, определяющая создаваемую копию объекта Recordset.
оригинал
Объектная переменная, задающая копируемый объект Recordset.

Замечания
Метод Clone используется для создания нескольких копий объекта Recordset. Каждый объект Recordset может иметь свою собственную текущую запись. Использование метода Clone само по себе не вызывает изменения данных в объектах или изменения их структуры. С помощью метода Clone создают общие взаимозаменяемые закладки для двух или нескольких наборов записей.
Метод Clone применяют в том случае, когда необходимо выполнить операцию с объектом Recordset, затрагивающую сразу несколько текущих записей. Работа с копией объекта является более быстрой и более эффективной, чем создание второго независимого объекта Recordset. Набор записей, созданный с помощью метода Clone, первоначально не имеет текущей записи. Для создания текущей записи перед использованием копии объекта Recordset необходимо задать значение свойства Bookmark или применить один из методов группы Move, один из методов группы Find или метод Seek.
Применение метода Close к одному из объектов (оригиналу или копии) не влияет на второй объект. Например, вызов Close для исходного объекта Recordset не приводит к закрытию копии.
Закрытие копии объекта Recordset с незавершенной транзакцией приводит к неявному вызову метода Rollback.
При создании копии объекта Recordset табличного типа в рабочей области ядра Microsoft Jet свойство Index не копируется в новую копию объекта Recordset. Свойство Index необходимо копировать явным образом.
Применение метода Clone к объектам Recordset с последовательным доступом допускается только в рабочей области ODBCDirect.

Пример
Следующая программа использует метод Clone для создания копии объекта Recordset, после чего позволяет пользователю независимо установить указатель записи в каждой копии.

Sub CloneX()

	Dim dbsNorthwind As Database
	Dim arstProducts(1 To 3) As Recordset
	Dim intLoop As Integer
	Dim strMessage As String
	Dim strFind As String

	Set dbsNorthwind = OpenDatabase("Борей.mdb")

	' Если предполагается часть использовать инструкцию SQL, 
	' создание постоянного объекта QueryDef позволит
	' увеличить быстродействие.
	Set arstProducts(1) = dbsNorthwind.OpenRecordset( "SELECT Марка FROM Товары " & "ORDER BY Марка", dbOpenSnapshot)
	' Создает две копии исходного объекта Recordset.
	Set arstProducts(2) = arstProducts(1).Clone
	Set arstProducts(3) = arstProducts(1).Clone

	Do While True

		' Выполняет цикл по массиву, в котором на каждом
		' проходе ищется другая копия того же объекта 
		' Recordset.
		For intLoop = 1 To 3

			' Приглашает ввести строку поиска, показывая положение
			' указателя текущей записи для каждого объекта Recordset.
			strMessage = "Объекты Recordset для таблицы 'Товары':" & vbCr & 	"  1 - Оригинал - Указатель записи на " & _
				arstProducts(1)!Марка & vbCr & 	"  2 - Копия - Указатель записи на " & _
				arstProducts(2)!Марка & vbCr & 	"  3 - Копия - Указатель записи на " & _
				arstProducts(3)!Марка & vbCr & 	"Введите строку поиска для #" & intLoop & ":"
			strFind = Trim(InputBox(strMessage))
			If strFind = "" Then Exit Do

			' Находит строку поиска; при отсутствии совпадения
			' переходит на последнюю запись.
			With arstProducts(intLoop)
				.FindFirst "Марка >= '" & strFind & "'"
				If .NoMatch Then .MoveLast
			End With
		Next intLoop
	Loop

	arstProducts(1).Close
	arstProducts(2).Close
	arstProducts(3).Close
	dbsNorthwind.Close

End Sub

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 22.03.2002