Treeview pegar todo os campos do Banco de Dados?

Delphi

22/06/2006

Bom dia amigos delphianos, estou aqui mais uma vez para que os colegas me ajudem a usar o treview.

O que eu quero mesmo é mostrar dentro de um treeview os nomes dos clientes de uma tabela e os endereços dos mesmos.

entaum tenho uma tabela chamada dbclientes com os campos clientes, endcli.

ai peguei esta rotina aqui para o treeview

procedure TForm1.Button1Click(Sender: TObject);
var
Nodo, SubNodo: TTreeNode;
begin
query1.Open;
while not Query1.Eof do
begin
Nodo := TreeView1.Items.Add(nil, Query1clientes.Value); //aqui nao sei se acertei
Nodo.ImageIndex := 0;
Nodo.SelectedIndex := 0;

Query1.Close;
Query1.SQL.Text := ´select * from dbclientes where clientes =:xcli and endcli =:xendcli´; // tambem nao sei se esta certo esta linha
Query1.ParamByName(´Xcli´).AsString := query1clientes.value; //nao entendi pq deste parametros fiz como achei o exemplo.
Query1.ParamByName(´Xfen´).AsString := query1endcli.Value;
Query1.Open;
while not Query1.Eof do
begin
SubNodo := TreeView1.Items.AddChild(Nodo, Query1clientes.Value); //tambem nao tenho certeza nesta linha
SubNodo.ImageIndex := 0;
SubNodo.SelectedIndex := 0;
Query1.Next;
end;
Query1.Next;
end;
end;
end.


Gradecido pela ajuda de todos


JL_Jºr


Jlimajr

Jlimajr

Curtidas 0

Respostas

Micheus

Micheus

22/06/2006

quanta dúvida... :)
Primeiro de tudo: vc não pode utilizar um TQuery para controlar um loop e ,dentro deste loop, reaproveitar o mesmo componente para executar outra consulta e ainda por cima passar o antigo valor como parâmetro! (deu até um nó agora :) )
Supondo que cada cliente tenha apenas um endereço, as coisas ficariam mais simples:
procedure TForm1.Button1Click(Sender: TObject);
var
  Nodo, SubNodo: TTreeNode;
begin
  query1.SQL.Text := ´select clientes, endcli from dbclientes´
  query1.Open;
  while not query1.Eof do
  begin
   //aqui nao sei se acertei   (está certo)
    Nodo := TreeView1.Items.Add(nil, Query1clientes.Value);
    Nodo.ImageIndex := 0;
    Nodo.SelectedIndex := 0;

   //tambem nao tenho certeza nesta linha   (aqui deveria ser o endereço)
    SubNodo := TreeView1.Items.AddChild(Nodo, Query1endcli.Value);
    SubNodo.ImageIndex := 0;
    SubNodo.SelectedIndex := 0;

    query1.Next;
  end;
  query1.Close;
end;

Dica: adicione em seu select apenas os campos que vc pretende usar - evite o [b:1f22a26b13]*[/b:1f22a26b13], pois vc estará trafegando mais informação do que realmente precisa;

Aquele extra (comparando ao seu post) só se justificaria se cada cliente tiver mais de um endereço. Mesmo assim, observando o que citei antes, vc deve utilizar outro componente TQuery. Adaptando ao código acima:
procedure TForm1.Button1Click(Sender: TObject);
var
  Nodo, SubNodo: TTreeNode;
begin
  query1.SQL.Text := ´select clientes from dbclientes´;
  query2.SQL.Text := ´select endcli from dbclientes where clientes =:xcli´; 
  query1.Open;
  while not query1.Eof do
  begin
   //aqui nao sei se acertei   (está certo)
    Nodo := TreeView1.Items.Add(nil, Query1clientes.Value);
    Nodo.ImageIndex := 0;
    Nodo.SelectedIndex := 0;

    query2.ParamByName(´Xcli´).AsString := query1clientes.value;
    query2.Open;
    while not query2.EOF do
    begin
     //tambem nao tenho certeza nesta linha   (aqui deveria ser o endereço)
      SubNodo := TreeView1.Items.AddChild(Nodo, Query2endcli.Value);
      SubNodo.ImageIndex := 0;
      SubNodo.SelectedIndex := 0;
      query2.Next;
    end;
    query2.Close;
    query1.Next;
  end;
  query1.Close;
end;

Acho que deve funcionar. Qqr coisa posta ai!


GOSTEI 0
Jlimajr

Jlimajr

22/06/2006

Perfeito o código que voçe postou. Funcionou certinho.

Muito obrigado micheus


GOSTEI 0
POSTAR