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


4 participantes

    Importar arquivo gerado nos finais de semana

    avatar
    bobducs
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    Importar arquivo gerado nos finais de semana Empty Importar arquivo gerado nos finais de semana

    Mensagem  bobducs 3/11/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
    daniloreiis
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

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

    Importar arquivo gerado nos finais de semana Empty Importar arquivo gerado nos finais de semana

    Mensagem  daniloreiis 3/11/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
    -------------------------------------------------------------------------------------------------------------------------------------------------

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


    Respeito às regras : Respeito às Regras 100%

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

    Importar arquivo gerado nos finais de semana Empty Re: Importar arquivo gerado nos finais de semana

    Mensagem  bobducs 3/11/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
    Importar arquivo gerado nos finais de semana AttachmentBase_do_Workcenter.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (37 Kb) Baixado 18 vez(es)
    daniloreiis
    daniloreiis
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

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

    Importar arquivo gerado nos finais de semana Empty Importar arquivo gerado nos finais de semana Responder

    Mensagem  daniloreiis 3/11/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
    -------------------------------------------------------------------------------------------------------------------------------------------------

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


    Respeito às regras : Respeito às Regras 100%

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

    Importar arquivo gerado nos finais de semana Empty Re: Importar arquivo gerado nos finais de semana

    Mensagem  bobducs 3/11/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!
    avatar
    bobducs
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    Importar arquivo gerado nos finais de semana Empty Re: Importar arquivo gerado nos finais de semana

    Mensagem  bobducs 21/11/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
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    Importar arquivo gerado nos finais de semana Empty Re: Importar arquivo gerado nos finais de semana

    Mensagem  Alexandre Neves 21/11/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
    avatar
    bobducs
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    Importar arquivo gerado nos finais de semana Empty Re: Importar arquivo gerado nos finais de semana

    Mensagem  bobducs 22/11/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!
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    Importar arquivo gerado nos finais de semana Empty Re: Importar arquivo gerado nos finais de semana

    Mensagem  Alvaro Teixeira 22/11/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:
    https://www.maximoaccess.com/t860-resolucao-de-topicos

    Abraço

    Conteúdo patrocinado


    Importar arquivo gerado nos finais de semana Empty Re: Importar arquivo gerado nos finais de semana

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 19/4/2024, 06:38