Delphi - QUERY.CLOSE

 
Vista:

QUERY.CLOSE

Publicado por JUAN RODRIGUEZ (47 intervenciones) el 21/04/2009 21:27:42
Hola a tod@s!!!

Chicos, tengo un problema y por más vueltas que le doy no se que puede estar pasando, os comento:

Realizo una consulta, que la añado a una query, la cual abro, y si no está vacia itero sobre ella hasta llegar al final. Una vez alcanzado el final la cierro. Pues me da error al cerrar la query. Os pongo el codigo (es bastante corto):

query.sql.clear;
query.sql.add(CONSULTASQL);
query.open;

if not (query.eof) then
begin
query.first;
while not (query.eof) do
begin
var := query.fieldByName('cojo un resultado de la consulta');
query.next;
end;
end;
query.close ; <---ERROR!

Estoy muy extrañado. ¿Puede ser que el bucle while mantenga agarrada a la query y no me deje cerrarla? ¿como puedo cerrar la query, o liberarla de alguna forma?
Si no cierro la query el programa me echa (típico error acces violation) en el siguiente acceso a es query o a cualquier otra.

A VER SI ME PODEIS ECHAR UN CABLE. MIL GRACIAS A TODOS!!!

Salud
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:QUERY.CLOSE

Publicado por juancho (193 intervenciones) el 22/04/2009 19:36:09
Me parece que la primera condicion, aunque de repente puede funcionar, no creo que sea la mejor opcion:
if not (query.eof) then
begin
...
Mejor es:
if not query.IsEmpty then
begin
...
Por que Eof en realidad va a verificar si es fin de archivo, es decir sino existen mas registros en la cola, y eso no va a ocurrir si recien abres tu consulta, pero capaz y funcione, pero no es la forma, por lo demas tambien suelo usar ese tipo de codificacion para algunas consultas y siempre me funciona super, no veo que nada estee mal, cual es el error que te salta??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:QUERY.CLOSE

Publicado por Juan Rodriguez Sanchez (47 intervenciones) el 23/04/2009 12:33:50
Hola Juancho, Muchas gracias por tu atencion y por tu ayuda.

He realizado el cambio que me has comentado (he sustuido query.eof por query.isEmpty) y lamentablemente el error sigue ocurriendo. Lo peor es que ocurre de forma aleatoria, hay veces que lo hace bien, veces que no.... es algo muy raro y no se si a alguien le habrá pasado alguna vez.

El error que me devuelve Delphi es del tipo:

"proyeco.exe raised exception class EAccessViolation with message 'Access violation at addres 4BE3466C in module 'IDAPI32.DLL'. Write of address 0000000008'. Process stopped."

Muchas gracias a todos y por favor....alguien sabe algo???.

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:QUERY.CLOSE

Publicado por Arturo Pardo (1 intervención) el 03/04/2014 16:30:56
Estimado pudiste resolver el problema?

a mi me da el mismo error al hacer un tquery.close;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:QUERY.CLOSE

Publicado por Leonardo Bidi (2 intervenciones) el 24/04/2009 17:47:37
Hola, Juan, yo lo hago continuamente pero le haria un pequeño cambio, si me permites..
Le saco el IF.

query.sql.clear;
query.sql.add(CONSULTASQL);
query.open;

query.first;
while not (query.eof) do
begin
var := query.fieldByName('cojo un resultado de la consulta');
query.next;
end;
query.close ;

Fijate si asi te da error..

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar