MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


    Importar parte de uma linha do arquivo txt com o "INSERT INTO" para uma tabela no access.

    avatar
    Rhostert
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 28
    Registrado : 21/07/2017

    Importar parte de uma linha do arquivo txt com o "INSERT INTO" para uma tabela no access. Empty Importar parte de uma linha do arquivo txt com o "INSERT INTO" para uma tabela no access.

    Mensagem  Rhostert 30/9/2021, 19:52

    Prezados, boa tarde.
    Estou realizando a importação de um arquivo TXT para uma tabela do Access, na primeira versão do código, atribui cada campo a ser importado em variáveis e importei linha a linha de uma única vez, como abaixo:
    UPD = ("INSERT INTO Tb_Importado (Cartao, Nome, Status,DD ,B1 ,B2 ,Saldo, Cr_Date, Last_Txn, Last_Pmt, ORG, Logo, Faixa_Valor) VALUES ('" & Cartao & "', '" & Nome & "', '" & Status & "','" & DD & "','" & B1 & "','" & B2 & "','" & Saldo & "', '" & Cr_Date & "', '" & Last_Txn & "', '" & Last_Pmt & "', '" & Org & "', '" & Logo & "', '" & Faixa_Valor & "')")
               CurrentDb.Execute (UPD)

    Mas ficou muito demorada a importação.
    Então estou tentando fazer o INSERT INTO, campo a campo na tabela, sem utilizar variáveis. O comando lê o código, mas não carrega a informação para o Access.
               UPD = ("INSERT INTO Tb_Importado (DD) VALUES ('" & (Trim(Mid(Linha, 43, 2))) & "')")
                   CurrentDb.Execute (UPD)
               UPD = ("INSERT INTO Tb_Importado (B1) VALUES ('" & (Trim(Mid(Linha, 48, 1))) & "')")
                   CurrentDb.Execute (UPD)


    Minhas dúvidas: é se podem ajudar a corrigir o código de importar campo a campo sem o uso de variáveis, ou se á outra forma melhor de importação?


    ************************************************************
    Código completo (incluindo as linhas em comentário do primeiro código
    ************************************************************

    Option Compare Database

    Public Function Importar()
       Dim appDialog As Object
       Dim stFile As String
       Dim Arq As Integer 'Variável que irá receber o nome do Arquivo.
       Dim Linha As String 'Variável que irá receber o conteúdo de Cada Linha
       Dim Cartao As String
    '    Dim Plano As String
       Dim Saldo As Double
       Dim CrDate As String
       Dim LastTxn As String
       Dim LastPmt As String
       Dim Org As String
       Dim Logo As String
       Dim Achou As Boolean
       Dim Quant As Long
       Arq = FreeFile 'O Termo FreeFile definine que á variável é um arquivo.
       
       SQL = "SELECT * FROM Tb_Importado" 'WHERE Nome Is Null"
       Set BD = CurrentDb
       Set rst = BD.OpenRecordset(SQL)
       
    'Bloco para selecionar o arquivo que será Importado.
       Set appDialog = Application.FileDialog(3)
       With appDialog
           .AllowMultiSelect = False 'Impede a abertura de Multiplos arquivos.
           .Title = "Selecione o Arquivo" 'Título da Caixa de Diálogo
           .InitialView = 3 'Tipo de Visão dos arquivos, Ícones pequenos, grandes, detalhes, etc.
    '        .InitialFileName = "" 'Caminho inicial de abertura da Pasta para localizar os arquivos.
           .Filters.Clear 'Limpa os filtros existentes.
           .Filters.Add "Arquivo de Texto", "*.txt" 'Especifica os tipos de filtros a serem exibidos.
           .Show 'Exibe a caixa de exibir arquivos.
           
       End With
       
       If appDialog.SelectedItems.Count < 1 Or appDialog.SelectedItems.Count > 1 Then 'Se nenhum arquivo, ou mais do um tiver sido selecionado, irá finalizar a execução.
           MsgBox "Selecione apenas 1 arquivo para a Importação!!!"
           Exit Function
       Else
           stFile = appDialog.SelectedItems(1)
       End If
       
    'Bloco para a abertura e Leitura do arquivo .txt
       Open stFile For Input As #Arq ' Abre o arquivo que será lido.
       Line Input #Arq, Linha
       If Mid(Linha, 1, 14) <> "AR000000 - O19" Then
           MsgBox "O arquivo não está no padrão esperado! Verifique.", vbExclamation, "Validação!"
           Exit Function
       End If
       Line Input #Arq, Linha
       If Mid(Linha, 56, 21) <> "CREDIT BALANCE REPORT" Then
           MsgBox "O arquivo não está no padrão esperado! Verifique.", vbExclamation, "Validação!"
           Exit Function
       End If
               
       UPD = ("INSERT INTO Tb_Importado (ORG) VALUES ('" & Trim(Mid(Linha, 1, 50)) & "')")
       CurrentDb.Execute (UPD)
       Line Input #Arq, Linha
       UPD = ("INSERT INTO Tb_Importado (Logo) VALUES ('" & Trim(Mid(Linha, 1, 55)) & "')")
       CurrentDb.Execute (UPD)
       Line Input #Arq, Linha
       Line Input #Arq, Linha
       Line Input #Arq, Linha
       Line Input #Arq, Linha
       Quant = 1
               
       Do While Not EOF(Arq) 'EOF significa End Of File, vai executar até que chegue o final do arquivo.
           
           Achou = False
           Line Input #Arq, Linha
           Linha = Trim(Linha)
           
           If Linha = "" Then
               GoTo ProximaLinha
    '        ElseIf Mid(Linha, 4, 3) = " - " And Mid(Linha, 56, 21) = "CREDIT BALANCE REPORT" Then
    '            Org = Trim(Mid(Linha, 1, 55))
    '            Line Input #Arq, Linha
    '            Logo = Trim(Mid(Linha, 1, 55))
    '            GoTo ProximaLinha
           End If
           
           If Mid(Linha, 1, 3) = "000" And Mid(Linha, 91, 1) = "/" And Mid(Linha, 94, 1) = "/" And Mid(Linha, 100, 1) = "/" Then
               Achou = True
               If Mid(Linha, 1, 19) = Cartao Then ' Se o nº do cartão da linha atual foi o mesmo da Linha anterior, irá somar o saldo.
    '                Saldo = Saldo + Replace(Replace(Trim(Mid(Linha, 71, 18)), "-", ""), " ", "") * 1
                   UPD = ("INSERT INTO Tb_Importado (Saldo) VALUES ('" & (Saldo + (Trim(Mid(Linha, 71, 14))) * 1) & "')")
                   CurrentDb.Execute (UPD)
               Else
    '                Cartao = Mid(Linha, 1, 19)
                   UPD = ("INSERT INTO Tb_Importado (Cartao) VALUES ('" & (Mid(Linha, 1, 19)) & "')")
                   CurrentDb.Execute (UPD)
    '               Saldo = Replace(Replace(Trim(Mid(Linha, 71, 18)), "-", ""), " ", "") * 1
                   'UPD = ("INSERT INTO Tb_Importado (Saldo) VALUES ('" & (Replace(Replace(Trim(Mid(Linha, 71, 18)), "-", ""), " ", "") * 1) & "')")
                   UPD = ("INSERT INTO Tb_Importado (Saldo) VALUES ('" & (Trim(Mid(Linha, 71, 14))) & "')")
                   CurrentDb.Execute (UPD)
                   
               End If
               
    '            Nome = Trim(Mid(Linha, 22, 18))
               UPD = ("INSERT INTO Tb_Importado (Nome) VALUES ('" & Trim(Mid(Linha, 22, 18)) & "')")
                   CurrentDb.Execute (UPD)
    '            Status = Trim(Mid(Linha, 40, 1))
               UPD = ("INSERT INTO Tb_Importado (Status) VALUES ('" & (Trim(Mid(Linha, 40, 1))) & "')")
                   CurrentDb.Execute (UPD)
    '            DD = Trim(Mid(Linha, 43, 2))
               UPD = ("INSERT INTO Tb_Importado (DD) VALUES ('" & (Trim(Mid(Linha, 43, 2))) & "')")
                   CurrentDb.Execute (UPD)
    '            B1 = Trim(Mid(Linha, 48, 1))
               UPD = ("INSERT INTO Tb_Importado (B1) VALUES ('" & (Trim(Mid(Linha, 48, 1))) & "')")
                   CurrentDb.Execute (UPD)
    '            B2 = Trim(Mid(Linha, 52, 1))
               UPD = ("INSERT INTO Tb_Importado (B2) VALUES ('" & (Trim(Mid(Linha, 52, 1))) & "')")
                   CurrentDb.Execute (UPD)
    '            Cr_Date = Trim(Mid(Linha, 89, 8 )) '***** VERIFICAR NESSES CASOS SE QUANDO TEM MAIS DE UM PLANO ABERTO SE A DATA ALTERA.
               UPD = ("INSERT INTO Tb_Importado (Cr_Date) VALUES ('" & (Trim(Mid(Linha, 89, 8 ))) & "')")
                   CurrentDb.Execute (UPD)
    '            Last_Txn = Trim(Mid(Linha, 98, 8 )) '***** VERIFICAR NESSES CASOS SE QUANDO TEM MAIS DE UM PLANO ABERTO SE A DATA ALTERA.
               UPD = ("INSERT INTO Tb_Importado (Last_Txn) VALUES ('" & (Trim(Mid(Linha, 98, 8 ))) & "')")
                   CurrentDb.Execute (UPD)
    '            Last_Pmt = Trim(Mid(Linha, 107, 8 )) '***** VERIFICAR NESSES CASOS SE QUANDO TEM MAIS DE UM PLANO ABERTO SE A DATA ALTERA.
               UPD = ("INSERT INTO Tb_Importado (Last_Pmt) VALUES ('" & (Trim(Mid(Linha, 107, 8 ))) & "')")
                   CurrentDb.Execute (UPD)
               If Saldo <= "500,00" Then
    '                Faixa_Valor = "Até R$ 500,00"
                   UPD = ("INSERT INTO Tb_Importado (Faixa_Valor) VALUES ('" & ("Até R$ 500,00") & "')")
                   CurrentDb.Execute (UPD)
               ElseIf Saldo > "500,00" Then
    '                Faixa_Valor = "Acima de R$ 500,00"
                   UPD = ("INSERT INTO Tb_Importado (Faixa_Valor) VALUES ('" & ("Acima de R$ 500,00") & "')")
                   CurrentDb.Execute (UPD)
               End If
    'Bloco para realizar o Update na Tabela de Importação.
    '            UPD = ("INSERT INTO Tb_Importado (Cartao, Nome, Status,DD ,B1 ,B2 ,Saldo, Cr_Date, Last_Txn, Last_Pmt, ORG, Logo, Faixa_Valor) VALUES ('" & Cartao & "', '" & Nome & "', '" & Status & "','" & DD & "','" & B1 & "','" & B2 & "','" & Saldo & "', '" & Cr_Date & "', '" & Last_Txn & "', '" & Last_Pmt & "', '" & Org & "', '" & Logo & "', '" & Faixa_Valor & "')")
    '            CurrentDb.Execute (UPD)
               Quant = Quant + 1 'Variável para a COntagem de Registros Importados.
               GoTo ProximaLinha
               
           ElseIf Mid(Linha, 4, 3) = " - " And Mid(Linha, 56, 21) = "CREDIT BALANCE REPORT" Then
               Org = Trim(Mid(Linha, 1, 55))
               Line Input #Arq, Linha
               Logo = Trim(Mid(Linha, 1, 55))
               GoTo ProximaLinha
           Else
                   GoTo ProximaLinha
           End If
         
           
    'Bloco para realizar a importação
           If Achou = True Then
               GoTo ProximaLinha
           ElseIf Mid(Linha, 2, 2) = "AR" Then
               GoTo ProximaLinha
           ElseIf Mid(Linha, 1, 7) = "ACCOUNT" Then
               GoTo ProximaLinha
           ElseIf Mid(Linha, 1, 6) = "NUMBER" Then
               GoTo ProximaLinha
           ElseIf Mid(Linha, 1, 10) = "          " Then
               GoTo ProximaLinha
           ElseIf Mid(Linha, 1, 6) = "REFUND" Then
               GoTo ProximaLinha
           ElseIf Mid(Linha, 1, 5) = "TOTAL" Then
               GoTo ProximaLinha
           ElseIf Mid(Linha, 1, 19) = "**--LOGO TOTALS--**" Then
               GoTo ProximaLinha
           ElseIf Trim(Mid(Linha, 26, 20)) = "DAYS" Then
               GoTo ProximaLinha

           End If

               
               
    ProximaLinha:
    'Limpando as variáveis
           Org = ""
           Logo = ""
           Cartao = ""
           Nome = ""
           Status = ""
           DD = ""
           B1 = ""
           B2 = ""
           Cr_Date = ""
           Last_Txn = ""
           Last_Pmt = ""
           Faixa_Valor = ""
           Faixa_Valor = ""
    '    Saldo = 0
               
           If Quant Mod 1000 = 0 Then
               MsgBox "Total de Registros Importados até o momento " & Quant
           End If
           
       Loop
       
       
       Close Arq ' Fecha o arquivo que está sendo lido
       MsgBox "Processo Finalizado - Total de Registros Importados: " & Quant
       Quant = 0
       
    End Function

      Data/hora atual: 22/11/2024, 12:12