Есть несколько способов значительно улучшить производительность объектов ADODB.Recordset. Один из лучших советов, которые я использовал для ускорения, - это создание явных полей объектов в вашем цикле:
Dim rs As New ADODB.Recordset
Dim fldLastName As ADODB.Field, fldFirstName As ADODB.Field
rs.Open "SELECT au_lname, au_fname FROM authors", "DSN=pubs", , , adCmdText
Set fldLastName = rs.Fields("au_lname")
Set fldFirstName = rs.Fields("au_fname")
Do Until rs.EOF
csvOutput = csvOutput & fldLastName & "," & fldFirstName & vbCrLf
rs.MoveNext
Loop
rs.Close
Это действительно может ускорить процесс, поскольку вы избегаете позднего связывания при обращении к элементам Recordset.Field.Value. Попробуйте, и вы увидите значительное улучшение производительности. Я работал с большими наборами записей, такими как описанный вами, и с помощью этой техники производительность была сносной.
Кстати, есть хорошая статья о MSDN, в которой есть некоторые другие советы, которые могут помочь улучшить производительность вашего кода ADODB - Рекомендации по производительности ADO . Сейчас эта статья довольно старая, но я думаю, что она все еще применима после прочтения ее впервые за многие годы.