Метод Recordset2.Clone (DAO)
Область применения: Access 2013, Office 2013
Создает повторяющийся объект Recordset , который ссылается на исходный объект Recordset2 .
Синтаксис
выражение .Clone
Выражение Переменная, представляющая объект Recordset2 .
Возвращаемое значение
Recordset
Примечания
Метод Clone используется для создания нескольких дублированных объектов Recordset. Каждый набор записей может иметь собственную текущую запись. Сам по себе метод Clone не меняет данные в объектах и их базовых структурах. При использовании метода Clone можно совместно использовать закладки между двумя или более объектами Recordset2 , так как их закладки являются взаимозаменяемыми.
Метод Clone можно использовать, если требуется выполнить операцию с набором записей, для которого требуется несколько текущих записей. Это быстрее и эффективнее, чем открытие второго набора записей. При создании набора записей с помощью метода Clone ему изначально не хватает текущей записи. Чтобы сделать запись текущей перед использованием клона набора записей, необходимо задать свойство Bookmark или использовать один из методов Move , один из методов Find или Seek .
Использование метода Close для исходного или дублированного объекта не влияет на другой объект. Например, при использовании close в исходном наборе записей клон не закрывается.
Примечание.
- Закрытие клонированного набора записей в транзакции, ожидающей обработки, приведет к выполнению неявной операции Rollback.
- При клонировании объекта Recordset табличного типа в рабочей области Microsoft Access значение свойства Index не клонируется в новую копию набора записей. Значение свойства Index следует копировать вручную.
Пример
В этом примере метод Clone используется для создания копий набора записей, а затем позволяет пользователю размещать указатель записи для каждой копии независимо.
Sub CloneX()
Dim dbsNorthwind As Database
Dim arstProducts(1 To 3) As Recordset2
Dim intLoop As Integer
Dim strMessage As String
Dim strFind As String
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
' If the following SQL statement will be used often,
' creating a permanent QueryDef will result in better
' performance.
Set arstProducts(1) = dbsNorthwind.OpenRecordset( _
"SELECT ProductName FROM Products " & _
"ORDER BY ProductName", dbOpenSnapshot)
' Create two clones of the original Recordset.
Set arstProducts(2) = arstProducts(1).Clone
Set arstProducts(3) = arstProducts(1).Clone
Do While True
' Loop through the array so that on each pass, the
' user is searching a different copy of the same
' Recordset.
For intLoop = 1 To 3
' Ask for search string while showing where the
' current record pointer is for each Recordset.
strMessage = _
"Recordsets from Products table:" & vbCr & _
" 1 - Original - Record pointer at " & _
arstProducts(1)!ProductName & vbCr & _
" 2 - Clone - Record pointer at " & _
arstProducts(2)!ProductName & vbCr & _
" 3 - Clone - Record pointer at " & _
arstProducts(3)!ProductName & vbCr & _
"Enter search string for #" & intLoop & ":"
strFind = Trim(InputBox(strMessage))
If strFind = "" Then Exit Do
' Find the search string; if there's no match, jump
' to the last record.
With arstProducts(intLoop)
.FindFirst "ProductName >= '" & strFind & "'"
If .NoMatch Then .MoveLast
End With
Next intLoop
Loop
arstProducts(1).Close
arstProducts(2).Close
arstProducts(3).Close
dbsNorthwind.Close
End Sub