Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   QReport sin usar BD (https://www.clubdelphi.com/foros/showthread.php?t=56237)

yomismo24 12-05-2008 13:14:00

QReport sin usar BD
 
Hola
tengo una aplicación en la cual quiero generar informes con QReport, el problema es que los datos que quiero meter en el informe no provienen de una base de datos, sino que viene de un fichero de texto por ejemplo.
¿Alguien me puede hechar una mano?
Saludos y gracias!

coso 12-05-2008 13:23:08

Puedes usar el evento OnPreview y el OnNeedData para ir cargando tus datos. Deberás usar el resto de componentes q no cargan desde tablas (QRLabel, QRMemo,...). Lo que pasa es q si no usas ninguna base de datos, las detail bands no te serviran para nada (no se agrandaran automaticamente, por ejemplo, ni saltaran de pagina solas) por lo que deberas programar tu mismo en los eventos OnPrint, Onpreview, etc....
Es muy faenoso. Te recomiendo que hagas una tabla temporal y en ella cargues los datos, para luego volcarlos de manera convencional a la QReport.
Tambien hay otros componentes por internet para generar informes (EKRTF, por ejemplo)

Venga, espero q te sirva.

Caro 12-05-2008 14:32:42

Hola yomismo24, para conseguir lo que quieres debes usar el evento OnNeedData del QuickResport.

En el evento BeforePrint del QuickReport, abrimos el archivo para poder leerlo despues.

Código Delphi [-]
procedure TForm3.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
 AssignFile(Archivo, 'c:\Archivo.txt');
 Reset(Archivo);
end;

En el evento OnNeedData del QuickReport recorremos todo el archivo y cada linea que leamos lo asociamos a nuestro QrLabel, donde el QrLabel deberas colocarlo en tu BandaDetail para que se vayan imprimiendo todas las lineas de tu archivo.

Código Delphi [-]
procedure TForm3.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
var
 Linea : string;
begin
  MoreData := not eof(Archivo);
  if MoreData then
  begin
    Readln(Archivo, Linea);
    QrLabel.caption := Linea;
  end;
end;

Y en el evento AfterPrint del QuickReport, cerramos el archivo.

Código Delphi [-]
procedure TForm3.QuickRep1AfterPrint(Sender: TObject);
begin
 CloseFile(Archivo);
end;

Saluditos

juanelo 12-05-2008 16:35:44

Creo que si no quieres perder la funcionalidad que te da QReport para el manejo de tablas, pues deberias considerar pasar tus datos de texto, a un ClientDataSet, claro si tu archivo de texto te lo permite.
Saludos

yomismo24 13-05-2008 09:36:06

Gracias!
 
Hola
gracias por las respuestas, me han servido de mucha ayuda ya que estaba muy perdido (es lo que tenemos los novatos :D). Al final he optado por la opción de cargar los datos en un ClientDataSet y a partir de ahí generar los informes. Funciona perfectamente, ahora ya solo falta pelearme para darle el formato adecuado jeje.
Muchas gracias y saludos!


La franja horaria es GMT +2. Ahora son las 15:26:32.

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