MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Importar valor de uma linha txt contendo virgula

    Compartilhe

    asimoes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 30/04/2013

    [Resolvido]Importar valor de uma linha txt contendo virgula

    Mensagem  asimoes em Sex 13 Mar - 10:58

    Ola pessoal!

    É o seguinte, estou importando um aquivo txt para o Access, está tudo ok, porem nas linhas que contem virgula, o vba entende como delimitador e quebra a linha.

    Ex:
    Linha do Txt, (Exatamente com está no txt)
    30089      4 TURISMO      19/01/15 04/02/15   82027      5 APACHE VIP IV             Em Liberação                   1,534

    Reparem que o valor no fim da linha "1,534" contem uma virgula e estou colocando esse valor em uma variável com o comando abaixo

    strPesoPadraoTxt = Mid(strLinha, 108, 14)

    o resultando de strPesoPadraoTxt é "1" e não "1,534"

    Eu sei que ocorre é uma quebra na linha por o VBA estar entendendo a virgula como delimitador pegando apenas o "1" e jogando o valor "534" na próxima linha. Mas como faço para o VBA entender que nesse caso quero q ele ñ reconheça a virgula como delimitados e sim como um texto norma?

    Obrigado!


    Em anexo segue txt e abaixo o código:


    Código:
    Public Sub LimpaTxtESPD0083()

    '-------------------------------DEFINIÇÃO DA FUNÇÃO-----------------------------------'
    ' Importa e Limpa Txt Gerado pela tela ESPD0083                                       '
    '-------------------------------------------------------------------------------------'
      
       Dim strEncTxt As String
       Dim strUnidTxt As String
       Dim intUnidTxt As Integer
       Dim strClienteTxt As String
       Dim strEntLinhaTxt As String
       Dim strPrevLiberTxt As String
       Dim strNeTxt As String
       Dim strAtrasoTxt As String
       Dim strCarroceriaTxt As String
       Dim strPosicaoTxt As String
       Dim strPesoPadraoTxt As String

       Dim strCaminho As String
       Dim dtDataGerado As Date
       Dim strLinha As String


       strCaminho = [Form_Importa Txt].TxtESPD0083 'O caminho do txt é recebido de um textbox
       dtDataGerado = Date
        
      
    ' ---> Abre banco atual e arquivo txt para entrada
       Open strCaminho For Input As #1

    ' ---> Importa txt ESPD0083
       Do While Not EOF(1)
      
          Input #1, strLinha

    '---> Pega valor na variável e retira espaços antes e depois
          strEncTxt = Mid(strLinha, 1, 6)
          strEncTxt = Trim(strEncTxt)
          
          strUnidTxt = Mid(strLinha, 7, 6)
          strUnidTxt = Trim(strUnidTxt)
          
          strClienteTxt = Mid(strLinha, 14, 13)
          strClienteTxt = Trim(strClienteTxt)
          
          strEntLinhaTxt = Mid(strLinha, 27,
          strEntLinhaTxt = Trim(strEntLinhaTxt)
          
          strPrevLiberTxt = Mid(strLinha, 36,
          strPrevLiberTxt = Trim(strPrevLiberTxt)
                
          strNeTxt = Mid(strLinha, 45, 7)
          strNeTxt = Trim(strNeTxt)
          
          strAtrasoTxt = Mid(strLinha, 53, 6)
          strAtrasoTxt = Trim(strAtrasoTxt)
          
          strCarroceriaTxt = Mid(strLinha, 60, 25)
          strCarroceriaTxt = Trim(strCarroceriaTxt)
          
          strPosicaoTxt = Mid(strLinha, 86, 21)
          strPosicaoTxt = Trim(strPosicaoTxt)
          
          strPesoPadraoTxt = Mid(strLinha, 108, 14)
          strPesoPadraoTxt = Trim(strPesoPadraoTxt)
                    
    '---> Descarta linhas desnecessarias e insere na tabela as linhas validas
          If IsNumeric(strEncTxt) Then
             CurrentDb.Execute "INSERT INTO ImportaESPD0083 (ENC, Und, Cliente, EntLinha, PrevLiber, Ne, Atraso, Carroceria, Posicao, PesoPadrao, DataRelatorio)" _
             & " VALUES ('" & strEncTxt & "', '" & strUnidTxt & "', '" & strClienteTxt & "', '" & strEntLinhaTxt & "', '" & strPrevLiberTxt & "', '" & strNeTxt & "'," _
             & " '" & strAtrasoTxt & "', '" & strCarroceriaTxt & "', '" & strPosicaoTxt & "', '" & strPesoPadraoTxt & "', '" & dtDataGerado & "')"
          End If
       Loop
      
    '---> Finaliza
       Close #1
       strCaminho = ""
      
    End Sub
    Anexos
    ESPD0083.txt
    Você não tem permissão para fazer download dos arquivos anexados.
    (6 Kb) Baixado 4 vez(es)


    .................................................................................
    Não tenho medo de compartilhar conhecimento.
    Essa é a unica coisa que as pessoas não poderão roubar de mim, pois ninguém nunca sabe igual, mesmo que saiba a mesma coisa.

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3348
    Registrado : 04/04/2010

    Re: [Resolvido]Importar valor de uma linha txt contendo virgula

    Mensagem  Avelino Sampaio em Sex 13 Mar - 12:20

    Olá!

    Fiz um teste aqui é esta capturando direitinho. Vc tem que substituir a vírgula pelo ponto se não dá zebra na sintaxe da SQL

    Experimente

    strPesoPadraoTxt = replace(mid(strlinha,108),",",".")

    Aguardamos




    .................................................................................
    ============ Quer aprender Access em alta velocidade ? ============

    || [Você precisa estar registrado e conectado para ver esta imagem.] Acesse o site UsandoAccess.com.br e veja um ótimo kit de ensino que tenho para você.

    ===========================================================

    asimoes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 30/04/2013

    Re: [Resolvido]Importar valor de uma linha txt contendo virgula

    Mensagem  asimoes em Sex 13 Mar - 14:17

    Então Avelino!
    O problema é que a primeira variável que recebe a linha do txt strLinha já vem faltando os valores após a virgula! e a partir do valor dessa variável é que o Mid quebra em outras variareis!

    não sei se deixei claro, mas conforme o código que passei, a variável strLinha deveria receber o valor abaixo;
    30089      4 TURISMO      19/01/15 04/02/15   82027      5 APACHE VIP IV             Em Liberação                   1,534

    o que está em vermelho deve vir junto! é o que não está ocorrendo, e a partir daí eu conseguiria utilizar o Replace para alterar a "," por "."


    .................................................................................
    Não tenho medo de compartilhar conhecimento.
    Essa é a unica coisa que as pessoas não poderão roubar de mim, pois ninguém nunca sabe igual, mesmo que saiba a mesma coisa.

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3348
    Registrado : 04/04/2010

    Re: [Resolvido]Importar valor de uma linha txt contendo virgula

    Mensagem  Avelino Sampaio em Sex 13 Mar - 15:21

    Veja o teste que fiz usando a janela imediata:

    [Você precisa estar registrado e conectado para ver esta imagem.]


    .................................................................................
    ============ Quer aprender Access em alta velocidade ? ============

    || [Você precisa estar registrado e conectado para ver esta imagem.] Acesse o site UsandoAccess.com.br e veja um ótimo kit de ensino que tenho para você.

    ===========================================================

    asimoes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 30/04/2013

    Re: [Resolvido]Importar valor de uma linha txt contendo virgula

    Mensagem  asimoes em Sex 13 Mar - 16:17

    Poxa! vendo seu exemplo percebi onde estava o erro!

    No seu exemplo você utilizou o Line antes do Input fincando assim: Line Input #1 e no meu código não tinha utilizado o Line, então o VBA entende a virgula como delimitador e quebra a linha. Faz um teste executando esse exemplo do print sem o Line antes do Input! que verá!

    Mais caso resolvido!


    Muito obrigado Avelino!


    .................................................................................
    Não tenho medo de compartilhar conhecimento.
    Essa é a unica coisa que as pessoas não poderão roubar de mim, pois ninguém nunca sabe igual, mesmo que saiba a mesma coisa.

      Data/hora atual: Dom 4 Dez - 16:22