 VB - Exibindo tabelas e registros no controle TreeView
  
VB - Exibindo tabelas e registros no controle TreeView
O controle TreeView já deve ser um velho conhecido , mas para quem esta chegando agora , vou apresentá-lo: leia os artigos abaixo para ter uma visão geral deste importante controle de exibição de dados.
Você pode usar o TreeView em uma infinidade de aplicações. Neste artigo vou mostrar como realizar uma tarefa básica : carregar e exibir os nomes das tabelas de um banco de dados e os eus registros.
Vou usar neste exemplo o banco de dados Access Teste1.mdb que possui as seguintes tabelas: Artigos , Clientes e Produtos.
O projeto deve funcionar assim :
Inicie um novo projeto EXE no VB e no formulário padrão insira um controle TreeView(trvData) e uma caixa de texto - TextBox(TextBox1) - conforme figura abaixo:
| Configure o TextBox assim : | Configure o TreeView assim: | 
| 
 
 | 
 | 

Quando o formulário do projeto for carregado (Load) , irei criar um conexão com o banco de dados Teste1.mdb e listar o nome de suas tabelas.
A rotina ListaTabelas que faz este serviço utiliza o método OpenSchema do objeto Connection (ADO) para listar as tabelas.Veja o código abaixo: (Para saber mais sobre como usar o método OpenSchema leia o artigo : ADO - Obtendo informações sobre a fonte dos dados)
Na seção - General Declarations do formulário inclua o código que define a string de conexão e a torna visível para todo o formulário.
| Option Explicit ' a conexao com o banco de dados Private m_Conn As ADODB.Connection | 
1- O código do evento Load do formulário - form1.
| Private Sub Form_Load() Dim Arq_DB As String ' Pega o nome do banco de dados Arq_DB = "c:\teste\teste1.mdb" ' Abre a conexao com o banco de dados Set m_Conn = New ADODB.Connection m_Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Arq_DB & ";" & "Persist Security Info=False" m_Conn.Open ' Carrega os nomes das tabelas para o banco de dados ListaTabelas End Sub | 
2- O código da rotina ListaTabelas que exibe o nome das tabelas do banco de dados:
| 'lista as tabelas do banco de dados Private Sub ListaTabelas() Dim rs As ADODB.Recordset Dim table_node As Node ' Limpa o TreeView.     trvData.Nodes.Clear
    ' Obtem os nomes das tabelas usando o OpenSchema' O parametro final no array é "Table" para indicar que queremos uma lista de tabelas Set rs = m_Conn.OpenSchema(adSchemaTables,Array(Empty, Empty, Empty, "Table")) Do While Not rs.EOF Set table_node = trvData.Nodes.Add(, , , rs!TABLE_NAME) table_node.Tag = "Tabela" rs.MoveNext     Loop
    rs.CloseEnd Sub | 
Teremos o seguinte resultado exibido no formulário:

Agora quando o usuário clicar em uma tabela o programa irá chamar a rotina carregaRegistros para exibir os registros da tabela.(Eu estou concatenando todos os registros em uma string chamada : texto_registro.)
Se os registros da tabela já tiverem sidos 
exibidos a rotina não faz nada se não ela os exibe. Como eu sei quando isto 
ocorre ? Simples !! eu utilizo a propriedade Tag do 
Treeview para armazenar a string "Tabela" quando estiver exibindo a 
tabela ou a string  "Registro" quando os registros forem exibidos. Desta 
forma basta examinar esta propriedade usando o evento para saber o que esta 
carregado. 
1- A seguir a rotina que verifica o Nó para saber se os registros da tabela já foram exibidos:
| Private Sub trvData_NodeClick(ByVal Node As MSComctlLib.Node) ' Ve qual tipo de Nó (Registro ou Tabela) Select Case Node.Tag Case "Tabela" ' Carrega os registros da tabela carregaRegistros Node Case "Registro" 'exibe o registro selecionado na caixa de texto Text1.Text = Node.Text End Select End Sub | 
2- a rotina carregaRegistros que exibe os registros da tabela.
| ' lista os registors da tabela Private Sub carregaRegistros(ByVal table_node As Node) Dim rs As ADODB.Recordset Dim i As Integer Dim texto_registro As String Dim no_registro As Node
    ' se os registros da tabela foram carregados não faz nada    If table_node.Children > 0 Then Exit Sub
    ' Pega os registros da tabelaSet rs = m_Conn.Execute( "SELECT * FROM " & table_node.Text, , adCmdText) Do Until rs.EOF ' constroi a string do registro texto_registro = "" For i = 0 To rs.Fields.Count - 1 texto_registro = texto_registro & ", " & rs.Fields.Item(i) Next i         texto_registro = Mid$(texto_registro, 2)
        ' Inclui o registro no NóSet no_registro = trvData.Nodes.Add(table_node, tvwChild, , texto_registro) no_registro.Tag = "Registro"         no_registro.EnsureVisible
        ' vai para o proximo registrors.MoveNext     Loop
    rs.CloseEnd Sub | 
Ao clicar em uma tabela os registros serão exibidos conforme a figura abaixo:

Não esqueça de encerrar a conexão ao descarregar o formulário:
| Private Sub Form_Unload(Cancel As Integer) m_Conn.Close End Sub | 
Se você quiser exibir todos os registros de uma tabela sem concatenar os campos em uma string altere o código do laço Do/Loop na rotina carregaRegistros conforme abaixo. (Ao lado a figura exibindo o resultado)
| Do Until rs.EOF ' constroi a string do registro texto_registro = "" For i = 0 To rs.Fields.Count - 1             texto_registro = "" & rs.Fields.Item(i)            Set no_registro = trvData.Nodes.Add(tabela_no, tvwChild, , texto_registro)Next i texto_registro = Mid$(texto_registro, 2) ' Inclui o registro no no         'Set no_registro = trvData.Nodes.Add(tabela_no, tvwChild, , texto_registro)no_registro.Tag = "Registro" no_registro.EnsureVisible ' vai para o proximo registro rs.MoveNext Loop | 
 | 
Você pode incluir mais funcionalidades no projeto. Eu , vou ficando por aqui...
Até o próximo artigo VB
| Veja os 
    Destaques e novidades do SUPER DVD Visual Basic 
(sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? 
 Quer aprender C# ?? 
 | 
             Gostou ?
  Compartilhe no Facebook
Compartilhe no Facebook
  
 Compartilhe no Twitter
 
Compartilhe no Twitter
 
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#