GARANTIR DESCONTO

Fórum Montar colunas do DBGrid em Run-Time #231365

11/05/2004

0

Pessoal estou montando uma SQL em run-time, e quero adicionar todos os campos da SQL a lista TField do TDataSet, e consequentemente ligar os campos (TField) do TDataSet a um DBGrid.

É para uma tela de pesquisa:

QLoq.SQL.Clear;
QLoq.SQL.Add(´Select codigo, cidade from cidades´);

QLoq.Fields.Add(´Codigo´) // +/- assim
QLoq.Fields.Add(´Cidade´) // +/- assim

DBGrid.Columns.Add;
DBGrid.Columns.Add;

DBGrid.Columns.Fieldname:=´Codigo´
DBGrid.Columns.Fieldname:=Cidades´

Compreendes?


Valberaguiar

Valberaguiar

Responder

Posts

11/05/2004

Rômulo Barros

Utilize a propriedade Columns do seu DBGrid para adicionar as colunas e, em seguida, sete a mesma para o seu field, através do FieldName da coluna indicada :lol:


Responder

Gostei + 0

11/05/2004

Valberaguiar

É exatamente isso q estou tentando fazer.... Dava pra dar um exemplo? Pfv...

Obrigado!!


Responder

Gostei + 0

11/05/2004

Rômulo Barros

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  ClientDataSet1.Close;
  ClientDataSet1.CommandText := ´select matricula from pessoal_pes´;
  DBGrid1.DataSource := DataSource1;
  DBGrid1.Columns[0].Title.Caption := ´a´;
  DBGrid1.Columns[0].FieldName := ´matricula´;
  ClientDataSet1.Open;
end;

end.
:roll:


Responder

Gostei + 0

11/05/2004

Khundalini

Particularmente, a melhor, mais elegante e mais prática forma de configurar as colunas de um TDBGrid (ou melhor, um descedente de TCustomDBGrid) é usar a propriedade Visible dos TFields de um dataset para True. Isso pode ser feito tanto em tempo de projeto (a.k.a. Design-Time) como em tempo de execução (a.k.a. Run-Time). Todos os TFields, por default, possuem a propriedade Visible com o valor True. Portanto, fica mais fácil configurar um grid, pois você só precisaria configurar a propriedade para False apenas para os campos que você não quer mostrar. Exemplo:

procedure TDataModule1.Table1AfterOpen(DataSet: TDataSet);
begin
Table1.FieldByName(´SALARIO´).Visible := False;
end;

A dica vale mesmo se você não tiver objetos TField criados em tempo de projeto ou em tempo de execução.

[]s
Rubem Rocha
Manaus, AM


Responder

Gostei + 0

11/05/2004

Valberaguiar

Amigos, com a ajuda de vcs o meu problema está bem próximo de uma solução, porém já abusando um pouco mais da presteza de vcs.

[b:e5b7b6a2b5]Qloq.Close;
Qloq.FieldList.Clear;[/b:e5b7b6a2b5]
[b:e5b7b6a2b5]Qloq.SQL.Clear;[/b:e5b7b6a2b5] //Não tenho nenhum campo no Editor de Campo do Delphi e nem SQL. OK Até 100¬.

[b:e5b7b6a2b5]Qloq.SQL.Add(´Select Codigo, Cliente, Fantasia From Clientes´);[/b:e5b7b6a2b5]
//Agora defino a SQL em run-time q ora pode ser com cliente e 3 campo e ora com cidades com apenas um campo.

[b:e5b7b6a2b5]Qloq.FieldDefs.Add(´Codigo´, ftInteger, 0, False);
Qloq.FieldDefs.Add(´Cliente´, ftString, 40, False);
Qloq.FieldDefs.Add(´Fantasia´, ftString, 40, False);[/b:e5b7b6a2b5] //Aqui adicionei os campo ao Editor de campo (não sei se esse é o meio mais apropriado para faze-lo). Lembrando sempre q como o Form vai ser usado para localizar tanto ´Clientes´ como ´Cidades´ e outros..... não tem como eu sabe em Design-Time quantos campo são...

[b:e5b7b6a2b5]DBGrid1.Columns.Add;[/b:e5b7b6a2b5] //Para ´Código´
[b:e5b7b6a2b5]DBGrid1.Columns.Add;[/b:e5b7b6a2b5] //Para ´Cliente´
[b:e5b7b6a2b5]DBGrid1.Columns.Add;[/b:e5b7b6a2b5] //Para ´Fantasia´
//Adiciono as colunas para o DBGrid... (3, 2, 1....)

Pessoal até parece está dando certo.... Só falta eu definir as mascáras dos campo para q por exemplo o campo código aparece no grid formatado (0000000010...).

Estava tentando definir as mascáras com:

Qloq.FieldByname(´Codigo´).DisPlayFormat:=´#0000000000´;

só q não tem esse propriedade....
[/b]


Responder

Gostei + 0

11/05/2004

Khundalini

O método FieldByName() de um descendente de TDataSet retorna um objeto TField, e a propriedade DisplayFormat pertence a um descendente de TField, chamado TNumericField (consulta o help do Delphi).

Portanto, se quiser definir a máscara de um campo numérico, você precisa fazer um typecast (conversão de tipo), assim:

TNumericField(Query1.FieldByName(´Codigo´)).DisplayFormat := ´#000´;

O peixe foi pescado!

[]s
Rubem Rocha
Manaus, AM


Responder

Gostei + 0

11/05/2004

Valberaguiar

B I N G O!!!!!!! ... B I N G O!!!!!!!.. B I N G O!!!!!!!

:D :D :D
Meu amigo valeu!!!!


Responder

Gostei + 0

08/05/2007

Valberaguiar

Caros colegas....

TIntegerField(Pesquisa.FieldByName(´ID_Pedido´)).DisplayFormat := ´#0000000000´;

o que é cenessário fazer para este type cast funciona com DBExpress, TSQLDataSet?

Grato!!!!


Responder

Gostei + 0

08/05/2007

Valberaguiar

Sempre retorna um erro: ´No argument for format ´¬s´

mas antes de de fazer o type cast adiciono o campo:

FieldDefs.Add(´ID_Pedido´, ftInteger, 0, False);


Grato!!!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar