Copiar e zipar arquivos Xml
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Usuário Silva:
Boa noite!
Minha aplicação gera arquivos XML, que corresponde a cada nfe emitida e que são salvos na pasta NFe. Gostaria, que no início de cada mês, estes arquivos fossem compactados e enviados para a Contabilidade.
Suporte:
Silva, para compactar você pode utilizar o aplicativo WINRAR, executado pelo comando Shell do Access. Exemplo:
Public sub fncZipar(strArquivoZip$, strArquivoXml$)
Call shell("C:\Program Files (x86)\WinRAR\WinRAR.exe a -r -ep " & strArquivoZip & " " & strArquivoXml, vbHide)
End Function
Basta informar o nome do arquivo RAR e o nome do arquivo XML a ser compactado. Exemplo:
call fncZipar("e:\RedeAccess\Avelino\NfeXml.rar","e:\redeaccess\avelino\Nfe2101.xml")
No seu projeto, crie uma programação que realize um loop, para ir inserindo os arquivos XML no arquivo RAR. Vamos supor que você tenha as notas de 2100 a 2130 para zipar:
Dim k
For k = 2100 to 2130
call fncZipar("e:\RedeAccess\Avelino\NfeXml.rar","e:\redeaccess\avelino\Nfe" & k & ".xml")
next
Usuário Silva:
Grato, Avelino!
Peço ajuda em mais uma coisa: como fazer um loop pela tabela notas_fiscais, sabendo quais são a do período pesquisado e assim, selecionar os XML correspondentes?
Suporte:
Silva, utilize o Recordset. Algo assim:
Dim rs as DAO.Recordset
Dim strSql as String
Dim strFiltro as String
Dim strArquivoRar as string
strArquivoRar = "c:\SuaPasta\NfeXml.rar"
strFiltro="DataEmissão Between #" & format(me!DtInicial,"mm/dd/yyy")
strFiltro = strFiltro & "# AND #" & format(me!DtFinal,"mm/dd/yyyy") & "#;"
strSql = "SELECT * FROM notas_fiscais WHERE " & strFiltro
set rs = currentdb.Openrecordset(strSql)
Do while not rs.eof
call fncZipar(strArquivoRar,rs!NomeArquivoXml)
rs.movenext
loop
rs.close
set rs = nothing
msgbox "Arquivos zipado..."
Usuário Silva:
Avelino, tentei aqui, mas deu algum erro. Até aparece ele fazendo a varredura e zipando (pelo menos exibe a tela do winrar - tirei a invisibilidade), porém, não grava nada na pasta onde teria que estar zipado. Não gera o arquivo zipado!
Suporte:
Silva, segue um exemplo para você testar. Descompacte numa pasta de teste. Abra o formulário frmTeste e clique no botão. Caso esteja tudo OK, irá compactar os arquivos XML que se encontram na pasta.
Nota: na função fncZiper() tem que saber aonde esta instalado o seu WINRAR. Se em "Program Files" ou se em "Program Files(86)".
Download
Usuário Silva:
Resolvido. Muito obrigado!
Só um adendo, Avelino: o erro ocorreu devido a minha pasta ter espaço entre os nomes: "XML<espaço>AUTORIZADO", pois quando coloco "XML_AUTORIZADO" ele funciona. Tem como o código reconhecer este espaço?
Suporte:
Silva, utilize o chr(34) para delimitar o nome com Aspas. Parte em vermelho.
Public Function fncZipar(strArquivoZip$, strArquivoXml$) As Boolean
strArquivoZip = Chr(34) & strArquivoZip & Chr(34)
strArquivoXml = Chr(34) & strArquivoXml & Chr(34)
Call Shell("C:\Program Files (x86)\WinRAR\WinRAR.exe a -r -ep " & strArquivoZip & " " & strArquivoXml, vbHide)
End Function
Usuário Silva:
Perfeito Avelino!
Não há comentário |