In my little experience, running queries are faster than recordset approaches. I would try experimenting with such approaches, if possible.
To assign one recordset to another, you should be able to do that using the .clone method of the recordset:
[tt]set newrs = rs.clone[/tt]
and depending on the properties of it, use the .Filter property to limit the records of it.
I think you could also populate a disconnected recordset, perhaps something along these lines (you'd probably need some testing/errortraps on this thrown together sample...).
[tt]' rs is your current recordset, where you've issued a .filter
dim rsDis as adodb.recordset
dim lngCount as long
set rsDis = new adodb.recordset
for lngCount = 0 to rs.fields.count-1
' loop through "old" recordset, fetch the relevant (hopefully)
' properties, and create a disconnected recordset
select case rs.fields(lngCount).type
case advarwchar,adlongvarwchar
rsdis.fields.append rs.fields(lngCount).name, rs.fields(lngCount).Type, _
rs.fields(lngCount).definedsize, adfieldisnullable
case else
rsdis.fields.append rs.fields(lngCount).name, rs.fields(lngCount).Type
end select
next lngCount
rsDis.Open
' open and populate the disconnected recordset with
' values from the (filtered) "old" recordset
do while not rs.eof
for lngCount = 0 to rs.fields.count-1
rsdis.fields(lngCount).value = rs.fields(lngCount).value
next lngCount
rs.movenext
loop[/tt]
Roy-Vidar