Notifications
Clear all

Listar Tabelas existentes no Access

6 Posts
2 Usuários
0 Reactions
2,357 Visualizações
selmo
(@selmo)
Posts: 236
Estimable Member
Topic starter
 

Bom dia pessoal.

Brincando aqui com o excel, achei uma duvida um tanto quanto interessante, como listar todas as tabelas do Access utilizando o VBA do Excel? E como consequencia, preencher uma combobox com os nomes de todas as tabelas, alguem sabe como faze-lo?

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 17/01/2016 8:03 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia selmo

Veja se isso ajuda:

https://social.msdn.microsoft.com/Forum ... orum=vbapt

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 17/01/2016 8:50 am
selmo
(@selmo)
Posts: 236
Estimable Member
Topic starter
 

Bom dia Patropi.
Eu havia tentado essa solução, mas admito que as vezes fico sem concentração e não consigo entender muitas coisas. Mas encontrei esse código no site do Macoratti que faz exatamente oque eu precisava. Simples e prático. Adaptei apenas um If para exibir apenas as tabelas do usuário.

'Exibe todas as tabelas de um banco de dados
'Ativar a referência a "Microsot ADO Ext. 2.X for DLL and Security"
Private Sub PreecherListBoxTabelas()
Dim con As New ADODB.Connection
Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table

'estabelecendo a conexao
Set con = New ADODB.Connection
Db = "X:15 - Matriz em DBmatriz.mdb"
conexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Db
con.Open conexao
Set cat.ActiveConnection = con

'exibindo o nome e os tipos das tabelas
For Each tbl In cat.Tables
If tbl.Type = "TABLE" Then 'para listar apenas as tabelas de usuário
   listatabelas.AddItem tbl.Name & vbTab & tbl.Type
End If
Next
End Sub

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 17/01/2016 9:06 am
selmo
(@selmo)
Posts: 236
Estimable Member
Topic starter
 

Não entendo muito dessa biblioteca, saberia se existe como alterar a rotina e listar tambem os campos de uma tabela escolhida na Listbox e carregar em uma outra?

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 17/01/2016 9:16 am
selmo
(@selmo)
Posts: 236
Estimable Member
Topic starter
 

O seguinte código faz exatamente isso, mas ele lista todos os campos de todas as tabelas, queria alterar para que exiba apenas os campos da tabela selecionada e não de todas

Dim con As New ADODB.Connection

Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table
Dim Col As New ADOX.Column

'estabelecendo a conexao
Set con = New ADODB.Connection
Db = "X:15 - Matriz em DBmatriz.mdb"
conexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Db
con.Open conexao
Set cat.ActiveConnection = con

'exibindo o nome e os tipos das tabelas
For Each tbl In cat.Tables
     listatabelas.AddItem tbl.Name
     For Each Col In tbl.Columns
          listacolunas.AddItem Col.Name
     Next
Next

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 17/01/2016 9:24 am
selmo
(@selmo)
Posts: 236
Estimable Member
Topic starter
 

Apenas acrescentando um If no loop resolveu

Private Sub CommandButton1_Click()
Dim con As New ADODB.Connection
Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table
Dim Col As New ADOX.Column
'Remove an item from the listacolunas
For i = 1 To listacolunas.ListCount
    listacolunas.RemoveItem 0
Next i

'estabelecendo a conexao
Set con = New ADODB.Connection
Db = "X:15 - Matriz em DBmatriz.mdb"
conexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Db
con.Open conexao
Set cat.ActiveConnection = con

'exibindo o nome e os tipos das tabelas
For Each tbl In cat.Tables

'Exibe as colunas da tabela selecionada
If tbl.Name = listatabelas.Value Then
     For Each Col In tbl.Columns
          listacolunas.AddItem Col.Name
     Next
     End If
Next
End Sub

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 17/01/2016 9:38 am