Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-12-2004
chilenauta chilenauta is offline
Miembro
 
Registrado: dic 2004
Posts: 15
Poder: 0
chilenauta Va por buen camino
Unhappy access violation

hola foristas,
trabajo con delphi 5.0 enterprise.
hago preview a dos query, master y detail... luego de previsualizar, cierro la ventana con el boton "close" y aleatoriamente me manda un mensaje de error de "access violation xxx..."
he leido los comentarios con las soluciones, probe con todos ellos, pero no hay igual me manda el mismo error, ya no se que hacer... solo me falta por actualizar el delphi... jajaja...
trabajo en win xp.
Responder Con Cita
  #2  
Antiguo 14-12-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Tienes algo de código en el formulario?
¿Has programado algo en los eventos de OnClose/OnDestroy?

Si es así pon el código.

¿Exactamente qué tienes en el form?

Si no das algo más de información es muy difícil.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 14-12-2004
chilenauta chilenauta is offline
Miembro
 
Registrado: dic 2004
Posts: 15
Poder: 0
chilenauta Va por buen camino
hola foristas,
estos son mis codigos dsde un form cualquiera que invoca al form de reporte:

frmRptF.Free;
frmRptF := TfrmRptF.Create(Self);
try
frmRptF.Previsualizar(letra.asString, nv);
frmRptF.Close;
finally
FreeAndNil(frmRptF);
end;

y los codigos para la previsualizacion en el form de reporte son:

const
ENV_TEMP: pchar = 'TEMP';
ENV_TMP: pchar = 'TMP';
DIR_TEMP: pchar = 'c:\temp';
DIR_TMP: pchar = 'c:\tmp';
...
procedure TfrmRptF.FormCreate(Sender: TObject);
begin
SetEnvironmentVariable(ENV_TEMP, DIR_TEMP);
SetEnvironmentVariable(ENV_TMP, DIR_TMP);
end;
...
procedure TfrmRptF.FormClose(Sender: TObject; var Action: TCloseAction);
begin
qr.QRPrinter := nil;
Action := caFree;
end;
...
procedure TfrmRptF.Previsualizar(letra: string; nv: integer);
begin
lblC1.Caption := '*** Son: ' + letra + ' ***';
qryMaster.Close;
qryDetail.Close;
qryMaster.ParamByName('nv').asFloat := nv;
qryMaster.Open;
qryDetail.Open;
qr.Prepare;
qr.Preview;
end;
...

estos codigos son para imprimir una factura a un impresora matriz de punto okidata ml-320 turbo.

he sacado y puesto codigo, pero no hay caso.
atte
yanko hsieh
Responder Con Cita
  #4  
Antiguo 14-12-2004
chilenauta chilenauta is offline
Miembro
 
Registrado: dic 2004
Posts: 15
Poder: 0
chilenauta Va por buen camino
Question Será un problema de windows xp?

hola foristas,
como ven ya he hecho las pruebas necesarias que ahora empiezo a dudar si es un problema de winxp profesional???
Responder Con Cita
  #5  
Antiguo 14-12-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Sólo como comentario, pero hay algunas cosas que no acabo de ver claras.

Cita:
Empezado por chilenauta
...estos son mis codigos dsde un form cualquiera que invoca al form de reporte:
Código Delphi [-]
frmRptF.Free; (1)
frmRptF := TfrmRptF.Create(Self); (2)
try
frmRptF.Previsualizar(letra.asString, nv);
frmRptF.Close; 
finally
FreeAndNil(frmRptF); (3)
end;
Si éste formulario lo creas correctamente (2) y lo liberas correctamente (3), liberarlo antes de crearlo (1) creo que te va a dar problemas.

Cita:
Empezado por chilenauta
Código Delphi [-]
procedure TfrmRptF.FormClose(Sender: TObject; var Action: TCloseAction);
begin
qr.QRPrinter := nil;
Action := caFree; (4)
end;
Si éste formulario es el mismo de antes, el liberarlo con caFree (4) también te dará problemas con la liberación vista anteriormente (3), ya que la intentarás hacer en dos sitios distintos.


