Fórum Problemas com TreeView no OnShow do Form #326526

31/07/2006

0

Pessoal, estou trocando o componente DBGrid pelo TreeView / List View.
entao em um dos meus formulários tenho duas tabelas

Tbl_R_Substancias_2 = tabela Detalhe
Tbl_R_Substancias = tabela Mestre

para trazer os dados para o TreeView eu fiz um select que vai criar um Node Root para cada Registro da tabela detalhe, e outro select que vai jogar todos os dados da tabela mestre - cujos o ´codigo de descrição´ for igual ao código da tabela detalhe - em Nodes filhos, no seu respectivo Node Root.

Bom, o fato é que esse procedure funciona muito bem quando eu executo ele atravez de um botão, depois do form criado, porem no enevto OnShow do Form ele me da aquele erro ´Access violation at adress 0042616A of adress 00000394´.

Alguem saberia me ajudar com isso, pois eu gostaria que esse procedure estrivesse no OnShow do Form

Segue abaixo a procedure:


procedure AtualizaArvore;
begin

      {Se não estiver selecionado}
   if(  R_Substancias.TV.Selected = nil  ) then
   begin
         {Existe um node Root?}
      if(  R_Substancias.TV.Items.Count = 0  ) then
      begin
          DM.Tbl_R_Substancias_2.Close;
          DM.Tbl_R_Substancias_2.SelectSQL.Clear;
          DM.Tbl_R_Substancias_2.SelectSQL.Add(´SELECT * FROM NBR10004_2004_SUBSTANCIAS_2 ORDER BY DESCRICAO´);
          DM.Tbl_R_Substancias_2.Open;

          DM.Tbl_R_Substancias_2.First;
          R_Substancias.TV.items.BeginUpdate;
          While not DM.Tbl_R_Substancias_2.Eof do
          begin
              {Adiciona o Node Root}
              with R_Substancias.TV.Items.AddFirst(  nil,  DM.Tbl_R_Substancias_2DESCRICAO.AsString + ´ ( ´ + DM.Tbl_R_Substancias_2TIPO.AsString + ´ )´) do
              begin
                  Selected      := true;
                  {Seta a imagem root padrao}
                  ImageIndex    := DM.Tbl_R_Substancias_2CODIGO_IMAGEM.AsInteger;
                  {Seta a imagem root selecionada.}
                  SelectedIndex := DM.Tbl_R_Substancias_2CODIGO_IMAGEM.AsInteger;

                  // Insere as substancias filhas do node root ---------
                  DM.Tbl_R_Substancias.Close;
                  DM.Tbl_R_Substancias.SelectSQL.Clear;
                  DM.Tbl_R_Substancias.SelectSQL.Add(´SELECT * FROM NBR10004_2004_SUBSTANCIAS WHERE CODIGO_DESCRICAO = ´+DM.Tbl_R_Substancias_2CODIGO.AsString);
                  DM.Tbl_R_Substancias.Open;

                  DM.Tbl_R_Substancias.First;
                  While not DM.Tbl_R_Substancias.Eof do
                  begin
                      {Adidiona o Node Como um Filho do Node Selecionado}
                      with R_Substancias.TV.Items.AddChildFirst(  R_Substancias.TV.Selected,  DM.Tbl_R_SubstanciasNOME_COMUM.AsString  ) do
                      begin
                          {Set the image used when the node is not selected}
                          ImageIndex := 0;
                          {Image used when the node is selected}
                          SelectedIndex := 2;

                          MakeVisible;
                      end;
                      DM.Tbl_R_Substancias.Next;
                  end;

                  //----------------------------------------------------

              end;

              DM.Tbl_R_Substancias_2.Next;
          end;
          R_Substancias.TV.items.EndUpdate;
      end;
   end;

end;


Abraços a todos!


Mahdak

Mahdak

Responder

Posts

31/07/2006

Mahdak

só pra elucidar mais...

- TV = TreeView
- meu banco = Firebird 1.5.3
- Delphi 7
- Ainda nao implementei o List View (O problema é só com o TreeView)

Abraços


Responder

Gostei + 0

02/08/2006

Mahdak

sobe, pq ainda nao consegui resolver... :roll:


Responder

Gostei + 0

02/08/2006

Bon Jovi

Já depurou passo a passo? Em qual linha ocorre Access Violation?


Responder

Gostei + 0

07/08/2006

Mahdak

[quote:6039e81601=´Bon Jovi´]Já depurou passo a passo? Em qual linha ocorre Access Violation?[/quote:6039e81601]

depurei... da uma olhada na imagem:


[img:6039e81601]http://www.colegioestadual.com.br/japa/images/erro.jpg[/img:6039e81601]


e dai??


Responder

Gostei + 0

08/08/2006

Siam

E qual o código do evento onShow ?


Responder

Gostei + 0

08/08/2006

Mahdak

E qual o código do evento onShow ?


eu fasso um select para atualizar a tabela(que ja verifiquei e nao tem problemas)

e depois do select eu chamo a procedure ´atualizaarvore;´


Responder

Gostei + 0

08/08/2006

Siam

R_Substancias é o Form ?
Seu TV está instanciado ?


Responder

Gostei + 0

08/08/2006

Mahdak

R_substancias é o Form Sim...

Desculpe mas o que voce quer dizer por TreeView instanciado?


Responder

Gostei + 0

08/08/2006

Siam

Vc cria o TV em runtime ?


Responder

Gostei + 0

08/08/2006

Mahdak

nao, ele ja existe em tempo de projeto...


Responder

Gostei + 0

08/08/2006

Siam

Experimente colocar a procedure AtualizaArvore como um método do seu Form R_Substancias


Responder

Gostei + 0

08/08/2006

Mahdak

e como eu faria isso? vc teria como me exemplificar?


Responder

Gostei + 0

08/08/2006

Siam

Defina a procedure na seção public ou private do seu R_Substancias.
Coloque sua procedure na mesma unit do Form.
Na implementação coloque:
procedure R_Substancias.AtualizaArvore;


Responder

Gostei + 0

08/08/2006

Mahdak

ok, velleu pela força, vou testar a tarde, pq aqui nao tenho o delphi instalado, qualquer coisa eu respondo...

abração!


Responder

Gostei + 0

11/08/2006

Mahdak

nao adiantou brother...

só repostando a imagem acima que nao da mais de ver

[img:4619b84e21]http://www.colegioestadual.com.br/japa/imagens/erro.jpg[/img:4619b84e21]


Responder

Gostei + 0

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

Aceitar