Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-01-2005
DobleSiete DobleSiete is offline
Miembro
 
Registrado: ene 2005
Posts: 32
Poder: 0
DobleSiete Va por buen camino
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 ...
__________________
"Nadie es perfecto" (Don Nadie)

Última edición por DobleSiete fecha: 11-01-2005 a las 16:44:27.
Responder Con Cita
  #2  
Antiguo 11-01-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 11-01-2005
DobleSiete DobleSiete is offline
Miembro
 
Registrado: ene 2005
Posts: 32
Poder: 0
DobleSiete Va por buen camino
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
__________________
"Nadie es perfecto" (Don Nadie)
Responder Con Cita
  #4  
Antiguo 12-01-2005
DobleSiete DobleSiete is offline
Miembro
 
Registrado: ene 2005
Posts: 32
Poder: 0
DobleSiete Va por buen camino
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.
__________________
"Nadie es perfecto" (Don Nadie)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:04:19.


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
Copyright 1996-2007 Club Delphi