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 20-07-2007
nelostanley nelostanley is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
nelostanley Va por buen camino
[Help] Un CompositeReport Fino.

Hola amigos,

Una ayudadita a este novato servidor, el problema es el sgte.

Tengo 4 reportes (probados de manera independiente funcionan correctamente), estos 4 los tengo agregado a un CompositeReport, funciona de maravilla "la 1ra vez", al cerrar el reporte me muestra el mensaje "external exception C00000D" , y cuando intento acceder nuevamente al reporte me muestra el clasico mensaje "Access violation adrres at ##### in modul
#### Red Adrres 00000". Tengo que cerrar la aplicacion y volver abrir para poder ver el reporte nuevamente.

Ya toy varios dias bregando con esta vaina y consultando en el foro no encontrando el remedio necesario, asi que recurro a ustedes.

Pienso que quizas no este llamando correctamente al reporte o liberando la memoria correctamente, ustedes diran, de antemado gracias, ahi les pongo el codigo:

Código Delphi [-]
 
// Procedure para llamar al Reporte enviandole 2 parametros
 try
//Creo los Reportes
  frRep1   := TfrRep1.Create(Application);
  frRep2   := TfrRep2.Create(Application);
  frRep3   := TfrRep3.Create(Application);
  frRep4   := TfrRep4.Create(Application);
//Activo los DataSet de los Reportes
  with frRep1.t1 do begin
   Active := False;
   Params.ParamByName('xIdRegistro').AsInteger := IdRegistro ;
   Params.ParamByName('xIdEmp').AsString  := IdEmp ;
   Active := True;
  end;
  with frRep4.t1 do begin
   Active := False;
   Params.ParamByName('xIdRegistro').AsInteger := IdRegistro ;
   Params.ParamByName('xIdEmp').AsString  := IdEmp ;
   Active := True;
  end;
  with frRep2.t1 do begin
   Active := False;
   Params.ParamByName('xIdRegistro').AsInteger := IdRegistro ;
   Params.ParamByName('xIdEmp').AsString  := IdEmp ;
   Active := True;
  end;
  with frRep3.t1 do begin
   Active := False;
   Params.ParamByName('xIdRegistro').AsInteger := IdRegistro ;
   Params.ParamByName('xIdEmp').AsString  := IdEmp ;
   Active := True;
  end;
// Este QR1 es el composite
  QR1.Preview;
//Cierro los DataSet de los reportes
  frRep1.t1.Active := False;
  frRep2.t1.Active := False;
  frRep3.t1.Active := False;
  frRep4.t1.Active := False;
//Destruyo los reportes
  frRep1.Destroy;
  frRep2.Destroy;
  frRep3.Destroy;
  frRep4.Destroy;
//libero aqui de memoria del Composite 
  qr1.Free ;
  qr1.Destroy ; // <---------- ESTA LINEA ME DA EL ERROR DE "ADDRESS EXCEPTION" haciendo un "paso a paso" es donde me da el error
 except
  frRep1.Destroy;
  frRep2.Destroy;
  frRep4.Destroy;
  frRep3.Destroy;
  qr1.Free ;
  qr1.Destroy ; 
 end;
end;

// Aqui esta la carga de los Reportes
procedure TfrmPrincipal.QR1AddReports(Sender: TObject);
begin
  QR1.Reports.Add( frRep1 );
  QR1.Reports.Add( frRep2 );
  QR1.Reports.Add( frRep3 );
  QR1.Reports.Add( frRep4 );
end;

Nota : Uso D7 y QREPORT 4.


De antemano mil gracias.

Última edición por nelostanley fecha: 20-07-2007 a las 01:11:33.
Responder Con Cita
  #2  
Antiguo 20-07-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Me tomé el atrevimiento de agregarle las etiquetas [delphi] a tu mensaje.

Particularmente veo queen las líneas:
qr1.Free;
qr1.Destroy;

Estas liberando dos veces el mismo objeto, y precisamente la segunda instrucción produce un error si el objeto no existe, ademas al liberarlo por lo que se ve en la función, no puedes volver a llamarlo ya que no lo vuelves a crear. Supongo que esta creado en tiempo de diseño por eso no falla la primera vez.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 20-07-2007 a las 00:27:05.
Responder Con Cita
  #3  
