Fazendo uma cópia de um Recordset ADO. 

Vamos mostrar como fazer uma cópia de um recordset ADO usando código. A dica é salvar os registros do recordset no formato XML e então abrir um segundo recordset usando o arquivo gerado.

Vamos usar uma conexão com o SQL Server 2000 e abrir  a tabela Authors do banco de dados Pubs. A seguir vamos filtrar alguns autores , usando um critério , para em seguida fazer a cópia deste recordset gerado  usando ADO Stream . Depois é só abrir um novo recordset e abrir o arquivo gerado.

Nota: A string de conexão usada é a seguinte: oConn.Open "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pubs;User ID=sa;Password=;" 

1-) Inicie um novo projeto no Visual Basic e no formulário padrão insira um botão de comando e duas caixas de textos e labels conforme no layout abaixo: 

Agora insira o seguinte código  no botão de comando :

Private Sub Command1_Click()

Dim oConn As ADODB.Connection
Dim oRs As ADODB.Recordset
Dim oStm As ADODB.Stream
Dim oRs2 As ADODB.Recordset

' Cria e abre uma nova conexão
Set oConn = New ADODB.Connection 
oConn.Open "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pubs;User ID=sa;Password=;"

' Cria e abre um novo recordset baseado na tabela Authors do banco de dados Pubs
Set oRs = New ADODB.Recordset
oRs.CursorLocation = adUseClient
oRs.Open "Select * From authors", oConn, adOpenStatic, adLockBatchOptimistic, adCmdText
Label5.Caption = oRs.RecordCount

' Filtra e exibe somente os autores com o criterio - state = 'CA'
oRs.Filter = "state = 'CA'"
Label6.Caption = oRs.RecordCount

' Salva os registros filtrados em um ADO Stream
Set oStm = New ADODB.Stream
oStm.Open
oRs.Save oStm, adPersistXML

' Cria um novo Recordset baseado no recordset inicial(via Stream)
Set oRs2 = New ADODB.Recordset
oRs2.Open oStm
Label1.Caption = oRs2.RecordCount  

End Sub

- oRs é o recordset gerado pela tabela Authors - Select * From authors

- Usamos a propriedade Filter do objeto recordset para selecionar alguns autores pelo critério: oRs.Filter = "state = 'CA'"

- Salvamos o recordset filtrado usando ADO Stream (XML) - oRs.Save oStm, adPersistXML

- Finalmente criamos um novo recordset e  abrimos o arquivo gerado no formato anterior- oRs2.Open oStm.

Obs: Exibimos a titulo de comparação a quantidade de registros para cada recordset usando : oRs.RecordCount   e   oRs2.RecordCount 

Acabamos de gerar uma cópia do recordset.   Até mais...