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 12-10-2005
mrmanuel mrmanuel is offline
Miembro
 
Registrado: may 2003
Posts: 135
Poder: 21
mrmanuel Va por buen camino
Unhappy ¿liberar memoria despues de usar una Query?

Hola a todos.

Mi problema es la siguiente:

Estoy haciendo un listado sobre tabla DBase, usando sentencia SQL sobre una TQuery, cuando lleva evaluados 400 registros, me da un error de Memoria Insuficiente.
He medio resuelto el problema, poniendo un rango de busqueda de 300 registros cada vez, es decir del 1-300, del 300 al 600, etc.

El problema esta q los primeros 300 lo hace perfectamente, pero cuando le digo que liste el siguiente rango de 300, me vuelve a cascar con el problema de la Memoria. (Sigue siendo al evaluar el que hace 400).

He probado a poner:
Query.Free
Query.Sql.Free
despues de cada listado y en ambos casos, al intentar listar el segundo rango, que salta una excepción de Delphi.


¿Como podría liberar la memoria de una sentencia sql (Query), para cuando vuelva a usar dicha query este 100% libre?

Uso Delphi 5.


Gracias
__________________
Un Saludo a todos/as
Responder Con Cita
  #2  
Antiguo 12-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Pon el código para crear tu TQuery.

Si la creas en tiempo de diseño, solo tienes que cerrarla con query1.Close, modificar el query.sql.text y despues volverla a abrir.

saludos
Responder Con Cita
  #3  
Antiguo 12-10-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Cita:
Empezado por Lepe
Si la creas en tiempo de diseño, solo tienes que cerrarla con query1.Close
saludos
Una duda sobre esto, es decir el mismo formulario o contenedor se encarga de destruir el objeto ??? . Yo sospecho que así es..

__________________
No todo es como parece ser...
Responder Con Cita
  #4  
Antiguo 12-10-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola:

Gracias a un Post de Roman, he leído que un Form al momento de destruirse llama automaticamente a un método DestroyComponents, esta es la respuesta..
__________________
No todo es como parece ser...
Responder Con Cita
  #5  
Antiguo 12-10-2005
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Aun asi conviene a lo mejor destruirla antes de cerrar el formulario..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #6  
Antiguo 12-10-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 Delfino
Aun asi conviene a lo mejor destruirla antes de cerrar el formulario.
Me ha gustado esta respuesta. No deja claro si hay que destruirla o no, pero tampoco deja claro que no deba hacerse .

La respuesta es: No hay que destruirla, es más ni siquiera cerrarla (query.Close), ya que al destruirse el contenedor, llama al destructor de la consulta, y si está abierta, primero se cierra y despues se destruye.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 10-11-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

No se si esto ya se ha dicho, he leido tanto este hilo que ya no sé de que se trata


mrmanuel
Muestranos el codigo que utilizas para:
Crear el Query,
Transaccion(un poquito)
y para liberarla.

Puede ser otra cosa que esté consumiendo
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #8  
Antiguo 11-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
vtdeleon, las explicaciones no salen siempre como uno quiere .

Cita:
Empezado por Lepe
Pon el código para crear tu TQuery.
Eso en la primera respuesta del hilo

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 01-12-2005
mrmanuel mrmanuel is offline
Miembro
 
Registrado: may 2003
Posts: 135
Poder: 21
mrmanuel Va por buen camino
hola a todos.

siento el retraso y agradezco a todos los compañeros que han respondido a este hilo. no he podido postear el codigo porque he estado muy liado en el trabajo.

Pero prometo que esta tarde-noche postie dicho código.

Disculpen la tardanza.

Gracias
__________________
Un Saludo a todos/as
Responder Con Cita
  #10  
Antiguo 31-10-2006
kcbb kcbb is offline
Registrado
 
Registrado: oct 2006
Posts: 4
Poder: 0
kcbb Va por buen camino
como liberar o terminar la aplicacion?

Buenas tengo el siguiente problema, ejecuto un Query, pero se queda en memoria, he usado varias formas para tratar de liberarlo y nada, estas son las que he usado
QRY4.EnableControls;
QRY4.DisableControls;
QRY4.First;
FreeAndNil(qry4);
QRY4.free;
QRY4.Destroy;
QRY4.DestroyComponents;
QRY4.FreeOnRelease;
QRY4.RemoveComponent(QRY4);
QRY4.CleanupInstance;
Responder Con Cita
  #11  
Antiguo 01-11-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Dependiendo de cómo se crea y donde se crea esa consulta, habrá que usar una forma u otra de liberarlo.

Por regla general, si Delphi lo crea, que Delphi lo destruya.

Me conviene destruirlo a mi, entonces lo creo yo y lo libero yo.

Hay otras variantes, pero yo al menos uso esas 2.

¿como sabes que se queda en memoria?

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #12  
Antiguo 01-11-2006
kcbb kcbb is offline
Registrado
 
Registrado: oct 2006
Posts: 4
Poder: 0
kcbb Va por buen camino
por que cierro el programa y se queda el ejecutable en el administrador de tareas, esto queda en background, tambien te das cuenta pq delphi que corriendo peros los formularios cerrados. Pero esto sucede nada mas cuando uso el query. Otra cosa que me he dado cuenta es que nada mas pasa con Base de Datos en Pervasic ( que es una de las que uso en la empresa, la otra es AS400 y no da este error).
Responder Con Cita
  #13  
Antiguo 01-11-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
En principio, lo correcto sería:
Código Delphi [-]
qry4.Close;
FreeAndnil(qry4);

Aunque me gustaría ver como creas el query.

Si lo haces con qry4 := Tquery.Create(nil) (ojo al parámetro nil) o bien la creas en tiempo de diseño, no deberías tener problemas.

Puede que no sea por la destrucción de ese query, sino por efectos colaterales que ésta produzca. Para que te hagas una idea de lo que quiero decir: puede que en el AfterClose de esa query, intentes abrirla de nuevo y por tanto jamás se cerrará por completo, o incluso estás abriendo otra consulta, form o similar en ese evento o uno parecido.

Lamento no tener una respuesta directa. Espero que te dé algunos indicios para conseguir solucionar el problema.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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 17:01:32.


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