Ya encontre la solución: colocar el parametro dentro del QuickReport y crearla a partir de una variable declarada en una unidad publica, la cual llamo en el uses del formulario y del reporte. He aquí la solución para los interesados:
En el Unit1 que tiene el Form1 con el DBGrid de las cuentas mayores, se hace la primera consulta SQL, se captura el valor seleccionado con un click y se llama al QuickReport:
Código Delphi
[-]uses MID_DM, Unit2, Unit3;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
with IBQuery1 do
begin
SQL.Clear;
SQL.Add('SELECT * ');
SQL.Add('FROM scginf ');
SQL.Add('WHERE estado = 2');
Open;
end;
end;
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
codigo := Form1.IBQuery1.FieldValues['cod_inf'];
with Unit3.TQuickReport1.Create(nil) do
begin
Preview;
Destroy;
end;
end;
... luego en un Unit publico simplemente declaro la variable
codigo que es el parametro para generar el reporte ...
Código Delphi
[-]unit Unit2;
interface
var
codigo: string;
implementation
end.
... y por último el Unit3, que es el QuickReport, se hace otra consulta SQL para mostrar las cuentas de movimientos relacionadas con la cuenta mayor elegida por el usuario:
Código Delphi
[-]uses MID_DM, Unit2;
{$R *.DFM}
procedure TQuickReport1.QuickRepBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
with IBQuery1 do
begin
SQL.Clear;
SQL.Add('SELECT * ');
SQL.Add('FROM scgctas ');
SQL.Add('WHERE est_fnz = :cod');
ParamByName('cod').AsString := codigo;
Open;
end;
end;
Como ven, el Unit2 es llamado por el Unit1 (formulario) y el Unit3 (reporte) para compartir la variable
codigo. Mi problema es que queria llamar al IBQuery1 del QuickReport1 desde el Form1 lo cual me impedia pasar la variable.