Funciona mais ou menos assim:
Usando o cursor no cliente, cada requisição ao banco de dados é toda passada à um buffer local e depois o retorno é dado a partir do buffer para o requisitante, isso faz com que algumas funções fiquem mais lentas, mas tem a vantagem de oferecer algumas informações que o servidor não pode fornecer.
Usando o servidor, a resposta é direta do ODBC para o aplicativo cliente, isso torna a resposta mais rápida, porém muitas informações o servidor ignora e essa é a razão de vc não ter o número de registros.
Claro que tem muitos outros detalhes, mas o básico é isso.