Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   TQuery con Fields dinamicos (https://www.clubdelphi.com/foros/showthread.php?t=40716)

momo 24-02-2007 19:20:38

TQuery con Fields dinamicos
 
Espero alguien pueda orientarme. :confused:

En mi aplicacion utilizo los AdoQueries en tiempo de diseño, pero son demasiados, por lo que quisiera cambiar su creación en tiempo de ejecución, lo cual logre, pero el query parece que solo recupera un registro. He aquí mi codigo:

Código Delphi [-]
var qryProduct: TADOQuery;
 dsqryProduct: TDataSource;
 Fproduct_name: TStringfield;
 begin
 Try
   qryProduct:= TADOQuery.Create(nil);
   dsqryProduct:= TDataSource.Create(nil);
   Fproduct_name := TStringField.Create(nil);
 With qryProduct do
  begin
    Connection := datos.conn;
    SQL.Clear;
    SQL.Add('SELECT pn.product_name ' +
            'FROM prods p, prodnames pn ' +
            'WHERE p.no_prod_name = pn.no_prod_name ' +
            'GROUP BY pn.product_name '+
            'ORDER BY pn.product_name ');
  end; // with
  dsqryProduct.DataSet:= qryProduct;
 
 
  Fproduct_name.FieldName := 'product_name';
  Fproduct_name.DisplayLabel := 'product_name';
  Fproduct_name.DataSet := qryProduct;
  Fproduct_name.Name := 'product_name';
  Fproduct_name.FieldKind := fkData;
 
whit qryProduct do
begin
  Fields.Add(Fproduct_name);
  FieldDefs.Update;
  Active:= False;
  Active:= True;
end; 
 
  while qryProduct.Eof do
  begin
   ShowMessage(Format('%s', [
            qryProduct.FieldByName('product_name').AsString ]));
  qryProduct.Next;
  end;
 
  dbcbAddProduct.DataSource:= dsqryProduct;
  dbcbAddProduct.DataField:= 'product_name';
  Except
   qryProduct.Free;
   dsqryProduct.Free;
   Raise;
  end; //Try

pijo 01-03-2007 18:06:30

El problema de que sólo te enseñe un registro lo tienes en el while (creo), tú has escrito:
Cita:

Empezado por momo
Código Delphi [-]
  while qryProduct.Eof do
  begin
   ShowMessage(Format('%s', [
            qryProduct.FieldByName('product_name').AsString ]));
  qryProduct.Next;
  end;

Cuando yo supongo que tendria que ser:
Cita:

Empezado por momo
Código Delphi [-]
  while not qryProduct.Eof do
  begin
   ShowMessage(Format('%s', [
            qryProduct.FieldByName('product_name').AsString ]));
  qryProduct.Next;
  end;

Un consejito, si no tienes que crear campos calculados o lookup te recomendaria que no definieras los campos de la consulta, ya que si no tienes ninguno definido, en el momento de abrir la consulta te los crea dinámicamente según el resultado de la consulta.

ánimos


La franja horaria es GMT +2. Ahora son las 00:24:12.

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