Notifications
Clear all

Obtendo Dados do Access com ADO

4 Posts
2 Usuários
0 Reactions
1,916 Visualizações
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

A rotina abaixo acessa o .mdb da Northwind realiza uma consulta e retorna os dados em uma nova planilha:

Sub ObtendoDadosAccess()
''' OBSERVAÇÃO: Esta sub-rotina requer que você faça referência à
'''       última versão da seguinte biblioteca:
'''
'''         Biblioteca do Microsoft ActiveX Data Objects
     
   Dim conn As ADODB.Connection
   Dim rst As ADODB.Recordset
   Dim Nsql As String, Njoin As String, Ncriteria As String
   Dim NewBook As Workbook
   Dim i As Integer

   ' Cria o objeto Connection.
    Set conn = New ADODB.Connection
    With conn
        ' Define o provedor OleDB para a conexão.
        .Provider = "Microsoft.JET.OLEDB.4.0"
        ' Abre uma conexão com o Northwind.mdb.
        .Open Application.Path & "samplesnorthwind.mdb"
    End With
   
    Nsql = "SELECT DISTINCTROW Categorias.NomeDaCategoria, " _
    & "Produtos.NomeDoProduto, Produtos.QuantidadePorUnidade, " _
    & "Produtos.PreçoUnitário "
    Njoin = "FROM Categorias INNER JOIN Produtos ON " _
    & "Categorias.CódigoDaCategoria = Produtos.CódigoDaCategoria "
    Ncriteria = "WHERE ((([Produtos].Descontinuado)=No) AND (([Produtos].UnidadesEmEstoque)>20));"
    
    ' Cria um novo objeto Recordset.
    Set rst = New ADODB.Recordset
    With rst
        ' Conecta este conjunto de registros à conexão aberta anteriormente.
        .ActiveConnection = conn
        ' Recupera todos os registros da tabela Clientes.
        .Open Nsql & Njoin & Ncriteria, conn, adOpenDynamic, _
        adLockBatchOptimistic
    End With

    ' Adiciona uma nova planilha a esta pasta de trabalho
    Set NewBook = Workbooks.Add
    ' Efetua loop em todos os campos, retornando os nomes de campos
    ' à planilha.
    For i = 0 To rst.Fields.Count - 1
        NewBook.Sheets(1).Range("a1").Offset(0, i).Value = rst.Fields(i).Name
    Next i
    ' Copia o conjunto de registros para a nova planilha.
    NewBook.Sheets(1).Range("a2").CopyFromRecordset rst

    ' Fecha o conjunto de registros.
    Set rst = Nothing
    ' Fecha a conexão.
    conn.Close
End Sub

Embora simples acredito que esse exemplo sirva de base para muitos outros projetos.

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

 
Postado : 31/10/2009 9:25 am
(@rugbier)
Posts: 2
New Member
 

Pois é Rodrigo, estou usando um código parecido para extrair dados de um arquivo em Access, o problema é que preciso usar um arquivo da versão mais recente, e o o Excel acusa erro("Unrecognized database format 'V:BD_MACRO_teste.accdb'") quando eu tento usar um arquivo ".accbd", funcionando apenas quando eu uso um arquivo do tipo ".mdb". Provavelmente eu preciso fazer referência a uma "library" que permita ao Excel reconhecer esse formato de arquivo, mas não sei qual.

Alguém poderia me ajudar com isso?

Muito obrigado!

 
Postado : 20/06/2012 1:24 pm
(@rugbier)
Posts: 2
New Member
 

Achei a resposta aqui!

New engine (ACE), try "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MyDatabaseName.accdb;"

Então, só é necessário modificar o "Provider" da "ADODB.Connection"...

Espero que seja útil!

 
Postado : 20/06/2012 2:51 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Rodrigo boa tarde,

Cara tem como mostrar qual a continuação do codigo para, ao invés de retornar os dados em uma nova planilha já criar direto um pivot table ?

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

 
Postado : 02/09/2014 11:46 am