MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Importar CSV com linhas em branco

    gabrielpn06
    gabrielpn06
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 178
    Registrado : 17/01/2017

    [Resolvido]Importar CSV com linhas em branco Empty [Resolvido]Importar CSV com linhas em branco

    Mensagem  gabrielpn06 em 11/4/2019, 15:48

    Bom dia amigos, preciso de ajuda em uma rotina aparentemente simples.

    Tenho em um módulo uma rotina que faz a importação de um arquivo CSV para uma tabela do meu banco.
    A rotina funciona desde que não tenha nenhuma linha em branco no arquivo CSV.
    Preciso que a rotina apenas pule a linha em branco.
    Conseguem me ajudar?

    Código:
    Function Import()

    Dim db As DAO.Database
    Dim rs As Recordset
    Dim OpenFile As Integer
    Dim Path, file As String
    Dim StrLine As String
    Dim strVetor() As String
    Dim Contador As Integer
    Dim contagem As Integer

    On Error GoTo TrataErro

    OpenFile = FreeFile
    Contador = 0

    file = CurrentProject.Path & "\arquivoInput.csv"

    Set db = DBEngine.Workspaces(0).Databases(0)
    Set rs = db.OpenRecordset("tbBase")

    CurrentDb.Execute "DELETE * FROM tbBase"

    Open file For Input As OpenFile
        Do While Not EOF(OpenFile)
            Line Input #OpenFile, StrLine
       
            ReDim strVetor(Contador)
                  strVetor = Split(StrLine, ";")
       
            On Error Resume Next
                With rs
                    If Trim(strVetor(0)) = "texto1" Or Trim(strVetor(0)) = "texto2" Then
                        .MoveNext
                    Else
                        .AddNew
                            .Fields![campo1] = Trim(Left(strVetor(1), 10))
                            .Fields![campo2] = Trim(strVetor(1))
                            .Fields![campo3] = Trim(strVetor(2))
                            .Fields![campo4] = Trim(strVetor(3))
                            .Fields![campo5] = Trim(Left(strVetor(4), 2))
                            .Fields![campo6] = Trim(Right(strVetor(4), (Len(strVetor(4)) - 3)))
                            .Fields![campo7] = Trim(strVetor(5))
                            .Fields![campo8] = Trim(strVetor(6))
                            .Fields![campo9] = Trim(strVetor(7))
                            .Fields![campo10] = Trim(strVetor(8))
                        .Update
                        .MoveNext
                    End If
                End With
                Contador = Contador + 1
        Loop

    Close #OpenFile
        rs.Close
    Set rs = Nothing
        db.Close
    Set db = Nothing

    MsgBox "Importação concluída com sucesso!"

    Exit Function

    TrataErro:
           
    MsgBox "Ocorreu um erro na importação!"

        If (Err.Number = 3125) Then
            MsgBox "Nome da planilha é diferente da especificada. Favor corrigir e reimportar o arquivo.", vbCritical, "Erro!"
        ElseIf (Err.Number = 3421) Then
            MsgBox "Foi apresentado um erro de formatação na linha " & Contador + 1 & "!", vbCritical, "Erro!"
        Else
            MsgBox Err.Number & " - " & Err.Description, vbCritical, "Erro!"
        End If
    End Function
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7238
    Registrado : 05/11/2009

    [Resolvido]Importar CSV com linhas em branco Empty Re: [Resolvido]Importar CSV com linhas em branco

    Mensagem  Alexandre Neves em 12/4/2019, 16:15

    Boa tarde,
    Não chame função ao procedimento, a função deve devolver um valor

    Código:
    Sub Import()
        Dim db As dao.Database
        Dim rs As dao.Recordset
        Dim OpenFile As Integer
        Dim Path, file As String
        Dim StrLine As String
        Dim Contador As Integer
       
        On Error GoTo TrataErro
       
        OpenFile = FreeFile
        Contador = 0
       
        file = CurrentProject.Path & "\arquivoInput.csv"
       
        Set db = DBEngine.Workspaces(0).Databases(0)
        Set rs = db.OpenRecordset("tbBase")
       
        CurrentDb.Execute "DELETE * FROM tbBase"
       
        Open file For Input As OpenFile
        Do While Not EOF(OpenFile)
            If Len(StrLine) = 0 Then GoTo ProxLinha 'salta linha em branco
            Line Input #OpenFile, StrLine
       
            ReDim strVetor(Contador)
                  strVetor = Split(StrLine, ";")
       
            On Error Resume Next
                With rs
                    If Trim(strVetor(0)) = "texto1" Or Trim(strVetor(0)) = "texto2" Then
                        .MoveNext
                    Else
                        .AddNew
                            .Fields![campo1] = Trim(Left(strVetor(1), 10))
                            .Fields![campo2] = Trim(strVetor(1))
                            .Fields![campo3] = Trim(strVetor(2))
                            .Fields![campo4] = Trim(strVetor(3))
                            .Fields![campo5] = Trim(Left(strVetor(4), 2))
                            .Fields![campo6] = Trim(Right(strVetor(4), (Len(strVetor(4)) - 3)))
                            .Fields![campo7] = Trim(strVetor(5))
                            .Fields![campo8] = Trim(strVetor(6))
                            .Fields![campo9] = Trim(strVetor(7))
                            .Fields![campo10] = Trim(strVetor(8))
                        .Update
                        .MoveNext
                    End If
                End With
                Contador = Contador + 1
    ProxLinha:
        Loop

        Close #OpenFile
        rs.Close
        Set rs = Nothing
        db.Close
        Set db = Nothing

        MsgBox "Importação concluída com sucesso!"

        Exit Sub

    TrataErro:
           
        MsgBox "Ocorreu um erro na importação!"

        If (err.Number = 3125) Then
            MsgBox "Nome da planilha é diferente da especificada. Favor corrigir e reimportar o arquivo.", vbCritical, "Erro!"
        ElseIf (err.Number = 3421) Then
            MsgBox "Foi apresentado um erro de formatação na linha " & Contador + 1 & "!", vbCritical, "Erro!"
        Else
            MsgBox err.Number & " - " & err.Description, vbCritical, "Erro!"
        End If
    End Sub


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    gabrielpn06
    gabrielpn06
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 178
    Registrado : 17/01/2017

    [Resolvido]Importar CSV com linhas em branco Empty Re: [Resolvido]Importar CSV com linhas em branco

    Mensagem  gabrielpn06 em 12/4/2019, 17:30

    Obrigado!

      Data/hora atual: 24/4/2019, 07:36