Usas un esquema de paginacion:
limit
offset
donde limit es la cantidad de registros a devolver y offset indica a partir de que registro empiezas a traerte los datos. Seria algo asi:
;WITH datos AS (
SELECT
columna, columna, ..., columna,
RANK() OVER (ORDER BY columna [DESC]) AS offset
FROM
tabla
) SELECT TOP ?limit *
FROM datos
WHERE offset >= ?offset
ORDER BY columna [DESC]
Entonces, la primera vez haces:
limit = 50
offset = 1
SQLEXEC(conn, query, cursor)
y de ahi en adelante haces:
IF RECCOUNT("cursor") = limit
offset = offset + limit
SQLEXEC(conn, query, cursor)
ELSE
MESSAGEBOX("No hay mas datos")
ENDIF
Saludos
Victor Espina