Delphi - Ayuda con error !!!

 
Vista:

Ayuda con error !!!

Publicado por Javier (4 intervenciones) el 03/11/2004 17:53:17
Hola a todos ...
He comenzado a utilizar Delphi y no tenga mucha idea, el caso, es que estoy desarrollando un servicio y me está dando un error que no sé como solucionar.
El error en concreto es el siguiente \"Access violation at address 004DC7BC in module \'MySocketServer.exe\'. Read of address 00000000\" ...
Por lo que he podido averiguar navegando por internet, parece ser, que no tengo instanciado el objeto que provoca este error. Entiendo que para instanciar dicho objeto, tengo que utilizar \"create()\", no ??
El caso, es que el error, realizando una traza, me dá justo en la siguiente rutina: \"FBaseDatos := TBaseDatos.Create (self);\" hay algo mal ?? si estoy instanciando el objeto TBaseDatos, porque me dá el error de violación de acceso ??

La verdad es que como no he utilzado mucho Delphi estoy bastante perdido, haber si alguien me puede echar una manita ...

Javi
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con error !!!

Publicado por Marto (5 intervenciones) el 03/11/2004 18:02:28
Wop!

El error que comentas, indica que estás accediendo a una posición de memoria erronea. Como bien indicas, esto acostumbra a pasar cuando intentas acceder a una referencia que aun no apunta a un objeto.
Por el poco código que pones, lo lógico es que hay un error en el contructor de TMiBaseDeDatos... ¿Qué haces en él?

No dejes de visitar www.clubdevelopers.com y su sección de foros!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con error !!!

Publicado por Javier (4 intervenciones) el 03/11/2004 18:12:39
Hola Marto, antes de nada, gracias por responder ...

Yo también pienso que hay un error en el constructor de dicho objeto, pero me dá la sensación de que no llega ni a entra en el constructor de dicho objeto ... te paso el código del constructor para que lo veas:

constructor TBaseDatos.Create(AOwner: TComponent);
begin
inherited;
FLog.AgnadirMensaje(' ** Comienza la ejecución del procedimiento: TBaseDatos.Create');
conexionBD := TADOConnection.Create(self);
conexionBD.ConnectionString := 'Provider=MSDASQL.1;Data Source=vminet;Persist Security Info=True;Mode=ReadWrite';

conexionBD.LoginPrompt := false;
conexionBD.Connected := true;
if conexionBD.Connected then FLog.AgnadirMensaje('Conectado a BD')
else FLog.AgnadirMensaje('No Conectado a BD');

ADOQuery1 := TADOQuery.Create(self);
ADOQuery1.Connection := conexionBD;

ADOQuery2 := TADOQuery.Create(self);
ADOQuery2.Connection := conexionBD;

ADOQuery3 := TADOQuery.Create(self);
ADOQuery3.Connection := conexionBD;

ADOQuery4 := TADOQuery.Create(self);
ADOQuery4.Connection := conexionBD;

http := TIdHttp.Create (self);
http.AllowCookies := true;
http.Host := 'xxx.xxx.xxx.xxx';
end;

Aunque ya te digo, que en el fichero de log, no aparece ninguna de las entradas establecidas en el constructor del objeto TBaseDatos

Salu2

JAvi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con error !!!

Publicado por Marto (5 intervenciones) el 03/11/2004 18:19:25
Wop!

Qué es FLog? estás accediendo a un método suyo sin instanciarlo...

No dejes de visitar www.clubdevelopers.com y su sección de foros!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con error !!!

Publicado por Javier (4 intervenciones) el 03/11/2004 18:31:02
FLog, es una variable de tipo TLog, clase, para el manejo de log´s, simplemente tiene un par de metodos, para ir grabando en un ficherito, los mensajes que se pasan por parámetro ...

Esta declarado e instanciado, en el evento "ServiceCreate", es justo el evento, donde me está dando el error de violación de acceso, te pongo el código para que lo veas:

procedure TFCCService5006.ServiceCreate(Sender: TObject);
var i : integer;
begin
FLog := TLog.Create (self);
FLog.EstablecerFicheroLog(RUTA_LOGS,'C:\Logs\');
FLog.AgnadirMensaje('***********************************');
FLog.AgnadirMensaje('******** CREANDO SERVICIO *********');
FLog.AgnadirMensaje('***********************************');
FLog.debug := True;
FLog.AgnadirMensaje(' ** ServiceCreate: Comienza: TBaseDatos.Create ...');
try
FBaseDatos := TBaseDatos.Create (self);
FLog.AgnadirMensaje(' ** ServiceCreate: Fin TBaseDatos.Create ...');
except
on e: exception do
begin
FLog.AgnadirMensaje(' ** ERROR: ' + e.Message);
FLog.AgnadirMensaje(' ** Proceso Abortado: TBaseDatos.Create');
end;
end;
end;

En este evento, como te digo, declaro una variable llamada FLog (pública), que instancia el objeto TLog, para ir haciendo una traza de la ejecución del servicio, y en este mismo evento, instancio el objeto "TBaseDatos", el constructor de este objeto, te lo pase en el anterior mensaje.

Gracias por tu ayuda ...

Javi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con error !!!

Publicado por Marto (5 intervenciones) el 03/11/2004 18:40:17
Wop!

Vamos a ver....

Istancias FLog des del evento de la clase del servicio, bien.
Despues de instanciarlo, instancias TBaseDedatos... tambien bien.
Lo que no entiendo es.... ¿como puedes acceder a FLog des del contructor de TBaseDeDatos?
¿Es una variable global? Si no te entiendo mal, no, es una variable pública del servicio, por lo que no deberia ser visible desde TBaseDeDatos..... ¿Puede ser que tengas declarados dos variables FLog, una en cada clase?
Haz una prueba, pon un BreakPoint en el constructor TBaseDeDatos, depura y cuando se pare en el break, sigue con F7, a ver dónde peta y me cuentas :)


No dejes de visitar www.clubdevelopers.com y su sección de foros!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con error !!!

Publicado por Javier (4 intervenciones) el 03/11/2004 18:46:16
Ok, voy a empezar la depuración de nuevo, haber si estoy metiendo la pata en algún otro punto, que no estoy teniendo en cuenta. Ya te cuento ...

De todas formas, muchas gracias por la ayuda :P

Salu2

Javi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con error !!!

Publicado por Peruvian (22 intervenciones) el 04/11/2004 21:51:44
Hola Javier,

Espero que no sea demasiado tarde mi respuesta. Sabes a mi sucedia lo mismo. Y lo que estaba ocurriendo es q tenia una clase q automaticamente llamaba a la clase q enviaba el error. El error es porque deseas utilizar el objeto de una clase pero no lo haz instanciado (generado).

Para ello hice lo siguiente: fui al Menu de Delphi y seleccione la opción PROJECT, en el se encuentra la opción OPTIONS (hacer click en esa opción).

Te aparece la ventana "Project Options for virtuallistview.exe" En la seccion de Auto-create forms puse como primera clase a generar la clase q me envia el error.

En Delphi va instanciando las clases conforme este ordenado en esa lista.

Espero haberte ayudado.

Saludos

Peruvian
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar