Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Donde se almacena el resultado de un Select en un TQuery? (https://www.clubdelphi.com/foros/showthread.php?t=62327)

chalao 17-12-2008 12:22:44

Donde se almacena el resultado de un Select en un TQuery?
 
En mi base de datos hay una tabla (usuarios) que contiene una columna nombre y otra conectado. En la columna conectado se guarda un entero 0 o 1 dependiendo si esta o no conectado.

Utilizando TZQuery de los componentes Zeos (similar a TQuery) hago una consulta sencilla:
Código SQL [-]
SELECT nombre FROM usuarios WHERE conectado=1;
Con esta consulta pretendo saber los nombres de los usuarios conectados. Pero realizando un ejemplo donde en mi tabla hay tres usuarios conectados tan sólo me devuelve uno de ellos en la propiedad
Código Delphi [-]
Query.Fieldvalues['nombre'];

Tambien me he fijado en los valores de Recordcount y Fieldcount siendo los resultados 3 y 1 respectivamente. Por lo que intuyo que el resultado es correcto y que se almacena en 3 records de 1 field cada uno y que lo que yo consulto es el field del primer record. Con lo cual si todas estas suposiciones son correctas mi problema es que no se cambiar de record para obtener los tres resultados.
He estado probando con First, Next, Prior y Last y despues consulto el valor de Fieldvalues y sigue siendo el mismo.

Gracias por adelantado
Un saludo

Caro 17-12-2008 13:02:37

Hola chalao, si enlazas tu DataSet(ZQuery) a un DBGrid veras el resultado que te ha devuelto, también puedes hacer esta prueba para ver los valores de tu consulta.

Código Delphi [-]
 //antes debe estar ejecutada tu consulta
 ZQuery.First;
 While Not ZQuery.Eof Do
  begin
   Showmessage(ZQuery.FieldByName('nombre').AsString);
   ZQuery.Next;
  end;

Saluditos

chalao 17-12-2008 13:27:44

Muchas gracias por tu pronta respuesta.

En realidad el código que tu has puesto era similar a lo que yo estaba probando pero al verlo caí en el error, me explico.
Tengo una función:
Código Delphi [-]
function Query( Peticion : string ) : TZQuery;
Que ejecuta la peticion en mi componente ZQuery.
Yo lo que hacía era algo similar a:
Código Delphi [-]
  Peticion := 'SELECT nombre FROM usuarios WHERE conectado=1';
  Query( Peticion ).First;
  While Not Query( Peticion ).Eof Do begin
    Showmessage( Query( Peticion ).FieldByName('nombre').AsString);
    Query( Peticion ).Next;
  end;

Con lo cual al hacer la peticion en todas las sentencias siempre obtenia el primer campo.

Ahora lo cambié a:
Código Delphi [-]
  var
  ZQuery : TZQuery;
............
  Peticion := 'SELECT nombre FROM usuarios WHERE conectado=1';
  ZQuery := Query( Peticion );
  ZQuery.First;
  While Not ZQuery.Eof Do begin
    Showmessage( ZQuery.FieldByName('nombre').AsString);
    ZQuery.Next;
  end;

Y perfecto, el error no estaba en el mal uso de first y next sino en el mal uso de mi propia function.

Gracias ;)


La franja horaria es GMT +2. Ahora son las 22:14:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi