Carlos, la nueva captura cambia el diagnóstico: ahora sí se ha abierto MYTMP con las columnas del SELECT. En el código que muestras, ese browse solo se ejecuta cuando AdsExecuteSQLDirect devuelve .T.; por tanto, este intento ya no es el fallo de ejecución anterior, sino un resultado sin filas visibles.
La consulta nueva lleva WHERE num_ciud=2. En la parte visible de la captura de USE aparecen valores 10, 6, 5, 7, 9 y 11 para num_ciud, pero no 2. Eso no demuestra que no exista un 2 en el resto de la tabla, aunque sí explica por qué no podemos comparar ambas imágenes como si fueran la misma selección.
En esa misma copia y conexión fresca, compara ahora el SELECT de rutas sin WHERE con el que filtra num_ciud=10, valor que sí se ve en tu captura. Si devuelven filas, el cursor SQL está funcionando en ese ensayo y habrá que separar el caso anterior que devolvía 7200 de esta consulta filtrada. Si el SELECT sin WHERE sigue vacío mientras USE muestra registros, ese será el mínimo concreto a investigar.
Quedan anotados los ZIP v1.09.74 x64 para servidor y x86 para cliente, AdsVersion() = 1.9a y la creación del statement correcta. No doy por resuelto todavía el error anterior ni atribuyo la diferencia a CLOSE ALL sin una comparación equivalente.