我一直在寻找一种在VBA中复制或复制记录集的方法。我的意思是,让不正确的数据相互独立。
我试过了
Set copyRS = origRS.Clone
Set copyRS = origRS
当我使用任何方法时,我无法修改一个记录集而不修改另一个记录集。所以在这个例子中:
代码:
Dim origRS As Recordset, copyRS As Recordset
Set origRS = New Recordset
'Create field
origRS.Fields.Append "Name", adChar, 10, adFldUpdatable
origRS.Open
'Add name
origRS.AddNew "Name", "John"
'Clone/copy
Set copyRS = origRS.Clone
'Change record in cloned/copied recordset
copyRS.MoveFirst
copyRS!Name = "James"
'This should give me "JamesJohn"
MsgBox copyRS.Fields(0).Value & origRS.Fields(0)
但不幸的是,这会修改两个记录集
我的问题是:
有没有办法从另一个记录集复制记录集,然后彼此独立地修改数据(没有循环)?
我知道显然你可以通过一个循环来完成它,但没有别的办法吗?
答案 0 :(得分:24)
++好问题!顺便说一句。这种复制对象的方式称为deep copy。
我通常会创建ADODB.Stream
并将当前记录集保存到其中。
然后,您可以使用新记录集的.Open()
方法并将流传递给它。
例如:
Sub Main()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Fields.Append "Name", adChar, 10, adFldUpdatable
rs.Open
rs.AddNew "Name", "John"
Dim strm As ADODB.Stream
Set strm = New ADODB.Stream
rs.Save strm
Dim copy As New ADODB.Recordset
copy.Open strm
copy!Name = "hellow"
Debug.Print "orignal recordset: " & rs.Fields(0).Value
Debug.Print "copied recordset: " & copy.Fields(0).Value
strm.Close
rs.Close
copy.Close
Set strm = Nothing
Set rs = Nothing
Set copy = Nothing
End Sub
预期结果: