El código que usas puede ser algo lento con miles de registros, pero quizá te baste con resolver el error que dices.
La pregunta de los 64 mil gatitos resucitados: ¿qué mensaje de error exacto te aparece y en qué parte del código se detiene el programa cuando ese error ocurre?
Consejo: Cuando te aparezca una ventana de error en Delphi puedes presionar Ctrl+C (copiar) para llevar el texto del error al portapapeles y luego pegarlo aquí fácilmente.
Copiar y pegar, vaya, sin necesidad de seleccionar el texto de la ventana de error.
Por otra parte, considera que estás poniendo en memoria más de un millón de registros, y eso es mucho trabajo para cualquier componente de datos. Si el error es por falta de memoria, puede que hacer la operación por bloques (de manera que nunca haya más de unos cientos de registros en memoria) o emitiendo sentencias SQL
Insert Into directas al servidor sean buenas alternativas.
Un abrazo de proporciones bíblicas.
Al González.
