Just to go on a bit more about the decision process between the two.
Banana's description of a the cursor
types essentially says it all - but you're only going to get that choice in a server side cursor. (The actual choices and returned types if you don't correctly adhere to those choices varies with the provider employed).
With a Client side cursor, I'm aware of no provider that returns other than a Static cursor type. (But I don't use that many really).
While this may appear limiting - it's due to the fact that, client side, ADO is providing the cursor service. Upon opening the recordset you're copying the actual data locally into that ADO cursor service. (As you can imagine - if that's a big recordset - then that's a big memory footprint and time to execute).
So why would you ever do this?
Well - one main advantage of client side cursors is that they can be disconnected from their opening connection (by the virtue of that fact above).
This allows you to hold a set of records locally in memory - without maintaining a connection open on the server. (Depending slightly upon the statement you've used to open the recordset - there's a bug in ADO this regard, but it's small and fairly unlikely to be encountered).
Just don't confuse Client Side with the resulting Static Cursor type.
Loading that data
locally is a result of the service being Client Side. Filling of the cursor with all records is due to the Static type (so it could still take a good while to fill - it's just not ADO supplying the service and memory).
It's actually quite hard to get a Static cursor type when working with a Server Side cursor - but it's possible. And so should only be done with good reason and an awareness of the consequences.
(As always with client server development - be kind to your server and network!
Bear in mind through all of this that, in Jet, the db engine is running on the local machine anyway. So even a server side cursor is running locally - just under the
jurisdiction of the engine.
Cheers.