VB.NET - Exibindo nome de tabelas e campos de um Banco de dados
Abaixo temos duas figuras que exibem o formulário de nossa aplicação em tempo de desenho (fig 1.0) e em tempo de execução (fig 2.0)
fig 1.0 - formulário da aplicação | fig 2.0 - resultado da execução da aplicação |
O objetivo é : dado um caminho e nome de um banco de dados Access , exibir suas tabelas e os respectivos campos de uma determinada tabela selecionada.
Nota : No artigo : ADO.NET - Obtendo o esquema de uma fonte de dados - eu falei sobre como obter esquemas de tabelas usando ADO.NET.
Agora ao trabalho.
Crie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)
No formulário padrão insira os seguintes controles : Label , TextBox , GroupBox , Button e ListBox conforme o layout acima . Os nomes do controles que tiveram esta propriedade alterada foram:
TextBox | name = txtMDB |
Button | name = btnProcura |
ListBox | lstTabelas e lstColunas |
No inicio do formulário vamos declarar duas variáveis que deverão ser visíveis em todo o formulário :
Dim nomeMDB As String- nomeMDB é uma string que irá guardar o
nome e caminho do banco de dados
- acesso é uma variável do tipo AcessoBD - que irá guardar uma instância
da classe AcessoBD que iremos criar
- O usuário deverá fornecer o caminho e nome do banco de dados Access e clicar no botão Procurar. O código do evento Click deste botão é o seguinte :
Private Sub btnProcura_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcura.Click If txtMDB.Text = "" Then Dim openFileDialog1 As New OpenFileDialog() openFileDialog1.InitialDirectory = "c:\teste" openFileDialog1.Filter = "mdb files (*.mdb)|*.mdb|All files (*.*)|*.*" openFileDialog1.FilterIndex = 2 openFileDialog1.RestoreDirectory = True If openFileDialog1.ShowDialog() = DialogResult.OK Then nomeMDB = openFileDialog1.FileName End If Else nomeMDB = txtMDB.Text End If If IO.File.Exists(nomeMDB) Then GroupBox1.Text = nomeMDB acesso.conectarDB(nomeMDB) lstTabelas.DataSource = acesso.nomeTabelas End If End Sub
|
Neste código estou usando as caixas de diálogo padrão do Windows , no caso a caixa - AbrirArquivo (OpenFile). Vou exibir a janela Abrir Arquivo como modal. Se você lembra no VB 6.0 para abrir um janela como modal usamos o método Show com o parâmetro vbModal.
No VB.NET usamos o método ShowDialog para exibir um formulário como modal. Para exibir um formulário como não modal usamos o método Show.
Nota: Um objeto Modal precisa ser fechado ou escondido ante de continuar trabalhando com o resto da aplicação.
Ainda recordando , no VB 6.0 tínhamos o controle CommonDialog que fornecia diversas caixas de diálogos. No VB.NET este controle foi substituido pelos controles : ColorDialog , FonteDialog , OpenFileDialog , PageSetupDialog , PrintDialog , e PrintPreviewDialog e SaveFileDialog. Nosso projeto irá usar o controle OpenFileDialog.
A caixa de diálogo será aberta se não houver nome de arquivo informado na caixa de texto txtMDB. Após selecionar o nome do arquivo ele será atribuído a variável : nomeMDB através da propriedade FileName : nomeMDB = openFileDialog1.FileName
Após receber o nome do arquivo verificamos se o mesmo existe e em caso positivo acessamos os métodos : conectarDB() e nomeTabelas da classe AcessoBD conforme mostrado no trecho de código abaixo:
If IO.File.Exists(nomeMDB) Then GroupBox1.Text = nomeMDB
acesso.conectarDB(nomeMDB)
lstTabelas.DataSource = acesso.nomeTabelas
End If
Ao ser executado o ListBox - lstTabelas será preenchido com o nome das tabelas. Ao clicar em um item do listbox iremos usar o método nomesColunas da classe AcessoBD conforme abaixo :
Private
Sub btnColunas_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles
btnColunas.Click
lstColunas.DataSource = acesso.nomesColunas(lstTabelas.SelectedItem) End IfEnd Sub |
A instância da classe pode ser obtida no evento Load do formulário :
Private
Sub Form1_Load(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles
MyBase.Load acesso = New AcessoBD() End Sub |
Para criar a classe AcessoBD , no menu Project selecione a opção : Add Class ; selecione Class e informe nome do arquivo como AcessoBD.vb. A estrutura desta classe é exibida abaixo:
Imports
System.Data.OleDb Public Class AcessoBD Friend dbConnection As OleDbConnectionFriend dbDataAdapter As OleDbDataAdapter Friend CadeiaConexao As String Friend ArquivoDados As StringFriend
Sub conectarDB(Optional
ByVal
NomeBaseDados As
String = "") End Sub Friend
Function nomesColunas(ByVal
nome_Tabela As
String)
As
String() End Class |
Como você pode ver a classe possui os atributos :
Friend dbConnection As OleDbConnectionFriend dbDataAdapter As OleDbDataAdapter
Friend CadeiaConexao As String
Friend ArquivoDados As Stringe os métodos :
Friend
Sub conectarDB(Optional
ByVal
NomeBaseDados As
String = "")
End Sub
Friend
Function nomesColunas(ByVal
nome_Tabela As
String)
As
String()
End Function
Em todos eles estamos usando o modificador Friend , isto faz com que os atributos e métodos sejam acessíveis somente dentro do programa que contém a declaração.
Nota: Temos cinco tipos de acesso : Public , Protected , Friend , Protected Friend e Private. O tipo Public é o que possui acesso mais abrangente e o tipo de acesso private o menos abrangente.
O código de cada método da classe AcessoBD é dado a seguir :
1- Método conectarBD - recebe o nome da base de dados como parâmetro.
Friend
Sub conectarDB(Optional
ByVal
NomeBaseDados As
String = "")
If ArquivoDados = "" Then Exit Sub End If ' CadeiaConexao = "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=" & ArquivoDados dbConnection = New OleDbConnection(CadeiaConexao) Catch e As ExceptionMessageBox.Show("Erro ao cria a conexão :" & vbCrLf & e.Message) Exit Sub End Try
End Sub |
2- Método nomeTabelas - retorna um array com o nome das tabelas do banco de dados.
Friend Function nomeTabelas() As String()Dim nomeTabelas_() As String Dim dataTable As Data.DataTable Dim dbNull As System.DBNull Dim restricoes() As Object = {dbNull, dbNull, dbNull, "TABLE"} Dim i As Integer If dbConnection Is Nothing Then dbConnection = New Data.OleDb.OleDbConnection(CadeiaConexao) End IfIf dbConnection.State <> ConnectionState.Open Then dbConnection.Open() End IfdataTable = dbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, restricoes)
If i > -1 Then ReDim nomeTabelas_(i) For i = 0 To dataTable.Rows.Count - 1 nomeTabelas_(i) = dataTable.Rows(i).Item("TABLE_NAME").ToString() Next End If Return nomeTabelas_ End Function |
3- O método nomesColunas() , recebe o nome da tabela e retorna um array com o nome das colunas.
Friend
Function nomesColunas(ByVal
nome_Tabela As
String)
As
String() Dim columna As Data.DataColumn Dim i, j As Integer Dim nomCol() As String Dim comandoSQL = "Select * from " & nome_Tabela
Try dbDataAdapter.Fill(dbDataSet, nome_Tabela) Catch ex As ExceptionMessageBox.Show("Erro ao preencher DataSet :" & vbCrLf & ex.Message) Exit Function End Try
j = dbDataSet.Tables(nome_Tabela).Columns.Count - 1 ReDim nomCol(j)For i = 0 To j columna = dbDataSet.Tables(nome_Tabela).Columns(i) nomCol(i) = columna.ColumnName Next Return nomCol End Function |
Neste artigo você criou uma classe com métodos para acessar e retornar o nome das tabelas e suas respectivas colunas de um banco de dados Access.
Até o próximo artigo VB.NET ...
José Carlos Macoratti