PDA

Ver la Versión Completa : Problema no resuleto.


Jose_Pérez
10-10-2003, 13:06:45
Hola a todos.

Tengo un problema con QuickReport. Buscando en el histórico del foro he encontrado el tema... ¡pero no está resuelto!. :mad:

http://www.clubdelphi.com/foros/archivo/viewtopic.php?t=19947&highlight=preview

¿Alguien podría ayudarme?

Sincenramente, yo soy de los que muy pocas veces han contestado a los problemas de otros conmpañeros. Pero cuando se me plantea uno, y nadie me contesta, cuando consigo resolverlo cuelgo la solución, para quien pueda interesar... De este modo, entre todos, creamos una gran fuente de datos para resolver problemas de Delphi. :)

Saludos.

Investment
10-10-2003, 14:33:19
Hola Jose_perez.
Una vez tuve un problema parecido al tuyo que solucione con las dos lineas siguientes:


Application.ProcessMessages;
Nombre_del_Listado.Release;


Ojalá te sirva.

Jose_Pérez
10-10-2003, 14:56:50
Muchas gracias Investment. Lamentablemente no funciona.

Voy a aportar algún dato a mi caso en particular.

Dentro de un bucle, ralizo una consulta utilizando un TQuery, y posteriormente realizo un Preview del QuickReport. He podido comprobar que la primera vez el Query realiza la consulta correctamente, pero en la siguiente pasada del bucle, me devuelve la consulta en blanco (0 registros).

Lo curioso es que si en lugar de realizar un Preview, hago directamente un Print, funciona perfectamente. Podría ahorrarme el Preview, pero el usuario necesita ver el listado por pantalla.

Saludos.

Jose_Pérez
10-10-2003, 14:59:38
... olvidé decir que el query está conectado al QuickReport. ¿Ya se suponía? ;)

Viet
10-10-2003, 15:28:04
Hola , has mirado que dentro del Reporte no cierras la Query en ningun evento?....

Para confirmar que no es eso podrias poner antes del preview un Close/Open de la Query en cuestion.

Suerte ;)

Jose_Pérez
10-10-2003, 15:30:54
Gracias Viet. No es eso. Totalmente descartado.

Viet
10-10-2003, 15:34:38
La verdad que yo no creo los reportes dinamicamente al momento de llamarlos, sino que lo hago una unica vez con:
Application.CreateForm(TReporte, Reporte);
Reporte.Preview;


La variable reporte es la misma que define delphi en el momento de diseño, y la verdad nunca he tenido problemas...... no puedes implementarlo de esta forma?

Jose_Pérez
10-10-2003, 15:53:13
He probado de dos maneras: Incluyendo el objeto TQuickReport en el formulario desde donde ordeno el listado, o en otro TForm, que cargo dinámicamente. En ambos casos falla!!!.

Esto es lo que hago.


For Contador:=Low(Agencias) To High(Agencias) Do
Begin

Ficha:=TfrmQRFactProvE.Create(Self);

With Ficha.Query Do
Begin
Close;
SQL.Clear;
Consulta:='Select * from Linvales Where ¡Agc_lval='+IntToStr(Agencias[Contador])+
' And extract(month from Fec_lval)='+IntToStr(cboMes.ItemIndex+1)+
' And extract(year from Fec_lval)='+IntToStr(cboYear.ItemIndex+1990)+
' And fac_lval=0 Order by Num_lval';
SQL.Add(Consulta);
Open;

End;

If Not cbxPantalla.Checked Then
Ficha.QuickReport.Print
else
Ficha.QuickReport.Preview;
Ficha.QuickReport.Dataset:=Nil;
Ficha.Free;
Application.ProcessMessages;
End;

Jose_Pérez
10-10-2003, 15:56:33
Me equivoqué....

No es


Consulta:='Select * from Linvales Where ¡Agc_lval='+IntToStr(Agencias[Contador])+


sino


Consulta:='Select * from Linvales Where Agc_lval='+IntToStr(Agencias[Contador])+


sin !

Jose_Pérez
10-10-2003, 15:58:37
Ficha.QuickReport.Dataset:=Nil;

Esto lo pusde para probar, pero tampoco funcionó.

delphi.com.ar
10-10-2003, 17:06:19
Porqué no nos muestras como ha quedado el código, después de tantas idas y vueltas??

Saludos!

Jose_Pérez
10-10-2003, 19:40:21
Queda así...


For Contador:=Low(Agencias) To High(Agencias) Do
Begin

Ficha:=TfrmQRFactProvE.Create(Self);

With Ficha.Query Do
Begin
Close;
SQL.Clear;
Consulta:='Select * from Linvales Where Agc_lval='+IntToStr(Agencias[Contador])+
' And extract(month from Fec_lval)='+IntToStr(cboMes.ItemIndex+1)+
' And extract(year from Fec_lval)='+IntToStr(cboYear.ItemIndex+1990)+
' And fac_lval=0 Order by Num_lval';
SQL.Add(Consulta);
Open;

End;

If Not cbxPantalla.Checked Then
Ficha.QuickReport.Print
else
Ficha.QuickReport.Preview;

Ficha.Free;
Application.ProcessMessages;
End;


Siento la confusión... :p

delphi.com.ar
10-10-2003, 21:12:49
Prueba cambiando Preview por PreviewModal, así detiene el hilo de ejecución antes de hacer el free (100% teoría, pues no lo he probado).
Si me aceptas una sugerencia, te recomiendo crear una sola vez es TfrmQRFactProvE, y por cada iteración del for hacer el resto.


Saludos!

Jose_Pérez
13-10-2003, 12:35:17
Muchas gracias, pero tampoco funciona.

Insisto en que el fallo se produce sólo cuando hago el Preview del CrystalReport.

Dado que no puedo tener mucho más tiempo al usuario parado, se me está ocurriendo conectal el TQuickRep con un TRXMemoryData de la librebría de RX, y volcarle el resultado del Query. Irá más lento, pero dado los resultados, vale más esto que nada.

Saludos.

Lepe
14-10-2003, 16:25:16
Ficha:=TfrmQRFactProvE.Create(Self);


no sería


Ficha:=TfrmQRFactProvE.Create(NIL);

es que estas diciendo que el padre es el formulario, pero al final eres tu mismo quien destruye la ficha¿?

¿ me llevo la chochona o no ? :D

delphi.com.ar
14-10-2003, 16:32:44
Posteado originalmente por Jose_Pérez
Insisto en que el fallo se produce sólo cuando hago el Preview del CrystalReport.
Nunca nos has dicho que se trataba de Crystal, es más por el código siempre supuse que se trataba de QuickReports... (Ficha.QuickReport....)

Viet
14-10-2003, 16:43:11
Hola a todos.

Tengo un problema con QuickReport. Buscando en el histórico del foro he encontrado el tema... ¡pero no está resuelto!.



Me sumo a Delphi.com.ar

Jose_Pérez
15-10-2003, 10:17:50
En que estaría pensando...

Quería decir QuickReport y no CrystalReport.

De todos modos he decidido probar con FreeReport. Por cierto, mi primera impresión sobre FreeReport ha sido muy buena. Espero no tener tantos problemas como con QuickReport y CrystalReport.

Muchas gracias por vuestro interés.

Saludos.