FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
¿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 |
#2
|
||||
|
||||
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 |
#3
|
||||
|
||||
Cita:
__________________
No todo es como parece ser... |
#4
|
||||
|
||||
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... |
#5
|
|||
|
|||
Aun asi conviene a lo mejor destruirla antes de cerrar el formulario..
|
#6
|
||||
|
||||
Cita:
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. |
#7
|
||||
|
||||
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! |
#8
|
||||
|
||||
vtdeleon, las explicaciones no salen siempre como uno quiere .
Cita:
saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#9
|
|||
|
|||
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 |
#10
|
|||
|
|||
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; |
#11
|
||||
|
||||
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. |
#12
|
|||
|
|||
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).
|
#13
|
||||
|
||||
En principio, lo correcto sería:
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. |
|
|
|