io solitamente aggiro il problema in questo modo:
1) preparo una SELECT che mi rappresenta tutti i dati che mi servono
2) nella select aggiungo un campo costante chiamato "Selezione" (la checkbox), esempio:
select 0 as "Selezione", CAMPO1 as "Codice", CAMPO2 as "Descrizione", ...
2) apro la TSqlQuery e tramite un datasource il tutto finisce in una TDbGrid
3) lascio all'utente il compito di selezionare i record tramite il checkbox "Selezione" nella TDBGrid
4) in fase di stampa uso la TSqlQuery già collegata alla griglia e filtro per i record selezionati dall'utente
così ti eviti il I° ciclo per popolare la griglia ed il II° ciclo per popolare il dataset ;)