Fórum Adicionar Tfields em tempo de execução #240220
28/06/2004
0
Se alguém souber....
Agradeço desde já
Vitor Rubio
Curtir tópico
+ 0Post mais votado
10/08/2017
SuaQuery.FieldList.Create(SuaQuery);
com isto ele irá criar os fields com base no sql que você rodou
Nbs Ltda
Gostei + 1
Mais Posts
28/06/2004
Koplin
Quando a consulta mudar, os campos serão mopstrados, acrescidos ou suprimidos normalmente. Para evitar que o titulo dos campos (field name) apareçam com nomes estranhos tipo COD_CLI faça a consulta como algo assim:
select COD_CLI as Codigo, NOME_CLI as Nome...
Pode-se mudar os TFields usando a propriedade FieldsDef. Se preferir este caminho, dê uma olhada nesta propriedade.
Gostei + 0
28/06/2004
Vitor Rubio
Gostei + 0
28/06/2004
Danielrossi
Gostei + 0
28/06/2004
Bon Jovi
DanielRossi,
Como os TFields já são criados dinamicamente pelo Delphi após o Open, então no seu caso basta alterar a propriedade depois do Open...
Exemplo:
procedure TForm1.ClientDataSet1AfterOpen(DataSet: TDataSet); begin PreencheDisplayFormat(DataSet); end; procedure TForm1.PreencheDisplayFormat(DataSet: TDataSet); var i: integer; begin for i := 0 to DataSet.Fields.Count - 1 do begin if DataSet.Fields[i] is TFloatField then TFloatField(DataSet.Fields[i]).DisplayFormat := ´,0.00´ else if DataSet.Fields[i] is TIntegerField then TIntegerField(DataSet.Fields[i]).DisplayFormat := ´000´; end; end;
E vitor^_^, não entendi exatamente qual sua necessidade.
Gostei + 0
29/06/2004
Vitor Rubio
O que eu queria era fazer tudo isso em run-time, por ex.: uma query do tipo ´select cod_cli, nome_cli from cleites´ tem os campos cod_cli e nome_cli, mas, e se em runtime eu alterar a query para ´select * from fornecedores´, os campos seriam outros, como adicionar esses Tfields em tempo de execução?
Gostei + 0
30/06/2004
Bon Jovi
DataSet.Close;
DataSet.SQL.Text := ´SELECT CODIGO, NOME FROM PRODUTO´;
DataSet.Open;
//Delphi criou os TFields para Codigo e Nome
ShowMessage(DataSet.FieldByName(´NOME´).AsString);
DataSet.Close;
DataSet.SQL.Text := ´SELECT TELEFONE FROM CLIENTE´;
DataSet.Open;
//Delphi limpou os TFields do DataSet e criou o TField para para Telefone
ShowMessage(DataSet.FieldByName(´Telefone´).AsString);
Gostei + 0
30/06/2004
Everton
procedure InsereFields(Form: TForm; ADataSet: TDataSet); var I: Integer; Field: TComponent; begin ADataSet.Active := False; For I := 0 to (ADataSet.Fields.Count - 1) do begin Case ADataSet.Fields[I].DataType of ftBlob: begin Field := TBlobField.Create(Form); TBlobField(Field).FieldName := ADataSet.Fields[I].FieldName; TBlobField(Field).DisplayLabel := ADataSet.Fields[I].DisplayLabel; TBlobField(Field).Size := ADataSet.Fields[I].Size; TBlobField(Field).DisplayWidth := ADataSet.Fields[I].DisplayWidth; TBlobField(Field).Required := ADataSet.Fields[I].Required; TBlobField(Field).DataSet := ADataSet; end; ftBoolean: begin Field := TBooleanField.Create(Form); TBooleanField(Field).FieldName := ADataSet.Fields[I].FieldName; TBooleanField(Field).DisplayLabel := ADataSet.Fields[I].DisplayLabel; TBooleanField(Field).Size := ADataSet.Fields[I].Size; TBooleanField(Field).DisplayWidth := ADataSet.Fields[I].DisplayWidth; TBooleanField(Field).Required := ADataSet.Fields[I].Required; TBooleanField(Field).DataSet := ADataSet; end; // E por aí vai ... end; Field.Name := ADataSet.Name + ADataSet.Fields[I].FieldName; end; end;
Gostei + 0
30/06/2004
Vitor Rubio
Pessoal, muito obrigado mesmo!!!![/b:b01b3be96e] qualquer coisa, me ponho a disposição, meu e-mail e outros contatos vc´s podem conferir no meu perfil!
FLW!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)