Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Error al salir del preview. (https://www.clubdelphi.com/foros/showthread.php?t=41288)

vpepen 12-03-2007 15:22:40

Error al salir del preview.
 
Hola a todos.

Tengo que el siguiente problemita del cual les agradecería la ayuda que me puedan prestar. Tengo una apliación en Delphi (Claro está :) ) y en la cual utilizo el QuickReport para generar los informes, pero el problema se presenta cuando presento el Preview, ya que al salir al form desde donde es invocado el Preview, me presenta el siguiente error:

Access violation at address 004DFB54 in module 'SGECE.exe'. Read of address 6f747584.

Lo extraño en todo esto es que dicho error no siempre se presenta y no sabría decir con qué frecuencia aparece, sólo que cuando se presenta es en algunas ocasiones después de generar el preview de cualquier reporte de los que tengo en la aplicación.

Otra cosa, esto no causa ningún problema (hasta donde creo) , pero es bastante molestoso ese mensaje de error, el cual el usuario tiene que hacer clic para que desaparezca la ventana.

Vpepen.-

ContraVeneno 12-03-2007 16:37:51

Pues tendrías que revisar tu código para ver en que parte se presenta ese error y porque estas tratando de acceder a algo que ya no existe; es por eso que te aparece ese error.

Lepe 12-03-2007 17:15:58

¿Usas delphi 6 y QuickReport 3 (el que viene con delphi)?

vpepen 12-03-2007 17:17:38

Cita:

Empezado por Lepe
¿Usas delphi 6 y QuickReport 3 (el que viene con delphi)?

Disculpa que no especifiqué esos datos. Uso Delphi 5 y el QuickReport que viene con él.

Vpepen.-
*************

Lepe 12-03-2007 18:05:25

En windows 2000/XP tienes que cambiar la variable de entorno TEMP y TMP de windows y ponerle una ruta de menos de 31 caracteres. Actualmente usará "c:\documents and settings\.....". Intenta con "c:\windows\temp" y "c:\windows\tmp" (creando las carpetas primero.

Ten cuidado al liberar los informes de quickreports o las ventanas, usa freeAndNil(Form1) en lugar de Form1.Free, es más seguro.

Una Violación de Acceso a Memoria puede dejar la aplicación en un estado inestable, es decir, si es un error grave. Está intentando acceder a una posición de la memoria que no le pertenece.

Suele ocurrir con código de este estilo:
Código Delphi [-]
Form1.Free;
Form1.Show;
Puede que se llamen en ese orden, pero desde diferentes ventanas, y es ahí donde se produce la excepción: Access Violation read of address XXXXX.

Saludos

vpepen 13-03-2007 14:25:29

Gracias por tus sugerencias Lepe, trataré de aplicar lo que dices para ver si el problema se corrige.

Vpepen.-
*************

vpepen 13-03-2007 14:26:57

Algo que no comprendo y me gustaría si alguien me puede sacar de esa inquietud: A qué se debe que el error no siempre aparece?

Vpepen.-
***********

vpepen 13-03-2007 14:38:38

Cita:

Empezado por Lepe
Ten cuidado al liberar los informes de quickreports o las ventanas, usa freeAndNil(Form1) en lugar de Form1.Free, es más seguro. Saludos

Lepe, tengo para decirte que la verdad ni uso Free ni tampoco FreeAndNil(). Simplemente incovo mi Preview (Form1.QuickReport1.Preview;). Al salir del Preview no especifico nada, simplemente cierro el Preview y aparece el error, claro está, con el agravante de que no siempre lo hace.

Vpepen.-
*************

Lepe 13-03-2007 16:30:47

Entonces supongo que creas todas tus ventanas al inicio del programa y después muestras u ocultas el form correspondiente ¿es cierto?, ¿liberas y creas dinamicamente las ventanas?

Sería conveniente que incluyas algo de código, de como llamas al QuickReports, y qué propiedades modificas... no sé quizás veamos alguna mejora en el código que, colateralmente, elimine el fallo.

Si puedes, llámalo con PreviewModal, aunque cambia un poco el comportamiento de la aplicación, no sé si será viable.

Al llamarlo con Preview, el QuickReport simula una ventana modal, pero realmente no lo es.

El hecho de que ocurra algunas veces, es lo que hace que se sea un problema, si falla siempre se encuentra rápido con breakpoints jejeje. Ten en cuenta que QuickReports es un módulo de terceros, que se apoya sobre windows, la cola de impresión, las impresoras existentes, etc... Son muchas las variables que intervienen.

Saludos

vpepen 14-03-2007 14:08:58

Cita:

Empezado por Lepe
Entonces supongo que creas todas tus ventanas al inicio del programa y después muestras u ocultas el form correspondiente ¿es cierto?, ¿liberas y creas dinamicamente las ventanas?

Con relación a eso, los forms se crean todos al inicio del programa. QuickReport se trabaja encima de un form y contrario a lo que parecería, yo no tengo que mostrar/ocultar el form explícitamente, ya que "al parecer" eso lo hace el mismo QuickReport cuando es invocado para el Preview. Esto lo creo basado en que el único código que tengo en el evento del botón que llama el preview es simplente:
Código Delphi [-]
Form1.QuickReport1.Preview;

Cita:

Empezado por Lepe
El hecho de que ocurra algunas veces, es lo que hace que se sea un problema, si falla siempre se encuentra rápido con breakpoints jejeje. Ten en cuenta que QuickReports es un módulo de terceros, que se apoya sobre windows, la cola de impresión, las impresoras existentes, etc... Son muchas las variables que intervienen.
Saludos

Aceptada la sugerencia :)

Vpepen.-
**************

Lepe 14-03-2007 18:42:07

¿los datos que muestras en en Preview de donde vienen?
¿consultas? ¿no necesitas pasarle parámetros a esas consultas?
¿tablas?

Quizás fuera conveniente crear alguna rutina al estilo:
Código Delphi [-]
procedure TForm1.VerInforme;
begin
  if not tabla1.Active then
    tabla1.Open;
  Quickreport1.PreviewModal;
  Tabla1.Close;
end;

De esta forma puedes controlar mejor si la tabla/consulta está abierta, si necesitas cerrarla para refrescar los datos, pasarle parámetros, etc.

No es buena idea dejar la consulta abierta en tiempo de diseño y "pensar" que al ejecutar el programa nada va a fallar.

Saludos.

vpepen 15-03-2007 14:10:24

Cita:

Empezado por Lepe
¿los datos que muestras en en Preview de donde vienen?
¿consultas? ¿no necesitas pasarle parámetros a esas consultas?
¿tablas?

Utilizo consulta y no necesito pasarle parámetros, además de que en el caso hipotético de que fallara algo, creo que me daría cuenta, debido a que en el preview sería evidente, y todo funciona bien.

Cita:

Empezado por Lepe
No es buena idea dejar la consulta abierta en tiempo de diseño y "pensar" que al ejecutar el programa nada va a fallar.Saludos.

La consulta no la tengo abierta en tiempo de diseño, la abro en tiempo de ejecución antes de llamar el Preview.

Bueno, hasta ahora he tratato todas las sugerencias que me has dado y parece que la cosa está un poquito difícil, pero nada.... a seguir intentádolo hasta corregir el problema ;)

De todas formas Gracias Lepe por tu ayuda y tu valioso tiempo. Cualquier sugerencia adicional me la haces saber.

Vpepen.-
*************


La franja horaria es GMT +2. Ahora son las 05:31:59.

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