Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   obtener datos de registros de resultado de un query (https://www.clubdelphi.com/foros/showthread.php?t=50335)

thelibmx 14-11-2007 22:30:18

obtener datos de registros de resultado de un query
 
hola amigos quisiera saber como podria hacer para saber la informacion o datos de ciertos campos que encuentra un query uso delphi2006 y mi bd es postgre,(no se preocupen por postgre es similar a mysql) les dejo estas instrucciones que funcionan para que puedan darse una idea de la similitud de postgre con las demas bases de datos, uso un database y un tquery


Código Delphi [-]
 
fs.Qs.SQL.Add('select * from Registros where no_folio=708');    
 fs.qs.ExecSQL;
 fs.Qs.Open;
  showmessage(fs.Qs.FieldByName('id_empleado').AsString+' '+fs.Qs.FieldByName('anio').AsString+''+fs.Qs.FieldByName('periodo').AsString);
      fs.Qs.close;

Esa instruccion me trae el resultado con el valor de cada campo en este caso que cumplio con esa clausula por ejemplo id_empleado=1 anio=2007 y periodo=1 pero solo me funciona si el resultado es un solo registro el que cumple la condicion, pero cuando se trata de varios digamos este query

Código Delphi [-]
fs.Qs.SQL.Add('select * from Registros where anio=2007');    
 fs.qs.ExecSQL;
 fs.Qs.Open;
  showmessage(fs.Qs.FieldByName('id_empleado').AsString+' '+fs.Qs.FieldByName('anio').AsString+''+fs.Qs.FieldByName('periodo').AsString);
      fs.Qs.close;

ese query me trae minimo 50 resultados pero pueden ser mas, loque yo quisiera saber es los datos de cada registro afectado es decir, encontro un registro con esa condicion, que obtenga el anio,periodo y id_empleado del primer registro que cumplio la condicion, luego se vaya al segundo y obtenga los mismos datos y asi sucesivamente hasta que termine con todos los registros que se vieron afectados por el query, lo que me interesa es saber como puedo obtener la informacion de todos los registros que encontro el query, espero haberme explicado bien, por su atencion muchas gracias :confused:

Caral 14-11-2007 22:40:01

Hola
Pregunto:
Lo que quieres es que cada registro se vea en un mensaje independiente y no la totalidad de ellos?.
Saludos

jhonny 14-11-2007 22:40:08

Siguiendo con tu ejemplo, prueba lo siguiente:

Código Delphi [-]
fs.Qs.SQL.Add('select * from Registros where anio=2007');    
fs.Qs.Open;
fs.Qs.First;
while not fs.Qs.EOF do
begin
   showmessage(fs.Qs.FieldByName('id_empleado').AsString+' '+fs.Qs.FieldByName('anio').AsString+''+fs.Qs.FieldByName('periodo').AsString);
fs.Qs.Next;
end;
fs.Qs.close;


El while, con ayuda del First, EOF y Next, recorreran el Query que te trae dicho resultado de 50 o mas registros.

thelibmx 14-11-2007 22:50:33

Cita:

Empezado por Caral (Mensaje 246221)
Hola
Pregunto:
Lo que quieres es que cada registro se vea en un mensaje independiente y no la totalidad de ellos?.
Saludos

no el mensaje solo lo ocupo para ver los registros, lo que necesito son los datos de cada registro que el query me encontro, y poderlos guardar en una variable para despues modificar esos registros encontrados en otra tabla creo que lo que busco es lo que puso jhony pero todavia no lo pruebo les informo en un momento

thelibmx 14-11-2007 23:04:39

Cita:

Empezado por jhonny (Mensaje 246222)
Siguiendo con tu ejemplo, prueba lo siguiente:


Código Delphi [-]fs.Qs.SQL.Add('select * from Registros where anio=2007');
fs.Qs.Open;
fs.Qs.First;
while not fs.Qs.EOF do
begin
showmessage(fs.Qs.FieldByName('id_empleado').AsString+' '+fs.Qs.FieldByName('anio').AsString+''+fs.Qs.FieldByName('periodo').AsString);
fs.Qs.Next;
end;
fs.Qs.close;






El while, con ayuda del First, EOF y Next, recorreran el Query que te trae dicho resultado de 50 o mas registros.

Esto es lo que queria, gracias a ambos por ayudarme ahora dos dudas mas ,la primera es que con el while no se detiene cuando termina por que me arroja un registro de mas -1, supongo que es por que el next me lo hace una ves de mas despues de que ya llego al fin del query, y la otra es que si quisiera guardar los datos, creo que tendria que poner un arreglo, pero quisiera que me ayudaran un poco con la sintaxys, como lo declararia para que fuera variable el tamaño del arreglo, y si es que es buena opcion ocupar el arreglo para guardar los datos del query, solo los necesito para modificar otra tabla, una ves modificada la otra tabla ya no me sirven los datos aunque escribiendo en este momento, creo que acabo de resolver esa cosa, entonces me quedo con la primera duda, :confused:

jhonny 14-11-2007 23:14:44

Te sugiero que para aclarar esa duda que te queda, leas la ayuda en su topico TDataSet.Eof, allí te indican claramente cual es la función que cumple EOF... una vez leido esto vas a ver que EOF te indica el final de los registros (End-Of-File) y por eso el while lo evalua cada vez que tiene que hacerlo, hasta que dicha función nos devuelva True... No se si me hice entender, espero que si :).

thelibmx 15-11-2007 00:22:45

ok, mi error
Código Delphi [-]
fs.Qs.close;
el codigo esta bien, lo que pasa es que se cierra el query una linea antes, y en la proxima linea mostraba un mensaje con el resultado, pero como el query ya estaba cerrado pues no hay resultado, en fin piedritas del oficio, gracias jhonny


La franja horaria es GMT +2. Ahora son las 06:00:59.

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