2014-08-28 30 views
13

VBA'da bir kayıt kümesini çoğaltma veya kopyalama yolunu araştırıyorum. Ve demek istediğim, birbirinden bağımsız veriye sahip olmak.Derin Kopya veya VBA'da bir ADODB kayıt kümesini kopyalayın

Ben diğer modifiye etmeden bir kayıt modifiye olamaz

Set copyRS = origRS.Clone 
Set copyRS = origRS 

I yöntemlerden herhangi birini kullanmak

çalıştılar. Bu örnekte Yani:

  1. Ben bir kayıt oluşturmak
  2. ben Recordset klon John
  3. adıyla kayıt doldurmak
  4. Ben klonlanmış bir
  5. Kontrol bir sonuç
değiştirmek

Kod:

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) 

Ama ne yazık ki benim için bu değiştirir hem recordsets

Sorum şu:

başka kayıt kümesinden bir kayıt kümesi kopyalama bir yolu var mı ve sonra (döngü olmadan) birbirinden bağımsız verileri değiştirmek?

Ben açıkça bir döngü üzerinden yapabilirsiniz biliyorum, ama başka yolu yoktur

?

cevap

22

++ İyi soru! Btw. Bu şekilde kopyalama nesnesi deep copy olarak adlandırılır.

Genellikle bir ADODB.Stream oluşturma ve içine geçerli recordset tasarrufu paçayı.

Ardından, Yeni kümesinin .Open() yöntemi kullanmak ve ona akışı geçebilir. Örneğin

: beklendiği gibi

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 

Sonuçlar:

enter image description here

+1

Parlak !! Bunu uzun zamandır arıyordum! –

İlgili konular