FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Problemas al cerrar-destruir Tquery, o al hacer segunda consulta
Hola, este es mi caso (Delphi5 con access):
Bucle: Selecciono datos Proceso datos Fin Bucle La primera vez lo hace bien: Código:
query.active:=false; query.SQL.text:=('SELECT * FROM Datos WHERE Historico=No'); query.active:=true; If query.RecordCount>0 then Procesar Datos La solución temporal que he adoptado es que el query sea una variable local a la función de modo que cuando se llega al final de la funcion destruyo el query Código:
query.Destroy; ¿Ideas? ¿Soluciones? |
#2
|
|||
|
|||
Hola...
Puedes intentar con este código:
De esta forma dentro de la función creas, usas y destruyes el objeto... Ahora, si te fijas, usé el método Free para destruir el objeto, no Destroy... Saludos... |
#3
|
|||
|
|||
No funciona, casca al hacer el close y no libera memoria. Este es el mensaje:
Project xxx.exe raised exception class EOleException with message 'El valor de BOF o EOF es True, o el actual registro se eliminó: la operación solicitada requiere un registro actual' Código:
while true do begin Prueba(); end; Código:
Procedure Prueba(); Var difAnt:real; i:integer; error:boolean; query:TADOQuery; begin Try query :=TADOQuery.create(nil); query.Connection:=AC1; query.SQL.text:=('SELECT * FROM Datos WHERE Historico=No'); query.Open(); For i:=1 to query.recordcount do begin query.next; end; query.close; query.Free; Except error:=true; end; end; Código:
Procedure Prueba2(); Var difAnt:real; i:integer; error:boolean; query:TADOQuery; begin Try query :=TADOQuery.create(nil); query.Connection:=AC1; query.SQL.text:=('SELECT * FROM Datos WHERE Historico=No'); query.active:=true; For i:=1 to query.recordcount do begin query.next; end; query.Destroy; Except error:=true; end; end;
|
#4
|
|||
|
|||
Hola...
Para que siempre te libere el objeto TADOQuery, usa la construcción try..finally, ya que esta siempre ejecuta la parte del finally haya o no haya excepción... Y te repito de nuevo, no uses el método Destroy para liberar objetos, ese método es de uso interno de Delphi, usa el método Free... Sobre tu código de prueba, si haces un while True do, lo único que vas a lograr es un loop infinito, ya que True siempre va a ser True... Puedes probar lo siguiente:
Sobre TADOQuery, la verdad no sabría decirte si tiene algún tipo de error o limitante en Delphi 5, sería investigar un poco al respecto... Saludos... |
#6
|
|||
|
|||
El while true lo puse yo para que se ejecutara infinitas veces y así ver si no liberaba la memoria, y efectivamente la memoria ocupada crece y crece y crece...
No funciona el close si el query tiene EOF = true, salta una excepcion. Ahora voy a reiniciar el ordenador pq con tanta prueba ya ni funciona... |
#7
|
||||
|
||||
Por experiencia, cuando algo no sale, miramos las cosas más absurdas y nos emperramos en que hay un virus en el ordenador que no lo deja funcionar bien.
Ese momento es el idóneo para dejar el puñetero ordenador y hacer otra cosa que no tenga nada que ver con el trabajo ni con ordenador. El fallo es la propia consulta sql, ya que debe decir: where Historico = 'No' (¿ves las comillas simples? pues faltan en tu sql).
Una observación: Yo he usado QuotedStr que añade comillas simples alrededor de la palabra. Pero no sé lo que espera Access (o ADO), puede que espere comillas dobles... la que está encima del número 2. Saludos y descansa un poco amigo fonx, te lo mereces.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
[Pregunta] Cerrar o destruir ventana | Kpoch | API de Windows | 2 | 27-04-2007 19:26:48 |
problemas al actualizar por segunda vez | @-Soft | Tablas planas | 2 | 07-09-2006 19:53:22 |
Sincronizar DBLookupComboBox con Tquery al hacer locate en la tabla | ronalg | Conexión con bases de datos | 1 | 27-05-2006 15:58:06 |
consulta en sus propiedades de Tquery | jorgito | Conexión con bases de datos | 9 | 31-01-2006 15:57:35 |
consulta en sus propiedades de Tquery | jorgito | Conexión con bases de datos | 1 | 20-01-2006 23:06:32 |
|