EDITADO:
NOTA: La próxima vez puedes utilizar los TAGs , de esa forma el código se puede leer mejor.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 14-12-2004
chilenauta chilenauta is offline
Miembro
 
Registrado: dic 2004
Posts: 15
Poder: 0
chilenauta Va por buen camino
Question ya habia probado segun tus comentarios

hola,

formname.free; // no arroja error segun el help de delphi, a diferencia de .destroy; por lo que poniendo el codigo o sacando el codigo, lo he probado de las dos formas e igual aparece el error de violacion de acceso.
al igual que el evento on close del formulario de reporte la action caFree tampoco da error, sino ya me hubera dado cuenta... en fin, no se que otra cosa podria ser.
probe segun tu sugerencia e igual me arroja error despues de imprimir en una impresora okidata ml 320 turbo.
sera por el bug de quickreport? o es un problema de comunicacion entre xp/sistema hecho en delphi e impresora?
atte y gracias por tus comentarios.
yanko hsieh
Responder Con Cita
  #7  
Antiguo 14-12-2004
chilenauta chilenauta is offline
Miembro
 
Registrado: dic 2004
Posts: 15
Poder: 0
chilenauta Va por buen camino
error runtime 216

me arroja un error runtime 216 o 206, no me acuerdo... que sera?
Responder Con Cita
  #8  
Antiguo 14-12-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por chilenauta
...
formname.free; // no arroja error segun el help de delphi, a diferencia de .destroy; por lo que poniendo el codigo o sacando el codigo, lo he probado de las dos formas e igual aparece el error de violacion de acceso.
al igual que el evento on close del formulario de reporte la action caFree tampoco da error, sino ya me hubera dado cuenta... en fin, no se que otra cosa podria ser...
Ojo, que no siempre los errores "saltan" cuando se ejecuta la línea incorrecta, más cuando son problemas de memoria. En tu caso, la primera instrucción de liberación nunca fallará, la segunda puede ser que sí o puede ser que no, lo que es seguro es que no está liberando algo correcto.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 14-12-2004
chilenauta chilenauta is offline
Miembro
 
Registrado: dic 2004
Posts: 15
Poder: 0
chilenauta Va por buen camino
Red face a la espera del nuevo error

gracias por tus sugerencias, cerregi nuevamente los codigos que mencionaste y ahora estoy intentando ejecutar para ver si arroja el mismo error.


Cita:
Empezado por Neftali
Ojo, que no siempre los errores "saltan" cuando se ejecuta la línea incorrecta, más cuando son problemas de memoria. En tu caso, la primera instrucción de liberación nunca fallará, la segunda puede ser que sí o puede ser que no, lo que es seguro es que no está liberando algo correcto.
Responder Con Cita
  #10  
Antiguo 14-12-2004
chilenauta chilenauta is offline
Miembro
 
Registrado: dic 2004
Posts: 15
Poder: 0
chilenauta Va por buen camino
no es la solucion

hola,
lamentablemente sigue apareciendo el error de violacionde acceso... alguna idea?
Responder Con Cita
  #11  
Antiguo 15-12-2004
chilenauta chilenauta is offline
Miembro
 
Registrado: dic 2004
Posts: 15
Poder: 0
chilenauta Va por buen camino
Thumbs up Encontre la solucion parche

hola foristas,
ya encontre una solucion de menor costo para evitar el desagradable error de "access violation". el truco es el siguiente:

en vez de hacer:

formRpt.qreport.preview;

hay que hacer esto:

formRpt.qreport.previewmodal;
if (messagedlg(...) = ...) then
formRpt.qreport.print;

algo pasa con "xxx.preview;" que sigue ejecutando las instrucciones posteriores... asi que habria que usar "previewmodal", pero el previewmodal no me muestra los botones "print", asi que habria que codigicar a mano la posibilidad de impresion.

sera esta la solucion? no lo se... pero por lo menos, ya no me sale el error de violacion de acceso... salud!!!!
espero comentario!!!
Responder Con Cita
  #12  
Antiguo 15-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por chilenauta
algo pasa con "xxx.preview;" que sigue ejecutando las instrucciones posteriores...
¡Pues claro que sigue ejecutando las instrucciones posteriores!; éste es el comportamiento normal a menos- como ya has notado -que muestres el reporte con PreviewModal ya que entonces sí se detiene la ejecución hasta que no cierres el formulario. En tu código original

Código Delphi [-]
frmRptF.Free;
frmRptF := TfrmRptF.Create(Self);
try
  frmRptF.Previsualizar(letra.asString, nv);
  frmRptF.Close; 
finally
  FreeAndNil(frmRptF);
end;

luego de la llamada a frmRptF.Previsualizar (que internamente llama a qr.Preview) el formualrio se destruye mietras aún está visible.

Lo único que tienes que hacer es:

Código Delphi [-]
frmRptF := TfrmRptF.Create(Self);
frmRptF.Previsualizar(letra.asString, nv);

y dejar el Action := caFree en el evento OnClose del formulario del reporte.

// Saludos
Responder Con Cita
  #13  
Antiguo 15-12-2004
chilenauta chilenauta is offline
Miembro
 
Registrado: dic 2004
Posts: 15
Poder: 0
chilenauta Va por buen camino
evento OnClose???

Cita:
Empezado por roman
¡Pues claro que sigue ejecutando las instrucciones posteriores!; éste es el comportamiento normal a menos- como ya has notado -que muestres el reporte con PreviewModal ya que entonces sí se detiene la ejecución hasta que no cierres el formulario. En tu código original

Código Delphi [-]
frmRptF.Free;
frmRptF := TfrmRptF.Create(Self);
try
frmRptF.Previsualizar(letra.asString, nv);
frmRptF.Close; 
finally
FreeAndNil(frmRptF);
end;

luego de la llamada a frmRptF.Previsualizar (que internamente llama a qr.Preview) el formualrio se destruye mietras aún está visible.

Lo único que tienes que hacer es:

Código Delphi [-]
frmRptF := TfrmRptF.Create(Self);
frmRptF.Previsualizar(letra.asString, nv);

y dejar el Action := caFree en el evento OnClose del formulario del reporte.

// Saludos
hola, gracias por tus sugerencias...
pero el evento OnClose no se activa con el boton "close" de la previsualizacion..., en ese caso, donde debo poner el codigo???
gracias
Responder Con Cita
  #14  
Antiguo 15-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por chilenauta
el evento OnClose no se activa con el boton "close" de la previsualizacion..., en ese caso, donde debo poner el codigo???
¡Oh vaya! Pues mira qué razón tienes. El punto es que la vista preliminar se presenta en realidad en otro formulario, no en aquél donde se haya colocado el QuickRep.

Mira, no lo he visto con detalle, pero en una prueba rápida parece que podría servirte el evento AfterPreview del QuickRep:

Código Delphi [-]
procedure TForm2.QuickRep1AfterPreview(Sender: TObject);
begin
  Close;
end;

// Saludos
Responder Con Cita
  #15  
Antiguo 15-12-2004
chilenauta chilenauta is offline
Miembro
 
Registrado: dic 2004
Posts: 15
Poder: 0
chilenauta Va por buen camino
lo probare

Cita:
Empezado por roman
¡Oh vaya! Pues mira qué razón tienes. El punto es que la vista preliminar se presenta en realidad en otro formulario, no en aquél donde se haya colocado el QuickRep.

Mira, no lo he visto con detalle, pero en una prueba rápida parece que podría servirte el evento AfterPreview del QuickRep:

Código Delphi [-]
procedure TForm2.QuickRep1AfterPreview(Sender: TObject);
begin
Close;
end;

// Saludos
hola,
gracias por el dato,
lo probare inmediato a ver si con eso se resuelve el problema.
Responder Con Cita
  #16  
Antiguo 15-12-2004
chilenauta chilenauta is offline
Miembro
 
Registrado: dic 2004
Posts: 15
Poder: 0
chilenauta Va por buen camino
Question solucion fallida de caFree

hola,
ya probe con tus comentarios, aun asi arroja error... creo que la unica forma de hacer esto es por previewmodal, como planteaba yo anteriormente... no se que otra forma se puede hacer con preview...
atte
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 16:14:10.


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