I have dealt with this very situation many years ago (10+ years ago) and
have spent a great deal of time experimenting with ways to bypass
looping. My findings/results are as follows: This type of
functionality can be achieved by using the OpenRowset() function of sql
server. This will bring in a dataset from the sql server to the Access
mdb in one shot -- that is -- populate a receiving table in the Access
mdb in one shot without looping through the query. Here are the
caveats: The OpenRowset() function only works on the machine where the
sql server (engine) is installed. It does not work remotely. The
other caveat is that OpenRowSet() is manipulated through ADO and not a
passthrough query.
Note: ADO.Net is all about this very issue of transferring data from a
sql server to another application (a .Net application, Access,
Excel,...) in one shot and has very successfully achieved this
functionality. As a matter of fact, .Net has a whole new paradigm
called "Linq To Sql Entities" which takes this issue to a whole new
level of simplicity (for the computer - not the human

. But this is
in the .Net world.
In Access you are resigned to looping if the sql server engine is not
installed on your local machine (server) and you can't use OpenRowSet().
You will read the contents of your passthrough query into a Recordset
object and then populate a receiving table BY looping through the
recordset object. Then you can perform the DoCmd.TransferText operation
from the receiving table.
Rich
*** Sent via Developersdex http://www.developersdex.com ***