Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Resultado tquery (https://www.clubdelphi.com/foros/showthread.php?t=57494)

johurgi 17-06-2008 18:17:37

Resultado tquery
 
Hola a todos,

¿Como puedo coger los datos que me devuelve una query?tengo en mi programa una tquery que consulta un numero variable de columnas, estas columnas tengo que leerlas despues una a una.

Mis datos en la tabla los tengo de la siguiente forma.
Código SQL [-]
COD     TEXTO
--------------
...
1.1       HOLA
1.2       MUNDO
1.3       .
...


Y el codigo que habia escrito y no me funciona es el siguiente


Código:

filtro:='select * from tabla where cod like '1.*';
consulta.sql.text:=filtro;
consulta.execsql;
consulta.open;
if consulta.recordcount <> 0 then
begin
//RECOGO LOS DATOS
end;

gracias por vuestra ayuda.

poliburro 17-06-2008 19:28:32

Código:


filtro:=consulta.sql.text:='select * from tabla where cod like '1.*';
consulta.open;
While Not Consulta.Eof do
begin
  showMessage(Consulta.fields[0].AsString);
  Consulta.Next;
end;


santiago14 17-06-2008 19:41:54

Consulta....
 
Cita:

Empezado por johurgi (Mensaje 294114)
Hola a todos,

¿Como puedo coger los datos que me devuelve una query?tengo en mi programa una tquery que consulta un numero variable de columnas, estas columnas tengo que leerlas despues una a una.

Mis datos en la tabla los tengo de la siguiente forma.
Código SQL [-]
COD     TEXTO
--------------
...
1.1       HOLA
1.2       MUNDO
1.3       .
...


Y el codigo que habia escrito y no me funciona es el siguiente


Código:

filtro:='select * from tabla where cod like '1.*';
consulta.sql.text:=filtro;
consulta.execsql;
consulta.open;
if consulta.recordcount <> 0 then
begin
//RECOGO LOS DATOS
end;

gracias por vuestra ayuda.


Creo que una buena forma sería a través de un array dinámico:

Código Delphi [-]
procedure cargarArrayDinamico(...);
var
  A : array of array of string;
  I, J : Integer;
begin
  SetLength(A, consulta.fieldCount); //Cantidad de columnas que te devolvió la consulta
  consulta.first;
  for I := 0 to consulta.recordCount do //Cant. de registros que devolvió la consulta
  begin
  //Recorremos todas las columnas  
    for J := Low(A[i]) to High(A[i]) do
    begin
       SetLength(A[i], consulta.recordCount); //Le agregamos las filas a la segunda dimensión, para cada A[i]  
    end;
  end; //del primer for...
//a esta altura ya tengo el array del mismo tamaño que la consulta y puedo hacer lo que quiera con ellas.

No se si esto es lo que pides.

No he probado aún este código pero la idea está. No conozco una función que te levante directamente los valores de la consulta y los mande a un array pero supongo que con esto se arregla la cosa...

johurgi 19-06-2008 08:52:42

Gracias por vuestra ayuda.

Al final hice lo que me digiste poliburro, y me funciono, lo unico que al ser un tabla con mas de 150000 registro acaba el pc por quedarse sin memoria.

Y he cambiado la forma de hacerlo, lo he echo con un ttable utilizando la propiedad de filter, pero me vuelve a dar problemas en la segunda pasada del bucle que se encarga de dar la condicion de filtrado me da un error cuando intento establecer el nuevo filtro:

Código:

while not tabla1.eof do
begin
  tabla2.filter:='codigo='''+tabla1Cod.asstring'''';
  tabla2.filtered:=true;
  if tabla2.recordcount <> 0 then
  begin
    while not tabla2.eof do
    begin
      res:=res + tabla2Texto.asstring;
      tabla2.next;
    end
  tabla2.filtered:=false;
  {Inserto en otra tabla}
  end
  tabla1.next;
end

El error que me da cuando intento volverla a filtrar es el de "Operation not aplicable".

si alguien me pudiera echar una mano se lo agradeceria

Un saludo

eduarcol 19-06-2008 14:14:44

Estas planteando una situacion master detail, ubica informacion sobre eso en el foro que se ha tratado varias veces.

En resumen la tabla1 seria la maestra y la tabla2 la detalle, cada vez que se mueva la tabla1 automaticamente se filtran los registros en la 2

johurgi 19-06-2008 15:03:35

voy a probar lo que me dices de maestro detalle, haber que tal, me acabas de dar una idea.

gracias


La franja horaria es GMT +2. Ahora son las 01:07:36.

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