PDA

Ver la Versión Completa : Acces violation Datasnap con DBExpress


Jere_84
31-03-2012, 00:30:05
Hola, Estoy haciendo una aplicación datasnap funciona bien lo único me da un error de acceso al cerrar el formulario principal de la aplicación pero esto solo sucede cuando abri y cerre varias veces un formulario cualquiera sea de la opción del sistema.

Si entro a la aplicación, abro un formulario lo cierro y luego cierro la ventana principal, la violación de acceso no sucede.
Si entro a la aplicación, abro un formulario lo cierro, lo vuelvo a abrir luego lo vuelvo a cerrar y cierro la ventana principal, ahí me da error de acceso.

En la ventana principal esta el componente SQLConnection del cual todos los DSProviderConnection de los DataModulos a medida que son creados se conectan.

lo unico que tengo programado en la ventana principal ademas de los Application.CreateForm(...,...) y los From. Show es: en el evento FormCreate

procedure TFormPrinc.FormCreate(Sender: TObject);
begin
SQLConnection.Open;
end;


y en el evento FormClose que es aqui donde da el error en la linea SQLConnection.Close;

procedure TFormPrinc.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SQLConnection.Close;
end;

Lo que yo entiendo es que los errores de acceso suceden cuando se intenta llamar a un componente que ya no existe en memoria pero en este caso la ventana no fue destruida del todo y este componente esta en esta ventana.. luego del error se sigue ejecutando la aplicación pero al seguirlo con el debugger se abre la pestaña CPU y sigo el código pero es en lenguaje maquina y ya no se entiende mas nada :confused:
Escucho Sugerencias!
Saludos.

gatosoft
26-04-2012, 23:30:30
Hola Jere,

El access violation ocurre cuando hay un problema de admininistración de objetos.... puede ser que estés destruyendo objetos al cerrar tus formularios y luego intentándolos accesar, creyendo que aun siguen ahí... puede ser que estes dejando objetos en "el aire", que al final de la aplicación intentan destruirse generando problemas... en fin hay muchas posibilidades y tenemos poca inofrmación sobre la dinámica de tu programa De hecho nos estas mostrando un código en el que ASUMES que el error está en la forma principal....

Te aonsejo hacer seguimiento paso a paso con F7 para rastrear principalmente los Destroys y Creates que tengas de objetos en tu sistema...

nada mas por ahora.