Olá, Não tenho muita experiência nessa parte, mas espero que eu esteja falando a coisa certa para você. No evento OnNeedData do QuickReport, tem uma variável chamada MoreData. Enquanto você mantiver essa variável como True, ele fica executando esse evento. E dentro deste evento, você precisa dar um Next na sua Query para acessar o próximo registro da sua consulta junto com códigos do tipo: QRLabel1.caption := FieldbyName('Assunto').AsString; para preencher o relatório. Quando chegar no último, você seta MoreData como False. Para saber se é o último registro, bastaria você colocar o código: MoreData := not Query.EOF;
Até mais. Felippe [As partes desta mensagem que não continham texto foram removidas]