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

    Importar arquivo gerado nos finais de semana

    Compartilhe

    bobducs
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 11/07/2016

    Importar arquivo gerado nos finais de semana

    Mensagem  bobducs em Qui 03 Nov 2016, 13:05

    Olá pessoal,

    Sou novo no fórum e no Access. Smile
    Preciso de uma grande ajuda de vocês. Estou com um desafio enorme aqui no meu trabalho.
    Preciso importar para o Access alguns valores todos os dias.
    As bases que precisam serem copiadas são geradas com nomes nada amigáveis, a cada dia que passa um arquivo é gerado com o nome "LoginLogout_1.csv", "LoginLogout_2.csv", "LoginLogout_3.csv".

    Para identificar o último arquivo gerado na pasta do windows, utilizei o DateLastModified e realmente consigo copiar os dados do último arquivo gerado.
    Mas agora que vem o desafio, como que faço para copiar os dados de finais de semana? Na segunda-feira vou rodar a atualização e vou copiar os dados de domingo mas e os dados de sábado e sexta-feira? Seria mais fácil se o arquivo.csv tivesse data no nome"LoginLogout_03112016.csv" , mas não tem...
    Eu vasculhei todo o fórum faz uns 3 dias e não achei nada para adaptar a minha realidade...

    Vocês podem me ajudar?

    Este é o código que estou utilizando:

    Código:

    Private Sub Comando0_Click()

    Dim myDir As String, fn As String, a(), n As Long, Availability As String
    Dim myDate As Date, temp As Date

    myDir = "caminho do arquivo na rede"
    fn = Dir(myDir & "\*.csv")

    Do While fn <> ""
        temp = CreateObject("Scripting.FileSystemObject").GetFile(myDir & "\" & fn).DateLastModified
        If myDate = 0 Then
            myDate = temp: Availability = myDir & "\" & fn
        Else
            If myDate < temp Then myDate = temp: Availability = myDir & "\" & fn
        End If
        fn = Dir
    Loop
    If Len(Availability) Then
          If vbYes = MsgBox("Opening Availability File  Name : " & Availability & vbLf & _
        "Last modified on : " & myDate, vbYesNo) Then

           DoCmd.TransferText acImportDelim, "", "Tablename", Availability, True, ""
          
        End If
    End If
    End Sub

    daniloreiis
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 315
    Registrado : 14/02/2011

    Importar arquivo gerado nos finais de semana

    Mensagem  daniloreiis em Qui 03 Nov 2016, 13:30

    Bom dia !

    Gostaria de ajudar e resolver este desafio, mas me diz uma coisa, você importa este arquivo todos os dias na semana ou seja

    terça = de segunda
    quarta = de terça
    quinta= quarta
    sexta = quinta

    sexta = acumulado
    sábado = acumulado
    domingo = acumulado

    segunda = importaria estes 3 dias ?

    vejo a solução no código, quando chegar segunda-feira vai importar o arquivo de domingo, então faça esta leitura e descubra qual o dia da semana
    se for domingo, então pede para importar o de sábado e de sexta, agora se não for domingo, importa o dia anterior mesmo.


    se possível me disponibilizar o projeto com os arquivos de domingo, sábado, sexta e quinta, eu posso tentar resolver.


    Vlw


    .................................................................................
    Att, Danilo Reis
    -------------------------------------------------------------------------------------------------------------------------------------------------
    [Você precisa estar registrado e conectado para ver este link.]

    Se alguém não quiser trabalhar, não coma também.
    2 Tessalonicenses 3:10

    bobducs
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 11/07/2016

    Re: Importar arquivo gerado nos finais de semana

    Mensagem  bobducs em Qui 03 Nov 2016, 13:53

    Muito Obrigado Danilo Reis!
    Anexei os arquivos e também o banco de dados que estou criando.

    Respondendo suas perguntas:

    Importo D-1 de Terça á Sexta-feira e nas Segundas-feiras preciso D-3 (domingo, sábado e sexta-feira).

    terça = de segunda - SIM
    quarta = de terça - SIM
    quinta= quarta - SIM
    sexta = quinta - SIM

    sexta = acumulado - SIM
    sábado = acumulado - SIM
    domingo = acumulado - SIM

    segunda = importaria estes 3 dias?
    SIM, mas são arquivos separados todos os dias. Por exemplo, sexta-feira tem um arquivo, sábado tem outro e domingo tem outro.
    A minha dúvida é como identificar o arquivo.csv se é de domingo, sábado ou sexta-feira, porque o arquivo não tem nome que referencie a estas datas.
    Obs: dentro do arquivo.csv tem um campo chamado Data_login que tem a data, mas não sei se tem como ler/usar esta data...

    Muito obrigado novamente!!! Wink
    Anexos
    Base_do_Workcenter.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (37 Kb) Baixado 15 vez(es)

    daniloreiis
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 315
    Registrado : 14/02/2011

    Importar arquivo gerado nos finais de semana Responder

    Mensagem  daniloreiis em Qui 03 Nov 2016, 14:52

    Boa tarde meu amigo, segue código veja se atende:

    Código:


    Private Sub Comando0_Click()

    Dim myDir As String, fn As String, a(), n As Long, Availability As String
    Dim myDate As Date, temp As Date
    Dim semana As Integer
    Dim domingo, sabado, sexta  As String


    myDir = "S:\PRD\SAP\CRM\Analitico\IO\Workcenter\LoginLogout"
    'myDir = "C:\Users\Danilo\Desktop\mx"
    fn = Dir(myDir & "\*.csv")



    Do While fn <> ""
        temp = CreateObject("Scripting.FileSystemObject").GetFile(myDir & "\" & fn).DateLastModified
        
        If Weekday(temp) = 1 Then 'Domingo
        domingo = fn
        ElseIf Weekday(temp) = 7 Then 'Sabado
        sabado = fn
        ElseIf Weekday(temp) = 6 Then 'Sexta
        sexta = fn
        End If
        
        'Tabela dos dias da semana
        'dia da semana = 1 Domingo
        'dia da semana = 2 Segunda
        'dia da semana = 3 Terça
        'dia da semana = 4 Quarta
        'dia da semana = 5 Quinta
        'dia da semana = 6 Sexta
        'dia da semana = 7 Sabado
        
        If myDate = 0 Then
            myDate = temp: Availability = myDir & "\" & fn
        Else
            If myDate < temp Then myDate = temp: Availability = myDir & "\" & fn
        End If
        fn = Dir
    Loop

    If Weekday(temp) = 1 Then ' se o ultimo dia é domingo ele vai importar 3 dias no seu caso D-3

    'importa domingo
    If Len(domingo) Then
          If vbYes = MsgBox("Opening Availability File  Name : " & Availability & vbLf & _
        "Last modified on : " & myDate, vbYesNo) Then

           DoCmd.TransferText acImportDelim, "", "Tablename", Availability, True, ""
          
        End If
    End If

    'importa sabado
    If Len(sabado) Then
          If vbYes = MsgBox("Opening Availability File  Name : " & Availability & vbLf & _
        "Last modified on : " & myDate, vbYesNo) Then

           DoCmd.TransferText acImportDelim, "", "Tablename", Availability, True, ""
          
        End If
    End If
    'importa sexta
    If Len(sexta) Then
          If vbYes = MsgBox("Opening Availability File  Name : " & Availability & vbLf & _
        "Last modified on : " & myDate, vbYesNo) Then

           DoCmd.TransferText acImportDelim, "", "Tablename", Availability, True, ""
          
        End If
    End If



    Else ' Se o ultimo dia não for domingo, ele vai importar normalmente no seu caso D-1
    If Len(Availability) Then
          If vbYes = MsgBox("Opening Availability File  Name : " & Availability & vbLf & _
        "Last modified on : " & myDate, vbYesNo) Then

           DoCmd.TransferText acImportDelim, "", "Tablename", Availability, True, ""
          
        End If
    End If

    End If




    End Sub



    .................................................................................
    Att, Danilo Reis
    -------------------------------------------------------------------------------------------------------------------------------------------------
    [Você precisa estar registrado e conectado para ver este link.]

    Se alguém não quiser trabalhar, não coma também.
    2 Tessalonicenses 3:10

    bobducs
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 11/07/2016

    Re: Importar arquivo gerado nos finais de semana

    Mensagem  bobducs em Qui 03 Nov 2016, 15:16

    Cara, tu apavorou! O pessoal aqui do trabalho ficou impressionado com a rapidez na solução do caso.
    Um dia eu chego lá!

    Muito obrigado mesmo. Wink

    Um abraço!

    bobducs
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 11/07/2016

    Re: Importar arquivo gerado nos finais de semana

    Mensagem  bobducs em Seg 21 Nov 2016, 14:00

    Oi pessoal, tudo bem?

    Estou trabalhando ainda neste projeto!
    Passei o final de semana buscando como solucionar o problema abaixo:

    Com o código que Danilo Reis montou ficou perfeito, mas ainda preciso de uma ajudinha.

    Quando uso o comando DateLastModified ele procura na pasta o arquivo, mas com data em inglês mmddyyyy, desta forma ele não encontra o último.

    Código:
    temp = CreateObject("Scripting.FileSystemObject").GetFile(myDir & "\" & fn).DateLastModified

    Existe como eu forçar que ele faça a leitura da data no formato ddmmyyyy?

    Obrigado!

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: Importar arquivo gerado nos finais de semana

    Mensagem  Alexandre Neves em Seg 21 Nov 2016, 21:28

    Boa noite,
    Utilize
    temp = Format(CreateObject("Scripting.FileSystemObject").GetFile(myDir & "\" & fn).DateLastModified,"ddmmyyyy")


    .................................................................................
    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

    bobducs
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 11/07/2016

    Re: Importar arquivo gerado nos finais de semana

    Mensagem  bobducs em Ter 22 Nov 2016, 15:45

    Muito obrigado Alexandre Neves.

    Depois que analisei junto com um colega identificamos onde estava o erro.
    O loop fazia toda a leitura dos arquivos da pasta porém quando eu declarava o último arquivo eu declarava o temp e não necessariamente o temp era o último arquivo modificado.

    Ao ler e armazenar como temp existe um momento onde o resultado de temp é meu resultado myDate.
    Quando saio do loop devo declarar o valor de myDate, que de fato é o valor DateLastModified.

    Mudando isso consegui obter os arquivos desejados!

    O banco então ficou assim:

    Código:
    Option Compare Database


    Function loginlogout()

    Dim myDir As String, fn As String, a(), n As Long, Availability As String
    Dim myDate As Date, temp As Date
    Dim semana As Integer
    Dim domingo, sabado, sexta  As String

    'Abrir formulário para atualizar campo data
    DoCmd.OpenForm "frm_Painel_de_Controle", , , , , acWindowNormal

    'Aguardar 10 segundos para o campo do formulário atualizar a data Máxima
    'Dim myDate As Date
    minhadata = Now
    While DateDiff("s", minhadata, Now) < 10
    DoEvents
    Wend

    'Valida se a base foi atualizada para não duplicar a base de dados
    DtArquivo = Date
    Maxbase = Form_frm_Painel_de_Controle.dataupload

    If DtArquivo <= Maxbase Then

    MsgBox "Atualização da TB_Login_Logout já foi feita anteriormente. Por gentileza, abra a tabela e verifique. Cancelado solicitação."

    Else

        myDir = "S:\PRD\SAP\CRM\Analitico\IO\Workcenter\LoginLogout\"
        fn = Dir(myDir & "*.csv")
        
        Do While fn <> ""
        
            temp = CreateObject("Scripting.FileSystemObject").GetFile(myDir & fn).DateLastModified
            '.DateLastModified
                    
            If Weekday(myDate) = 1 Then 'Domingo
            domingo = fn
            ElseIf Weekday(myDate) = 7 Then 'Sabado
            sabado = fn
            ElseIf Weekday(myDate) = 6 Then 'Sexta
            sexta = fn
            End If
            
            'Tabela dos dias da semana
            'dia da semana = 1 Domingo
            'dia da semana = 2 Segunda
            'dia da semana = 3 Terça
            'dia da semana = 4 Quarta
            'dia da semana = 5 Quinta
            'dia da semana = 6 Sexta
            'dia da semana = 7 Sabado
            
            If myDate = 0 Then
                myDate = temp: Availability = myDir & fn
            Else
                If myDate < temp Then myDate = temp: Availability = myDir & fn
            End If
            fn = Dir

        Loop
        
            If Weekday(myDate) = 2 Then ' se o ultimo dia é domingo ele vai importar 3 dias no seu caso D-3
                
            If Len(domingo) Then 'importa domingo
                'If vbYes = MsgBox("Opening Availability File  Name : " & (domingo) & vbLf, vbYesNo) Then
            
                   DoCmd.TransferText acImportDelim, "loginlogout", "TB_Login_Logout", myDir & [domingo], False
                  
                    CurrentDb.Execute "Delete * from [TB_Login_Logout] Where isnull(Nome)" 'deletar linhas em branco.
                    DoCmd.SetWarnings False 'desativar avisos
                    DoCmd.RunSQL "INSERT INTO TB_dataupload (c_date) VALUES ('" & Date - 1 & "');" 'inserir data da atualização na tabela tbl_date
                    DoCmd.SetWarnings True 'desativar 'ativar avisos
                          
                'End If
            End If
                
            If Len(sabado) Then 'importa sabado
                'If vbYes = MsgBox("Opening Availability File  Name : " & (sabado) & vbLf, vbYesNo) Then
          
                   DoCmd.TransferText acImportDelim, "loginlogout", "TB_Login_Logout", myDir & [sabado], False
                  
                    CurrentDb.Execute "Delete * from [TB_Login_Logout] Where isnull(Nome)" 'deletar linhas em branco.
                    DoCmd.SetWarnings False 'desativar avisos
                    DoCmd.RunSQL "INSERT INTO TB_dataupload (c_date) VALUES ('" & Date - 2 & "');" 'inserir data da atualização na tabela tbl_date
                    DoCmd.SetWarnings True 'desativar 'ativar avisos
                  
                'End If
            End If
                
            If Len(sexta) Then 'importa sexta
                'If vbYes = MsgBox("Opening Availability File  Name : " & (sexta) & vbLf, vbYesNo) Then
                  
                  DoCmd.TransferText acImportDelim, "loginlogout", "TB_Login_Logout", myDir & [sexta], False

                    CurrentDb.Execute "Delete * from [TB_Login_Logout] Where isnull(Nome)" 'deletar linhas em branco.
                    DoCmd.SetWarnings False 'desativar avisos
                    DoCmd.RunSQL "INSERT INTO TB_dataupload (c_date) VALUES ('" & Date - 3 & "');" 'inserir data da atualização na tabela tbl_date
                    DoCmd.SetWarnings True 'desativar 'ativar avisos
                    
                'End If
            End If
            
            Else ' Se o ultimo dia não for domingo, ele vai importar normalmente no seu caso D-1
            If Len(Availability) Then
                'If vbYes = MsgBox("Opening Availability File  Name : " & Availability & vbLf, vbYesNo) Then
            
                DoCmd.TransferText acImportDelim, "loginlogout", "TB_Login_Logout", Availability, False
                              
                    CurrentDb.Execute "Delete * from [TB_Login_Logout] Where isnull(Nome)" 'deletar linhas em branco.
                    DoCmd.SetWarnings False 'desativar avisos
                    DoCmd.RunSQL "INSERT INTO TB_dataupload (c_date) VALUES ('" & Date & "');" 'inserir data da atualização na tabela tbl_date
                    DoCmd.SetWarnings True 'desativar 'ativar avisos
                              
                'End If
            End If
            
            
            End If
            
    End If

            Forms("frm_Painel_de_Controle").Requery 'atualizar o formulario

    'DoCmd.Close acForm, "frm_Painel_de_Controle"
    'DoCmd.Quit ' fechar o banco de dados

    End Function

    Obrigado pelo apoio time!
    Abraço!

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3539
    Registrado : 15/03/2013

    Re: Importar arquivo gerado nos finais de semana

    Mensagem  ahteixeira em Ter 22 Nov 2016, 16:45

    Olá, obrigado pelo retorno.

    Face ao exposto, não se esqueça de dar o tópico como resolvido, veja link abaixo como fazer:
    [Você precisa estar registrado e conectado para ver este link.]

    Abraço

      Data/hora atual: Sex 24 Fev 2017, 08:01