我一直在寻找一种在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)
但不幸的是,这修改了两个记录集
我的问题是:
有没有一种方法可以从另一个记录集复制一个记录集,然后彼此独立地修改数据(无循环)?
我知道您显然可以通过循环来完成此操作,但是没有其他方法吗?
最佳答案
++好问题!顺便说一句这种复制对象的方式称为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
预期结果:
关于excel - 在VBA中深度复制或克隆ADODB记录集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25553594/