PDA

Ver la Versión Completa : Problemas con Quickreport


REDCOM
05-07-2003, 06:04:46
Saludos,

Tengo el siguiente problema cuando utilizo Quickreport, aparece
frecuentemente (no siempre), el mensaje de error

QRSpreview already exist.

Alguien sabe que pasa esto?

Gracias,

marcoszorrilla
05-07-2003, 13:44:48
En tiempo de diseño, porque no siempre que haces doble clic sobre la hoja para ver como quedará en tiempo de ejecución, se destruye el objeto, y en este caso no te queda más remedio que cerrar Delphi y volverlo a abrir.

En ejecución no debiera de ocurrir si tu mismo te encargas de cerrar el fomulario en donde está alojado.


Application.CreateForm(TfrLptFacturaProf,frLptFacturaProf);
frLptFacturaProf.LptFacturaProf.Preview;
frlptFacturaProf.Close;
{En el evento OnClose del Formulario}
Application.ProcessMessages;
FreeAndNil(LptFacturaProf);
Action:=CaFree;


Una observación:
FreeAndNil, sino recuerdo mal existe a partir de D4.

Un Saludo.

REDCOM
09-07-2003, 04:09:47
Gracias Marco,

El Error que aparece no lo escribi bien, debe decir:

QRStandarPreview already exist.


No es frecuente aunque cuando ocurrre la aplicación deja de funcionar apropiadamente.


Como estoy desarrollando es de la siguiente manera:

fimp := Tforma_imprimir.create(self);
try
fimp.Quickrep1.PreviewModal;
finally
fimp.free;
End;


El problema es que se utiliza frecuentemente la impresión, debido a que se trata de etiquetas con la información de artículos.

Hice las siguientes correcciones:

En la forma que contiene el QuickRep1 al cerrarlo (OnClose)

Application.processMessages;
FreeAndNil(Quickrep1);
action := caFree;

Y en donde es llamado el form de impresión,

fimp := Tforma_imprimir.create(self);
try
fimp.Quickrep1.PreviewModal;
fimp.close;
finally
fimp.free;
End;

Aun utilizando estas instrucciones el error es catastrofico, ahora inhibe el sistema.

Indagando en qsoft, encontre que este error ocurre por que no se libera la propiedad qrprinter lo que quiero decir es que se debe utilizar el siguiente código para evitarlo:

repeat
application.processMessages;
until quickrep1.qrprinter := Nil;

despues de cerrar la forma que contiene el QuickRep1.

Ahora sigue ocurriendo pero con bastante menos frecuencia que antes ????


Sinceramente, soy autodidacta en esto de la programación con Delphi, si me hicieras favor de indicar alguna bibliografía estaría eternamente agradecido.