Bueno así de una rápida lectura creo que te falta, en el NeedData, reiniciar tu consulta cuando llegue al final para poderla imprimir nuevamente, debes poner algo como
Código Delphi
[-]...
if moredata then
QConsulta.Next;
else
QConsulta.First;
Espero te sirva.
Saludos