Scusa, ma non mi è chiaro quello che cerchi di fare.
Esegui una prima query ricavandoti un recordset che ti serve per
comporre una seconda query per l'estrazione di un altro recordset.
Giusto?
codice:
    cs.CursorLocation = adUseClient
    cs.Open provider

    ' Prova ad impostare anche la connessione con cursore lato Client
    con.CursorLocation = adUseClient
    con.Open providera

    ' La proprietà per i recordset è CursorType 
    rs.CursorType = adOpenKeyset
    ' 1a query
    rs.Open "Select * from [anagclienti]", cs, 3, 3

    res.CursorType = adOpenKeyset

    ' Questa è inutile 
    ' res.Open "Select * from [acconti_cliente]", con, 3, 3

    rs.MoveFirst
        Do
            ' 2a query   
            res.Open "Select * from acconti_cliente where ragionesociale = '" & rs.Fields("ragionesociale").Value & "'", con, 3, 3
            If res.RecordCount = 0 Then GoTo Loppata

        .....
        .....
Prova a ricavare il recordest con res.Open e non con con.Execute,
come nell'esempio.

Ciao,