Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-03-2005
mmateo25v mmateo25v is offline
Registrado
 
Registrado: mar 2005
Posts: 7
Poder: 0
mmateo25v Va por buen camino
insuficiente memoria / insuficient memory

Hola a todos,

Mi problema es el siguiente:
Tengo dos aplicaciones hechas en delphi 5 una por mi y otra por un proveedor externo o sea no cuento con el codigo fuente.

Cuando ejecuto ambas aplicaciones en una PC, sea con windows98, 2000, XP o NT, funcionan sin problema pero cuando la mia en algunas ocaciones despues de tantas veces de abrir y cerrar da un error de "insuficient memory" aparentemente del BDE y la solucion que encontre para esto es cerrar ambas aplicaciones y volverlas a abrir.

Por otro lado ocurre lo mismo si estoy trabajando en una nueva aplicacion y de tantas veces de darle para ejecutar da el mismo error "insuficient memory" y solo me resta abrir y cerrar.

Alguien me podria decir que hacer porque en todos los casos los formularios son variables y se crean y destruyen en la medida que se usan. ademas la aplicacion termina con "application.terminate".

Será que debo actualizar algo del BDE ? pero porque la aplicacion del otro proveedor no da este error...

Ayuda por favor.....
Responder Con Cita
  #2  
Antiguo 22-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Usa Application.Close o simplemente haz un Close del formulario principal.

Application.Terminate es para casos extremos.

Saludos
Responder Con Cita
  #3  
Antiguo 22-03-2005
mmateo25v mmateo25v is offline
Registrado
 
Registrado: mar 2005
Posts: 7
Poder: 0
mmateo25v Va por buen camino
Lepe, al menos hasta donde yo entiendo no existe application.close, si existe close del formulario y ya probe con eso y me sigue dando los mismos problemas.

Realmente no se porque me da este tipo de problemas.....
Responder Con Cita
  #4  
Antiguo 22-03-2005
Avatar de Luis M.
[Luis M.] Luis M. is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Ripollet - Barcelona
Posts: 212
Poder: 20
Luis M. Va por buen camino
Hola mmateo25v.
Prueba lo siguiente.
Cuando creas el formulario, abres las tablas que se utilicen
y antes de destruir el formulario, las cierra.
No se ti te servirá, pero por lo menos se evita que las tablas se queden abiertas
y se puedan dañar.
Un saludo.
Responder Con Cita
  #5  
Antiguo 22-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por mmmateo25v
Lepe, al menos hasta donde yo entiendo no existe application.close.
Cierto, me confundí.

Si te dice el error de memoria insuficiente, entonces es que algun objeto que se crea, se deja en memoria, bien porque se machaque el apuntador, o bien porque no se libere correctamente, (o incluso ambas cosas).

Por qué dices que es aparentemente del BDE? Tienes algo más de información?.

Si no dispones de más informacion, postea el método que usas para crear objetos, (ventanas, tstringlist o lo que creas conveniente). A ver si entre todos lo podemos solucionar.

Saludos
Responder Con Cita
  #6  
Antiguo 23-03-2005
mmateo25v mmateo25v is offline
Registrado
 
Registrado: mar 2005
Posts: 7
Poder: 0
mmateo25v Va por buen camino
Este es el metodo que utilizo para crear un form, desde el formulario principal, ya que todos estan definidos en el proyecto como available.

if Assigned(form11) then
form1.Show
else
form1 := Tform1.Create(Application);

Posteriormente en el formulario "form1" hago lo siguiente:

procedure Tform1.FormCreate(Sender: TObject);
begin
table.open;
end;

procedure Tform1.FormCreate(Sender: TObject);
begin
table.Close;
Action := caFree;
form1 := nil;
end;

y en en close del formulario principal cierro inclusive la base de datos y hago lo siguiente:
procedure TformPrincipal1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
database.close;

Action := caFree;
formPrincipal1 := nil;
Application.Terminate;
end;

Espero me puedan ayudar. Gracias.

La verdad que no tengo muy claro si es el BDE o es mi aplicacion, pero en todos los casos que cierro todos los programas que hacen referencia a alguna libreria del bde y luego empiezo nuevamente a abrir las aplicaciones funciona correctamente, es por eso nada mas que digo que puede ser el bde, pero es más seguro que sea mi aplicacion que no este haciendo algo bien y quede algo abierto en memoria que impide que otra aplicacion pueda ser ejecutada.
Responder Con Cita
  #7  
Antiguo 23-03-2005
Avatar de Luis M.
[Luis M.] Luis M. is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Ripollet - Barcelona
Posts: 212
Poder: 20
Luis M. Va por buen camino
A mi me pasó algo parecido y me di cuenta que dejaba los querys abiertos.
Cerraba las tablas pero no los querys.
De momento no me ha vuelto a suceder.
Una manera que tengo para comprobar si hay alguna tabla abierta es
reindexar las tablas.
Si las tablas estan cerradas me reindexa perfectamente, pero si hay alguna
abierta o que se este utilizando, me salta la exepción.
Desde el formulario principal llamo a los otros de esta manera
Código Delphi [-]
 procedure TFormMain.suiButtonMaquinasClick(Sender: TObject);
 begin
   FormManMaquinas := TFormManMaquinas.Create(Self);
   try
     FormManMaquinas.ShowModal;
   finally
     FreeAndNil(FormManMaquinas);
   end;
 end;
en el evento OnActivate del formulario que abro
Código Delphi [-]
   DMMaquinas.TableMaquinas.Open;
   DMMaquinas.TableHistorial.Open;
   DMMaquinas.TableTipos.Open;
Y el el evento OnClose del formulario
Código Delphi [-]
   DMMaquinas.TableMaquinas.Close;
   DMMaquinas.TableHistorial.Close;
   DMMaquinas.TableTipos.Close;
   DMListados.QueryMantenimiento.Close; // Si utilizo alguno
Asi es como lo solucione.
Un saludo.
Responder Con Cita
Respuesta



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 08:25:36.


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