Описание
Создает копию объекта 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