Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Pasar parametro a un QuickReport desde un formulario (https://www.clubdelphi.com/foros/showthread.php?t=17493)

DobleSiete 11-01-2005 16:38:34

Pasar parametro a un QuickReport desde un formulario
 
Saludos a todos en el foro ...

Necesito crear en Delphi 7 un QuickReport a partir de una consulta SQL que utiliza un parametro obtenido desde un formulario (con un DBGrid). Tengo todo hecho, pero el reporte siempre aparece vacio.

Aquí está el código del formulario, tiene dos procedimientos, creo que el segundo es el del problema.

El parametro es codinfo. Primero se obtienen las cuentas mayores (en el dbgrid), y a partir de allí se genera el reporte con las cuentas de movimiento:

Código PHP:

procedure TForm1.FormCreate(SenderTObject);
   
begin
     with IBQuery1 
do
     
begin
       SQL
.Clear;
       
SQL.Add('SELECT * ');
       
SQL.Add('FROM scginf ');
       
SQL.Add('WHERE estado = ' estado);
       
Open;
     
end;
   
end;
   
   
procedure TForm1.DBGrid1CellClick(ColumnTColumn);
   
begin
     with QuickReport2
.IBQuery1 do
     
begin
       SQL
.Clear;
       
SQL.Add('SELECT * ');
       
SQL.Add('FROM scgctas ');
       
SQL.Add('WHERE est_fnz = :codinfo');
       
ParamByName('codinfo').AsString := 
          
Form1.IBQuery1.FieldValues['COD_INF'];
       
Open;
     
end;
   
  
     
with TQuickReport2.Create(nil) do
     
begin
       Preview
;
       
Destroy;
     
end;
   
end

Gracias a todos ...

marcoszorrilla 11-01-2005 17:03:27

O en la consulta no obtienes datos o QuickReport no apunta al DataSet de la segunda consulta.

En vez de lanzar QuickReport visualiza la segunda consulta en otra rejilla, así sabras si te devuelve registros.

Si te devuelve registros, entonces mira a ver si QuickReport está conectado al Dataset de esa consulta.

Un Saludo.

DobleSiete 11-01-2005 17:12:32

Un saludo a tí también :-)

Cita:

En vez de lanzar QuickReport visualiza la segunda consulta en otra rejilla, así sabras si te devuelve registros.
Se me había olvidado agregar que este mismo ejemplo ya lo había hecho con un DBGrid en vez de un QReport... y funcionó perfectamente bien... de hecho en este ejemplo, también veo los datos en el DBGrid del Form1, es el reporte el que no muestra dato alguno.

Cita:

Si te devuelve registros, entonces mira a ver si QuickReport está conectado al Dataset de esa consulta.
Ya lo revisé, incluso prove colocando la consulta dentro del CommandText Editor y también funcionó a la perfección... pero por código... nada que ver

Gracias por tu ayuda

DobleSiete 12-01-2005 13:14:25

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.


La franja horaria es GMT +2. Ahora son las 01:57:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi