Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Acess Violation (https://www.clubdelphi.com/foros/showthread.php?t=24992)

sierraja 08-09-2005 17:27:34

Acess Violation
 
Algunas veces se genera un Acess Violation y me indica alguna dirección o simplemente 00000x000000 y seguidamente la aplicación se detiene y cae en el fuente. Pero, explico: El error se genera dentro de un form y cuando cae en el fuente apunta luego de que pasa por la creación del form, es decir:

Código Delphi [-]
 Procedure Button1.onclick();
 Begin
   FForm1:=TFForm1.create(Applicatiom);
   FForm1.showmodal;
 end; // aqui es donde se detiene la aplicación, pero el error se genera en el Form1 ;(

Alfredo 08-09-2005 17:54:28

Que tienes codificado en el evento oncreate del form?

sierraja 08-09-2005 18:26:14

En este evento sólo se tiene definición de variables: actualización de variales tipo fecha a la fecha del día, inicialización de variables tipo boolean. En algunas ocasiones se genera una Acess Violation en 0000x00000 de la siguiente rutina

Código Delphi [-]
 modulo_datos.cds_Alquilando.First;
 while not modulo_datos.cds_Alquilando.Eof do
 Begin
   pb1.Position:=c;
   delay(t);
   c:=c+1;
   xcodigo:=modulo_datos.cds_AlquilandoCodigo_de_Pelicula.AsString;
   modulo_datos.cds_Peliculas.FindKey([xcodigo]);
   modulo_datos.cds_Peliculas.Edit;
   modulo_datos.cds_PeliculasStatus_de_Proceso.AsString:='';
   modulo_datos.cds_Peliculas.Post;
   modulo_datos.cds_Peliculas.Refresh;
   modulo_datos.cds_Detalle_Alquiler.Insert;
 
   modulo_datos.cds_Detalle_AlquilerCodigo_Socio.AsString:=
     modulo_datos.cds_AlquilandoCodigo_Socio.AsString;
 
   modulo_datos.cds_Detalle_AlquilerNumero_de_Alquiler.AsInteger:=
     modulo_datos.cds_AlquilandoNumero_de_Alquiler.AsInteger;
 
   modulo_datos.cds_Detalle_AlquilerCodigo_de_Pelicula.AsString:=
     modulo_datos.cds_AlquilandoCodigo_de_Pelicula.AsString;
 
   modulo_datos.cds_Detalle_AlquilerTitulo_de_Pelicula.AsString:=
     modulo_datos.cds_AlquilandoTitulo_de_Pelicula.AsString;
 
   modulo_datos.cds_Detalle_AlquilerClasificacion.AsString:=
     modulo_datos.cds_AlquilandoClasificacion.AsString;
 
   modulo_datos.cds_Detalle_AlquilerFecha_de_Alquiler.AsDateTime:=
     modulo_datos.cds_AlquilandoFecha_de_Alquiler.AsDateTime;
 
   modulo_datos.cds_Detalle_AlquilerFecha_de_Posible_Entrega.AsDateTime:=
     modulo_datos.cds_AlquilandoFecha_de_Posible_Entrega.AsDateTime;
 
   modulo_datos.cds_Detalle_AlquilerMonto_Alquiler.AsString:=
     modulo_datos.cds_AlquilandoMonto.AsString;
 
   modulo_datos.cds_Detalle_AlquilerStatus_de_Proceso.AsString:='Alquilada';
   modulo_datos.cds_Detalle_Alquiler.Post;
   modulo_datos.cds_Detalle_Alquiler.ApplyUpdates(0);
   modulo_datos.cds_Detalle_Alquiler.Refresh;
   modulo_datos.cds_Alquilando.Next;
 end;
Debe de haber alguna manera que según la dirección del Acess Violation se pueda ubicar directamente la línea donde se generó el error.


PD. Bueno no sé que tan explícito está pero por favor pregunta.

sierraja 10-09-2005 14:43:02

Sólo quiero poder utilizar debug para ubicar los errores a traves de sus direcciones. Cómo se hace....

jmariano 10-09-2005 15:43:25

Según lo que comentas, parece que estás intentando acceder a un objeto que no ha sido inicializado o que fué destruido (es por eso lo de el error "Access Violation"). Te aconsejo visitar la siguiente dirección donde verás un excelente tutorial de como tratar con este tipo de errores: http://delphi.about.com/od/objectpas.../aa052201b.htm

Saludos!

sierraja 10-09-2005 22:16:08

JMariano, excelente aporte, muy oportuno y me has sacado de las tinieblas, muchas gracias....:p Problema resuelto.

Lepe 11-09-2005 22:56:26

para el tema de los access violation, yo uso el de la JVCL, una vez instalado, y usandolo, puedes obtener algo asï:

Código:

00003:  [18:52:55]Exception ENoResultSet: Error creating cursor handle
Exception
 UnitName  : DBTables
 Procedure  : TBDEDataSet.OpenCursor
 Line      : 4111 OffsetLine : 0
  Deep of Except frame-dump : 7
    UnitName  : DBTables Procedure  : TBDEDataSet.OpenCursor SourceName : DBTables.pas Line      : 4112
      UnitName  : DB Procedure  : TDataSet.SetActive SourceName : DB.pas Line      : 8840
        UnitName  : SqlExplorer Procedure  : TFRMSQL.btnAbrirClick SourceName : SqlExplorer.pas Line      : 77
          UnitName  : SqlExplorer Procedure  : TFRMSQL.btnAbrirClick SourceName : SqlExplorer.pas Line      : 79
            UnitName  : Controls Procedure  : TWinControl.MainWndProc SourceName : Controls.pas Line      : 6137
              UnitName  : Controls Procedure  : TWinControl.MainWndProc SourceName : Controls.pas Line      : 6141

Tambien es necesario incluir en un log las ventanas que había abiertas en ese momento:
Código:

00002:  [18:52:55]N Windows: 4
    Name: FRMSQL Class: TFRMSQL
    Name: FrmAlbaranC Class: TFrmAlbaranC
    Name: FrmMdi Class: TFrmMdi
    Name: FrmCR Class: TFrmCR

De todo ese engorro, lo más interesante es esto:
Código:

UnitName  : SqlExplorer Procedure  : TFRMSQL.btnAbrirClick SourceName : SqlExplorer.pas Line      : 77
La causa de este error, era hacer un Open de una consulta que en el SQL indicaba "DELETE FROM .....", y claro, no devuelve nada la consulta.

Que conste que no hace milagros, pero te ayuda a identificar por donde está el error.

Un saludo

Lepe 11-09-2005 23:03:02

En cuanto a ocultar la excepción, me parece horroroso, debes identificar la causa.

Para ser más explicito: O instalas la JVCL y despues en el menú Project, marcas la opción "insert jclDebug" o bien, buscas por internet MapFileSource (en este foro tambien se ha hablado de él), prácticamente es lo mismo una cosa u otra, aunque la jcl es más cómodo.

Despues tienes que:
- hacer un "Build All" de tu aplicación antes de llevarla al cliente.
- llevar tambien un archivo .map (que se crea con el mismo nombre que tu aplicación en la misma carpeta).
- Proveer de un archivo .Log, para que cuando se produzca el error, se grabe, y posteriormente puedas leerlo.


La franja horaria es GMT +2. Ahora son las 20:30:55.

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