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;
También probé esta forma:
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;
No libera memoria, ese bucle infinito no para de coger memoria...Casca al hacer el close() o el destroy(). Esto pasa cuando:
- el query no tiene registros, entonces EOF = true.
- el query esta posicionado en el ultimo registro, entonces EOF = true.
Si hay registros lo tengo facil porque solo tengo q hacer query.First y ya me lo libera, pero si no hay registros el query no se libera y me queda esa memoria sin liberar...¿Será un bug del Delphi5?