Antiguo 20-07-2007
nelostanley nelostanley is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
nelostanley Va por buen camino
Gracias

Hola,

Disculpa las etiquetas (nose como ponerlas, acabo de aprenderlas ) sobre el problema existe dos .

Código Delphi [-]
qr1.Free ;
qr1.Destroy ;




El primero es la secuencia normal del programa y el otro es de la Exception, el problema no es la exception (aunque igual daria error me parece) sino es en la secuencia del try el problema despues de mostrar el preview del reporte.

Ahora si quitamos esas dos lineas no saldra el mensaje de la "ACCESS VIOLATION" simplemente ya no ingresa al reporte nuevamente y no muestra ningun mensaje de error, intente por todos lados pero nada.

Última edición por nelostanley fecha: 20-07-2007 a las 01:47:31.
Responder Con Cita
  #4  
Antiguo 20-07-2007
lgarcia lgarcia is offline
Miembro
 
Registrado: jul 2004
Posts: 479
Poder: 20
lgarcia Va por buen camino
QRCompositeReport

Hola:

Yo he trabajado bastante con reportes compuestos y nunca he tenido la necesidad de liberar, ni destruir ese componente. Yo lo que hago es ponerlo en el formulario donde llamas los reportes, prueba de esa manera a ver.

Saludos
Luis Garcia
Responder Con Cita
  #5  
Antiguo 20-07-2007
nelostanley nelostanley is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
nelostanley Va por buen camino
Pues si

Era una de las alternativas hacerlo de esa forma pero de todas formas no vuelve a mostrar el reporte al 2do intento.

Quizas si tuvieras un ejemplo de como codificas tus reportes Composite me sea una gran ayuda, muchas gracias de antemano.
Responder Con Cita
  #6  
Antiguo 21-07-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
En la ayuda de QReport viene este código.

Código Delphi [-]
procedure MakeComp;
 begin
     comprep := TQRCompositeReport.Create( mainfrm);
     comprep.OnAddReports := mainfrm.CompRepAddReports;
     comprep.Preview;
     comprep.free;
 end;


 procedure Tmainfrm.SpeedButton1Click(Sender: TObject);
 begin
     MakeComp;
 end;


 procedure Tmainfrm.CompRepAddReports(Sender: TObject);
 begin
    comprep.Reports.Add( repfrm1.quickrep1 );
    comprep.Reports.Add( repfrm2.quickrep1 );
 end;

Nada que ver con tu código.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #7  
Antiguo 21-07-2007
waly2k1 waly2k1 is offline
Miembro
 
Registrado: dic 2006
Ubicación: El país de las maravillas(Argentina)
Posts: 251
Poder: 18
waly2k1 Va por buen camino
Otra prueba

Intentá sacar los create y los destroy/free.
Probá a ver si te funciona. Igualmente estás refrescando los datos.

Salu2 y espero te sirva
Responder Con Cita
  #8  
Antiguo 21-07-2007
nelostanley nelostanley is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
nelostanley Va por buen camino
Hicieron que un Hombre sea Feliz!!!

Gracias a todos por su participación, saque un poco de cada ingrediente y por fin me salio el pastel como queria.

Ahi va la solucion.... para su servidor:

Con mi codigo(pos asi lo hago yo ), sacar del try y el except:

Código Delphi [-]
qr1.Free ;
qr1.Destroy ;

Poner en el try obviamente con el nombre de mi Composite:
Código Delphi [-]
     
comprep := TQRCompositeReport.Create( mainfrm);     
comprep.OnAddReports := mainfrm.CompRepAddReports;     
comprep.Preview;     
comprep.free;

Con esto puedo ver el mismo reporte las veces ke me venga la gana.

Que no daria por el AYUDA del QR4 en los hilos del foro hay un zip pero esta corrupta (baja pero no descomprime), si alguien lo podria subir seria de gran ayuda tanto para mi como para otros.

Muchas Gracias!!!.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas con CompositeReport ManelC Impresión 1 12-06-2007 01:09:30
exportar COMPOSITEReport a rtf Eusebio Impresión 1 29-11-2006 13:55:44
Compositereport omarifr Impresión 4 25-11-2004 14:37:16
CompositeReport reporte de dos hojas Supermagayin Impresión 0 17-04-2004 21:42:19


La franja horaria es GMT +2. Ahora son las 10:11:04.


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