VBA Access - Exportando dados para arquivo texto delimitado com TAB

VBA Access - Exportando dados para arquivo texto delimitado com TAB

Uma das facilidades máximas do MS Access é a possibilidade de conectá-lo a qualquer base de dados e a partir disso poder extrair e manipularmos os dados de forma rápida e eficiente. Obviamente a facilidade e a velocidade disso está ligado a proficiência no aplicativo.


É normal precisarmos acessar alguma tabela ou query do MS Access precisando exportá-la para um arquivo texto delimitado por TAB. Como se faz isso?

No exemplo a seguir temos 3 necessidades atendidas:

- O acesso aos dados de uma query.
- E exportação desses dados seguindo um formato em uma nova tabela.
- A exportação deste mesmo resultado num arquivo texto.

Para tanto estamos utilizando o método DAO.

O que são DAO e ODBC?

Objetos de acesso a dados (DAO) e o Open Database Connectivity (ODBC) são APIs que permitem que escrevamos aplicativos independentes de qualquer sistema gerenciador de banco de dados (DBMS).

O DAO é familiar aos programadores de banco de dados que usam o VBA do Microsoft Access ou Microsoft Visual Basic. O DAO usa o mecanismo de banco de dados Microsoft Jet para fornecer um conjunto de objetos de acesso a dados:

- banco de dados de objetos,

- objetos tabledef e 

- querydef,

- objetos recordset e

- outros. 

O DAO funciona melhor com arquivos .ACCDB como aqueles criados pelo Microsoft Access, mas também podemos acessar outras fontes de dados ODBC através dele e outros mecanismos de banco de dados Microsoft Jet.

O ODBC disponibiliza uma API de outros fornecedores de banco de dados diferentes que implementaram os drivers ODBC para um determinado DBMS. O programa utiliza essa API para chamar o Gerenciador de Driver ODBC, que passa as chamadas para o driver apropriado. O driver, por sua vez, interage com o DBMS usando o SQL.


Classes do DAO
As classes DAO também podem acessar uma grande variedade de drivers disponíveis para o Open Database Connectivity (ODBC).


CDaoWorkspace
Gerencia uma sessão de banco de dados nomeada, protegida por senha de login para fazer logoff. A maioria dos programas usam o padrão.

CDaoDatabase
Uma conexão com um banco de dados através da qual pode operar os dados.

CDaoRecordset
Representa um conjunto de registros selecionados de uma fonte de dados.

CDaoRecordView
Um modo de exibição que exibe registros do banco de dados sob controle.

CDaoQueryDef
Representa uma definição de consulta, normalmente salva em um banco de dados.

CDaoTableDef
Representa a definição armazenada de uma tabela base ou tabela anexada.

CDaoException
Representa uma condição de exceção decorrentes das classes DAO.

CDaoFieldExchange
Suporta as rotinas de exchange (DFX) do campo de registro DAO usadas pelas classes de banco de dados DAO. Você normalmente não irá usar essa classe diretamente.

Classes relacionadas

CLongBinary
Encapsula um identificador para o armazenamento de um objeto binário grande (BLOB), como um bitmap. Os objetos CLongBinary são usados para gerenciar grandes 

dados armazenados em 

objetos e tabelas de banco de dados.

COleCurrency
Um tipo aritmético de ponto fixo, com 15 dígitos antes do ponto decimal e 4 dígitos após.

COleDateTime
Representa os valores de data e hora.

COleVariant
Dados VARIANTs podem ser armazenados em vários formatos.

O código abaixo serve de exemplo para que possa ampliar conforme as suas necessidades:

Public Sub DAORecordset()
  ' Definição do acesso a dados.
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim rs As DAO.Recordset
  
    Dim strfile As String
    Dim Strstring As String
  
    Dim strValue As String
    Dim nLine As String
    Dim nSetor As Variant
    Dim nCities As String
    Dim preCity As String
    Dim nFlag As Boolean
    
    Let fFile = FreeFile

    'Nomeia o arquivo texto que receberá os dados na pasta e arquivo definidos
    Let strfile = "D:\Bernardes\TextFileName.Txt"
  
  ' Informa o nome da Query que será a base dos dados considerados.
  Set db = CurrentDb
  Set qdf = db.QueryDefs("qry_Lin_Export")
  
  Set rs = qdf.OpenRecordset
  
  ' Abre o arquivo onde serão gravados os dados.
  Open strfile For Output As #fFile
  
  ' Garante que o processo só rodará enquanto não for o final, nem o começo do Recordset.
  If Not (rs.EOF And rs.BOF) Then
    Do While Not rs.EOF
        Let nLine = rs.Fields(0).Value
        Let nSetor = rs.Fields(1).Value
        Let nCities = ""
        Let nFlag = True
        
        Do While Not rs.EOF And (rs.Fields(1).Value = nSetor)
            If nFlag Then
                Let nCities = nCities & Trim(rs.Fields(2).Value) & "/"
                Let preCity = Trim(rs.Fields(2).Value)
                Let nFlag = False
            Else
                If preCity <> Trim(rs.Fields(2).Value) Then
                    Let nCities = nCities & Trim(rs.Fields(2).Value) & "/"
                End If
            End If
            
            rs.MoveNext
        Loop
        
        ' String final a ser exportada.
        Let Strstring = nLine & vbTab & nSetor & vbTab & Replace(nCities, " / ", "/")
        'Let strValue = Now() & " | " & nSetor & ": " & Replace(nCities, " / ", "/") 'Replace(strValue, Chr(13), "")

        Debug.Print Now() & " | " & Strstring
    
        'Exporta para tabela.
        DoCmd.SetWarnings (False)
        
        ' Grava o resultado como um registro dentro de uma tabela previamente preparada.
        DoCmd.RunSQL ("INSERT INTO tbl_Linhas_Brick_Sector_002_Horizontalizado ( Linha, Setor, CIDADE ) " & _
                      "SELECT '" & nLine & "' AS Line, " & nSetor & " AS Sector, '" & nCities & "' AS City " & _
                      "FROM tbl_Sys_Add")

        DoCmd.SetWarnings (True)
    
        ' Grava a string resultante da consolidação.
        Print #fFile, Strstring        
        
        Let Strstring = ""

    Loop
  
    rs.Close
    Close #fFile
    
    Set rs = Nothing
    Set qdf = Nothing
    Set db = Nothing
   End If
End Sub


Veja outros códigos:

VBA Excel | Extraindo a Data de uma Célula com Data e Horário - Remove Date from Date and Time VBA Excel | Converta Tudo para Maiúscula - Convert to Upper CaseVBA Excel | Contando Palavras na Planilha - Word Count from Entire Worksheet VBA Excel | Removendo Decimais dos Números - Remove Decimals from Numbers

VBA Excel |  Multiplique todos os Valores por um Número - Multiply all the Values by a Number VBA Excel | Calculando a Raiz Cúbica - Calculate the Cube Root

VBA Excel | Adicionando Letras de A até Z - Add A-Z Alphabets in a Range VBA Excel | Convertendo Numerais Romanos em Arábicos - Convert Roman Numbers into Arabic Numbers

VBA Excel | Converta todos os Números Negativos em Positivos - Remove Negative Signs VBA Excel | Preencha com zeros as Células em Branco - Replace Blank Cells with Zeros

Leia também:

eBook: Série DONUT PROJECT 2015: Projetos e Códigos de Visual Basic for Applications - Autor: André Luiz Bernardes  eBook: Série Top 10 Funções: Top 10 Funções VBA para o Microsoft Excel - Autor: André Luiz Bernardes

eBook: Série Funções Poderosas: 13 Funções Poderosas no MS Excel - Autor: André Luiz Bernardes  eBook: Série Visual Basic For Application: Criando Logs de acesso: Dicas e Códigos de Visual Basic for Applications - Autor: André Luiz Bernardes

eBook: Série VBA Tips: Rastrei seus Dashboards, Scorecards, Reports, Relatórios, Planilhas e Aplicações - Dicas e Códigos - Autor: André Luiz Bernardes  eBook: Série Data Science: Big Data, Como? - Autor: André Luiz Bernardes

eBook: Série Smarter Analytic: 5 Previsões de Big Data - Autor: André Luiz Bernardes


Conheça também:

DONUT PROJECT 2021 - VBA Function:  Como Rastrear o Google Maps (Coordenadas Geográficas) no VBA Excel?

DONUT PROJECT 2021 - VBA Function:  Crie Acrônimos a partir de Strings de Texto

DONUT PROJECT 2021 - VBA Function:  Convertendo uma Matrix num Vetor - Convert Matrix to a Vector

DONUT PROJECT 2021 - VBA Function:  Como tornar o Formulário Transparente no MS Excel?

DONUT PROJECT 2021 - VBA Function:  Faça Buscas no Google a Partir da Célula do MS Excel - Search Google From a Cell

DONUT PROJECT 2021 - VBA Function:  Decompondo um Nome nas Dimensões de uma Matriz

DONUT PROJECT 2021 - VBA Function: Extraindo o Último Sobrenome de um Nome Completo ou a Última Palavra de uma Frase

DONUT PROJECT 2021 - VBA Function:  Extraindo o Segundo Nome de um Nome Completo ou a Segunda Palavra de uma Frase

DONUT PROJECT 2021 - VBA Function: Extraindo o Primeiro Nome ou  a Primeira Palavra de uma Frase

Série Piece of Cake

Séries Donut


Comente e compartilhe este artigo!


brazilsalesforceeffectiveness@gmail.com






Nenhum comentário:

Postar um comentário

diHITT - Notícias