copiar tquery.fieldlist para outra tquery.fieldlist?

Delphi

16/05/2008

Como faço para copiar de uma tquery.fieldlist para outra tquery.fieldlist?


Xtreme

Xtreme

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

16/05/2008

creio que com assing seja possível.

query1.fieldlist.assign(query2.fieldlist);

tente aí...


GOSTEI 0
Xtreme

Xtreme

16/05/2008

creio que com assing seja possível. query1.fieldlist.assign(query2.fieldlist); tente aí...


Pois é tentei mas nao funciona, ´property read-only´


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/05/2008

tente assim:

query2.fielddefs.clear;
for i := 0 to query1.FieldDefs.Count-1 do
  query2.FieldDefs.Add(
    query1.Fields[i].FieldName,
    query1.Fields[i].DataType,
    query1.Fields[i].Size,
    query1.Fields[i].Required
  );



GOSTEI 0
Xtreme

Xtreme

16/05/2008

Pois então fiz isso, deu certo, mas acabei percebendo que nao é exatamente isso que eu queria, na real o que quero é copiar os fields de uma query para outra, copiar o displaylabel, displayformat, etc. até tentei da seguinte maneira

   query1.Fields.Clear;
   for x := 0 to query2.FieldCount -1 do
   begin
      query1.Fields.Add(query2.Fields[x]);
   end;


mas ai o que acontece é que, quando executo a query1, no dbgrid até sao listados os registros mas os dados nao aparecem, aparecem as linhas no dbgrid mas nada escrito nelas!


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/05/2008

e assim?
begin
  query2.fielddefs.clear;
  for i := 0 to query1.FieldDefs.Count-1 do
  begin
    query2.FieldDefs.Add(
      query1.Fields[i].FieldName,
      query1.Fields[i].DataType,
      query1.Fields[i].Size,
      query1.Fields[i].Required
    );
    query2.Fields[i].DisplayLabel := query1.Fields[i].DisplayLabel;
    query2.Fields[i].EditMask := query1.Fields[i].EditMask;

    if query2.Fields[i].DataType in [ftSmallint, ftInteger, ftFloat] then
    begin
      TFloatField(query2.Fields[i]).EditFormat := TFloatField(query1.Fields[i]).EditFormat;
      TFloatField(query2.Fields[i]).DisplayFormat := TFloatField(query1.Fields[i]).DisplayFormat
    end;
  end;
end;



GOSTEI 0
Xtreme

Xtreme

16/05/2008

e assim?
begin
  query2.fielddefs.clear;
  for i := 0 to query1.FieldDefs.Count-1 do
  begin
    query2.FieldDefs.Add(
      query1.Fields[i].FieldName,
      query1.Fields[i].DataType,
      query1.Fields[i].Size,
      query1.Fields[i].Required
    );
    query2.Fields[i].DisplayLabel := query1.Fields[i].DisplayLabel;
    query2.Fields[i].EditMask := query1.Fields[i].EditMask;

    if query2.Fields[i].DataType in [ftSmallint, ftInteger, ftFloat] then
    begin
      TFloatField(query2.Fields[i]).EditFormat := TFloatField(query1.Fields[i]).EditFormat;
      TFloatField(query2.Fields[i]).DisplayFormat := TFloatField(query1.Fields[i]).DisplayFormat
    end;
  end;
end;


Cara valeu pela ajuda, valeu mesmo, não usei exatamente o que vc passou, mas me deu a luz que precisava! T+


GOSTEI 0
POSTAR