MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Importar lote de arquivos XML via VBA

    avatar
    tomasini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 10
    Registrado : 05/12/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Importar lote de arquivos XML via VBA

    Mensagem  tomasini em 5/12/2011, 17:58

    Olá, sou novo no fórum e estou iniciando também nas aplicações de Access. Tenho o seguinte impasse: necessito importar vários arquivos XML simultaneamente para uma tabela do Banco de Dados via VBA. Li diversos tópicos e artigos na internet mas não encontrei nenhum caminho que possa me auxiliar nesta situação.

    Por exemplo: no caso da NF-e, necessito importar os xml das notas autorizadas simultaneamente. Existe alguma forma de tornar este processo automatizado via VBA?
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  HARYSOHN em 5/12/2011, 18:45

    Boa tarde Tomasini, seja bem vindo ao fórum.

    Neste exemplo utiliza-se vba para importaçāo de xml

    http://maximoaccess.forumeiros.com/t3933-rss-feeds-access

    Cumprimentos.

    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  HARYSOHN em 5/12/2011, 18:51

    Veja tambem.


    Clique aqui
    avatar
    tomasini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 10
    Registrado : 05/12/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  tomasini em 5/12/2011, 19:45

    Harysohn, no meu caso funciona da seguinte maneira. Os arquivos xml são salvos em um diretório, e preciso importar os mesmos deste diretório. Então imaginemos que eu tenha uma pasta onde dentro tenho 20 arquivos xml, preciso importar todos os arquivos de uma so vez para meu banco de dados.

    A importação de um único arquivo eu já consigo fazer, mas preciso importar vários de uma vez, aqui estou travado.
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  HARYSOHN em 6/12/2011, 00:51

    Poste o codigo que estas utilizando, assim poderemos tentar encontrar uma solucao para isto..


    Cumprimentos
    avatar
    tomasini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 10
    Registrado : 05/12/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  tomasini em 6/12/2011, 02:01

    Oi, abaixo está o código que estou utilizando:

    'Utilizei este código aqui tb, o resultado em meu caso foi o mesmo. Importa em várias tabelas, um unico xml.
    'Application.ImportXML _
    'DataSource:="C:\XML\um.xml", _
    'ImportOptions:=acStructureAndData
    'MsgBox "Dados importados com sucesso!", vbInformation, gstrNomSis


    Dim dir As Variant


    dir = "C:\XML\teste.xml"

    Application.ImportXML _
    DataSource:=dir, _
    ImportOptions:=acAppendData 'acStructureAndData
    Me.Requery

    Exit Sub

    End Sub
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  HARYSOHN em 6/12/2011, 02:10

    Exemplifique os nome dos arquivos xml.. (alguns)...
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  HARYSOHN em 6/12/2011, 02:13

    Uma ideia...


    Seria carregar o conteudo do diretorio (nome dos arquivos) em uma tabela, utilizar de um recordset... e acada loop ir importando o xml de acordo com o nome do arquivo a cada loop do recordset...
    avatar
    tomasini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 10
    Registrado : 05/12/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  tomasini em 6/12/2011, 02:23

    Exemplos:

    NFe_99994471000318_1_400039.xml
    NFe_99994471000318_1_405498.xml
    NFe_99994471000318_1_406578.xml
    NFe_99994471000318_1_408902.xml
    NFe_99994471000318_1_408906.xml
    NFe_99994471000318_1_409009.xml
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  HARYSOHN em 6/12/2011, 02:30

    A ideia do meu post anterior e viável...
    avatar
    tomasini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 10
    Registrado : 05/12/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  tomasini em 6/12/2011, 02:39

    Sim, já estou vendo aqui uma forma de automatizar este carregamento da tabela através de um recordset e a função dir(), onde vou pegar o nome dos arquivos. Meu único impasse no final disso é carregar tudo isso em uma unica tabela, ou de uma forma em que eu consiga identificar cada valor através da chave da NF-e.
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  HARYSOHN em 6/12/2011, 03:01

    Nao tenho como te fazer o exemplo mas tentarei lhe mostrar o caminho...


    No repositorio tem um exemplo de leitr de pdf que fiz.. nele tem uma list box baseada em uma tabela.. esta tabela e carregada com nomes de pdf's de um diretorio.'o codigo que carrega a tabela esta no evento ao abrir ou ao carregar do form.


    Pois bem.. voce utilizaria este codigo para carregar a tabela com os nomes dos xml's...
    - carrega um recordset com esta tabela...

    Utiliza o comando loop
    Apos o loop o codigo que carrega a xml, e no lugar do nome do arquivo, o campo do recordset (que vai ser o nome do xml)

    Assim a cada loop na tabela o codigo seria executado com o nome do xml seguinte.. de acordo com a tabela..

    Compreendeu?
    avatar
    tomasini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 10
    Registrado : 05/12/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  tomasini em 6/12/2011, 11:30

    Compreendi Harysohn, já está implementado e funcionando. Mas como já havia dito anteriormente, esta importação está quebrando o XML em várias tabelas, e sem que eu consiga relacionar as informações. Por exemplo, tenho a NF 123, com os produtos X, Y e Z. Ela quebra em duas tabelas, uma com o cabeçalho da NF 123, e outra com os produtos, mas na tabela produtos, não tenho como saber que estes pertencem à NF 123. Não tenho como, no momento da importação, relacionar estas informações?
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  HARYSOHN em 6/12/2011, 11:50

    Quando for recuperar as informqcoes e furm (dados da nota) e em um subdorm (detalhes da itens), podes relaciona-las ao carregar ambos via vba, utilizando o left join...


    Observe se as tabelas ao serem criadas na importacao tem os campos da chave primaria e o campo numero para o relacinamento na tabela detalhes, em tendo e facil vincula-las via vba, em nao tendo podes utilizar o comand update apos a importacao do xml para levar a tabela detalhes o numero da chave primaria da tabela principal para ai sim efetuar a vinculacao vba..

    Espero ter sidi claro


    Cumprimentos
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  HARYSOHN em 6/12/2011, 12:02

    Alguns exemplos:

    'todos os registos da tabela 1 com os registos da tabela 2 correspondentes SELECT * FROM Tabela1 LEFT JOIN Tabela2 ON Tabela1.CampoX=Tabela2.CampoY ...

    'todos os registos da tabela 2 com os registos da tabela 1 correspondentes SELECT * FROM Tabela1 RIGHT JOIN Tabela2 ON Tabela1.CampoX=Tabela2.CampoY ...

    'registos da tabela 1 com os registos da tabela 2 apenas em caso de correspondência SELECT * FROM Tabela1 INNER JOIN Tabela2 ON Tabela1.CampoX=Tabela2.CampoY ...


    Estes relacionamentos seria feitos no momento da utilizacao no form, dispensando ao relacionamento nativo do access..
    avatar
    tomasini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 10
    Registrado : 05/12/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  tomasini em 6/12/2011, 17:25

    Estou tentando aqui mas não vejo saída por este caminho. O resultado em que preciso chegar se assemelha à importação que ocorre no excel. Tendo a NF dois produtos, são criadas duas linhas onde se repetem as informações do cabeçalho da NF, e nas colunas de produto são exibidos os produtos, a CST daquele item, a alíquota d IPI, Pis COfins, etc... Na importação como está agora, estas informações estão dispostas em 27 tabelas, sem que eu consiga relacioná-las.
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  HARYSOHN em 6/12/2011, 18:16

    De um exemplo disso..

    Por exemplo, uma nf. Esta ferando quantas tabelas? E quais as disposicoes dos campos?

    O que poderia fazer entao e criar uma nova tabela inserir os campos de todas as tabelas nessa tabela nova entao excluir as importadas...

    Eu nao estou conseguindo entender quando diz que nao consegue relaciona-las.. para isto pode fazer por vba...

    A logica demuma nota fiscal sao apenas duas tabelas, uma com os dados e a outra com os produtos

    avatar
    tomasini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 10
    Registrado : 05/12/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  tomasini em 7/12/2011, 11:08

    Bom dia Harysohn,

    Importei uma Nota Fiscal, o procedimento gerou ao todo 26 tabelas. Tentei utilizar o acAppendData e o acStructureAndData, sendo que o segundo me gerou ainda mais tabelas. Estas tabelas foram geradas na importação de uma NF-e v2.0.

    A importação esta gerando uma tabela para o emitente da nf, outra para o destinatario, outra com as informações da NF (numero, natureza de operação, série, data emissao, data saida, etc), outra para os produtos, outra com o PIS/COFINS dos produtos, e assim vai.

    Só que não tenho uma relação dentre as informações, ou seja, não consigo fazer uma consulta entre as tabelas afim de juntá-las em uma só.

    Espero ter me feito entender.

    Muito obrigado pela sua ajuda até agora cara, estou aprendendo muito aqui.
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  HARYSOHN em 7/12/2011, 11:26

    Bom dia amigão, realmenre creio que deve ter haver com a forma com que está o xml... eu nāo tenho como testar pois teclo de um tablet.. mas ha tambem a possibilidade de criar uma tabela com todos os campos, atraves do comando insert into inserir tabela a tabela na nova tabela no seu respectivo campo, apagando ao final a tabela denorigem...

    É uma saida...


    Cumprimentos
    avatar
    tomasini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 10
    Registrado : 05/12/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  tomasini em 8/12/2011, 13:25

    Bom dia Harysohn.

    Estou marcando o tópico como resolvido, pois a importação em lote já está funcionando. Agora vou suar um pouco para associar as informações em uma tabela só via VBA. Vamos à luta! Obrigado pela ajuda.

    Resolução para importar um lote de arquivos XML:

    1. Carregar o diretório dos arquivos em uma tabela no Access;

    Dim rst As Recordset
    Dim Dbs As Database
    Set Dbs = CurrentDb()

    Dbs.Execute "delete from TESTE"
    Diret = "C:\Diretorio_Arquivos_XML_a_serem_importados\"
    Set rst = Dbs.OpenRecordset("TESTE")
    Arq = Dir(Diret & "*.XML", vbArchive)

    Do While Arq <> ""
    rst.AddNew
    rst!NOME_DO_CAMPO_NA_TABELA_DOS_DIRETORIOS = Diret & Arq
    rst.Update
    Arq = Dir()
    Loop

    2. Criar um Recordset para percorrer a tabela com o endereço dos arquivos a serem importados;
    3. Através de um looping percorrer a tabela dos endereços carregando a cada iteração o arquivo com o código abaixo;

    On Error GoTo TrataErro

    Application.ImportXML _
    DataSource:=Carrega, _
    ImportOptions:=acAppendData

    TrataErro:
    If Err.Number = 31550 Then
    Resume Next
    Else
    MsgBox "erro"
    End If

    O Access vai gerar as tabelas de acordo com a estrutura do XML, no parâmetro acAppendData, ele irá trazer os dados, portanto gerando as tabelas uma unica vez e inserindo os registros nelas. No acStructureAndData , irá gerar uma tabela para cada estrutura de cada arquivo e trazer os dados.

    Cordialmente.
    avatar
    tomasini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 10
    Registrado : 05/12/2011

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  tomasini em 8/12/2011, 13:26

    Resolvido.
    avatar
    mauxma
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 1
    Registrado : 24/01/2012

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  mauxma em 24/1/2012, 16:24

    Eu utilizo uma coluna de autonumerador... dai pego e faço uma relação padrão.. exemplos a linha par pertence a impar, dai faço ele juntar isso
    faço duas consultas...

    1 com os dados da primeira linha e o seu autonumerador(1) + uma coluna com autonumedor(1)+1 = 2
    Faço outra consulta que pega a primeira linha e busca a 2 fazendo novas colunas e assim vou juntando.

    Na verdade desta forma eu ainda faço mais complexo.
    Eu uso colunas chaves para determinar se ele pertence a 1ª ou a ª 2ª... etc assim pode ficar totalmente variavel.

    Sempre mando criar uma tabela nova, para zerar o autonumeror(Pq senão ele fica muito gigante)
    avatar
    Clebergyn
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 750
    Registrado : 29/08/2012

    [Resolvido]Importar lote de arquivos XML via VBA Empty Re: [Resolvido]Importar lote de arquivos XML via VBA

    Mensagem  Clebergyn em 9/7/2020, 12:30

    Bom dia HARYSOHN

    Vi no seu post acima que voce desenvolveu um leitor de PDF, procurei no Repositorio e nao achei,

    tem como disponibilizar?

      Data/hora atual: 1/12/2020, 15:53