La forma mas comoda es usar herencia visual
Creas un VCL Form y pones el TQuickRep
Despues, se redefine el constructor para para que tambien acepte una instancia de TDataSet; asi siempre todos tus reportes van a "pedir" el DataSet en cuestion cuando son creados, y si no se los das, elevaran una excepcion:
Código Delphi
[-]
unit Unit1;
interface
uses
Classes,
Forms,
Controls,
ExtCtrls,
DB,
QuickRpt;
type
TReporteBase = class abstract(TForm)
QuickRep1: TQuickRep;
strict private
FDataSet: TDataSet;
strict protected
property DataSetGenerico: TDataSet read FDataSet;
public
constructor Create(AOwner: TComponent; ADataSet: TDataSet); reintroduce;
end;
implementation
{$R *.dfm}
uses
SysUtils;
constructor TReporteBase.Create(AOwner: TComponent; ADataSet: TDataSet);
begin
if not Assigned(ADataSet) or ADataSet = NIL then
raise Exception.CreateFmt('Error al crear %s, el parametro ADataSet no esta inicializado', [ClassName]);
inherited Create(AOwner);
FDataSet := ADataSet;
end;
end.
Para usar "esto de la herencia visual", simplemente te vas a New -> Other y en el TreeView seleccionas Delphi Projects -> Inheritable Items -> ReporteBase
Asegurate que en el RadioGroup de abajo este marcado "inherit"
Esto te creara un nuevo Form que hereda de ReporteBase y tendras el QuickReport listo para empezar a trabajar y la referencia al DataSet anterior
De hecho, en el formulario ReporteBase, podrias ir colocando propiedades y comportamiento comun a todos tus reportes; por ejemplo, podrias poner que en el pie de cada pagina, salga una banda con los datos de la empresa
Tambien podrias dejar configurado todos los filtros (para exportar a los distintos formatos), el tamaño de la vista previa, cantidad de hojas a imprimir por defecto, impresora a usar, etc etc, y todo esto lo haces una vez y siempre y cuando heredes de este form, ya tendras todo eso hecho