Olá, caros colegas,
Estou trabalhando em um projeto em Access utilizando VBA, que utiliza DOM para ler todas as informações de um arquixo XML e gravá-las em um Banco de Dados.
Preciso ler todos os nós filhos de cada elemento, e armazená-lo no BD na tabela correspondente.
Bem, a questão é: estou utilizando a estrutura For Each ... Next para navegar pelo arquivo e obter os dados... mas estou utilizando vários For Each aninhados, e no final do For principal, as variáveis lidas nos Fors "internos" estão vazias... Estou tentando organizar este laço de repetição para inserir os dados na tabela, e gostaria de criar uma classe de dados (c/ recordset DAO) para organizar isto... qualquer sugestão será muito bem vinda...
Abraços a todos, e muito obrigado!
William
Segue abaixo uma pequena parte do código:
Dim arquivoCaminho As String
Dim oXmlDoc As MSXML2.DOMDocument
Dim omensagemTISS As MSXML2.IXMLDOMElement
' Declaração de variáveis da Guia SP_SADT
Dim oidentificacaoGuiaSADTSP As MSXML2.IXMLDOMElement
Dim oregistroANS, odataEmissaoGuia, onumeroGuiaPrestador, onumeroGuiaOperadora As MSXML2.IXMLDOMElement
Dim odadosAutorizacao As MSXML2.IXMLDOMElement
Dim odataAutorizacao, osenhaAutorizacao, ovalidadeSenha As MSXML2.IXMLDOMElement
Dim odadosBeneficiario As MSXML2.IXMLDOMElement
Dim onumeroCarteira, onomeBeneficiario, onomePlano, ovalidadeCarteira, onumeroCNS, oidentificadorBeneficiario As MSXML2.IXMLDOMElement
Dim onumeroGuiaPrincipal, odadosSolicitante, oprestadorExecutante, oindicacaoClinica, ocaraterAtendimento, odataHoraAtendimento, odiagnosticoGuia, otipoSaida, otipoAtendimento, oProcedimentosRealizados, ooutrasDespesas, oOPMUtilizada, ovalorTotal, oobservacao As MSXML2.IXMLDOMElement
'Complex Type: ct_beneficiario
For Each odadosBeneficiario In oguiaSP_SADT.childNodes
If odadosBeneficiario.nodeName = "dadosBeneficiario" Then
For Each onumeroCarteira In odadosBeneficiario.childNodes
If (onumeroCarteira.nodeName = "numeroCarteira") Or (onumeroCarteira.nodeName = "ans:numeroCarteira") Then
'Gravação no BD...
End if
Next
For Each onomeBeneficiario In odadosBeneficiario.childNodes
If (onomeBeneficiario.nodeName = "nomeBeneficiario") Or (onomeBeneficiario.nodeName = "ans:nomeBeneficiario") Then
'Gravação no BD...
End If
Next
For Each onomePlano In odadosBeneficiario.childNodes
If (onomePlano.nodeName = "nomePlano") Or (onomePlano.nodeName = "ans:nomePlano") Then
'Gravação no BD...
End If
Next
For Each ovalidadeCarteira In odadosBeneficiario.childNodes
If (ovalidadeCarteira.nodeName = "validadeCarteira") Or (ovalidadeCarteira.nodeName = "ans:validadeCarteira") Then
'Gravação no BD...
End If
Next
For Each onumeroCNS In odadosBeneficiario.childNodes
If (onumeroCNS.nodeName = "numeroCNS") Or (onumeroCNS.nodeName = "ans:numeroCNS") Then
'Gravação no BD...
End If
Next
For Each oidentificadorBeneficiario In odadosBeneficiario.childNodes
If (oidentificadorBeneficiario.nodeName = "identificadorBeneficiario") Or (oidentificadorBeneficiario.nodeName = "ans:identificadorBeneficiario") Then
'Gravação no BD...
End If
Next
End If
'Aqui será inserida a rotina de gravação na tabela CT_BENEFICIARIO para os dados lidos acima, mas eu gostaria de organizar o loop para efetuar a inserção na tabela da forma correta...
'DoCmd.RunSQL "insert into ct_beneficiario (numeroCarteira, nomeBeneficiario, nomePlano...) values ('" & onumeroCarteira.nodeTypedValue & "',...)"
'As variáveis na msgbox abaixo estão vazias...
MsgBox (onumeroCarteira & onomeBeneficiario)
Next