PDA

Ver la Versión Completa : TQuery con Fields dinamicos


momo
24-02-2007, 19:20:38
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:


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:
while qryProduct.Eof do
begin
ShowMessage(Format('%s', [
qryProduct.FieldByName('product_name').AsString ]));
qryProduct.Next;
end;


Cuando yo supongo que tendria que ser:
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