QUANDO A LINHA NÃO EXISTIR NO XML

 Tópico anterior Próximo tópico Novo tópico

QUANDO A LINHA NÃO EXISTIR NO XML

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#497590 - 22/07/2021 22:40:54

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Boa noite pessoal,

Me deparei com um problema agora ao importar(adicionar) dados de uma XML no meu banco de dados...

Vou dar um exemplo:
ProdutosEntada!IPICST  = XMLDOC.selectNodes('nfeProc/NFe/infNFe/det').Item(i).selectNodes('imposto/IPI/IPITrib/CST').Item(0).Text


Nesse exemplo estou adicionando o 'IPI CST' que veio na XML da nota que baixo no meu campo IPICST da minha tabela ProdutosEntada
Se na xml vinher tal informação, ele adiciona perfeitamente...
Meu problema é q não é toda XML que é citado IPI... então dar o erro que o objeto não foi setado (ele não existe na XML)

Deparei com esse mesmo erro em varias situações, com por exemplo o valor de desconto do produto... nem todo produto tem desconto....

Entao se eu uso:
if XMLDOC.selectNodes('nfeProc/NFe/infNFe/det').Item(i).selectNodes('imposto/IPI/IPITrib/CST').Item(0).Text = '' then

Vai dar erro, pq como ele não existe na xml, ele não tem como está vazio ou preenchido

O que fazer nessa situação?





#497591 - 22/07/2021 23:09:37

GABRIEL
ARAUCÁRIA - PR
Cadast. em:Dezembro/2003


eu tive um poblema parecido e meio que enganei o sistema
criei uma variavel e nela coloquei os dados da xml que quiz, e fiz o if da variavel e nao do campo

exemplo
var ipi as string
ipi = XMLDOC.selectNodes('nfeProc/NFe/infNFe/det').Item(i).selectNodes('imposto/IPI/IPITrib/CST').Item(0).Text
if ipi = '' then
   msgbox 'vazio'
else
   msgbox ipi
end if


resolveu meu caso rsrs
tente, vai que da boa!

GHPNET Informatica
www.ghpnet.com.br
(41) 9 9744-6137

#497592 - 22/07/2021 23:20:49

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Citação:
:
eu tive um poblema parecido e meio que enganei o sistema
criei uma variavel e nela coloquei os dados da xml que quiz, e fiz o if da variavel e nao do campo

exemplo
var ipi as string
ipi = XMLDOC.selectNodes('nfeProc/NFe/infNFe/det').Item(i).selectNodes('imposto/IPI/IPITrib/CST').Item(0).Text
if ipi = '' then
   msgbox 'vazio'
else
   msgbox ipi
end if


resolveu meu caso rsrs
tente, vai que da boa!


Tentei fazer da mesma forma, porem dar erro ao tentar setar algo que não existe.
na sua linha:
ipi = XMLDOC.selectNodes('nfeProc/NFe/infNFe/det').Item(i).selectNodes('imposto/IPI/IPITrib/CST').Item(0).Text
Como que ele vai setar a variavel se o que vc setou não existe na xml...



#497597 - 23/07/2021 07:51:51

MRSILVA
MARINGA
Cadast. em:Julho/2015


Última edição em 23/07/2021 07:55:52 por MRSILVA

Olá.

Faz tempo que não programo em VBA e não tem como eu testar aqui, mas acredito que nesse caso você não pode verificar  se tem dados diretamente no ultimo tag   que tem os dados do IPI no XML, porque  se algum nível anterior não existir no xml  vai gerar um erro.

Tente ir testando o xml mais ou menos assim:

if XMLDOC.selectNodes('nfeProc/NFe/infNFe/det').Item(i).selectNodes('imposto/IPI).Item(0).Text = '' then

Como eu disse faz tempo que não programo em VBA  mas acredito que a solução é por ai.





#497598 - 23/07/2021 08:29:15

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Citação:
:
Olá.

Faz tempo que não programo em VBA e não tem como eu testar aqui, mas acredito que nesse caso você não pode verificar  se tem dados diretamente no ultimo tag   que tem os dados do IPI no XML, porque  se algum nível anterior não existir no xml  vai gerar um erro.

Tente ir testando o xml mais ou menos assim:

if XMLDOC.selectNodes('nfeProc/NFe/infNFe/det').Item(i).selectNodes('imposto/IPI).Item(0).Text = '' then

Como eu disse faz tempo que não programo em VBA  mas acredito que a solução é por ai.



Justamente meu problema tá ai...
if XMLDOC.selectNodes('nfeProc/NFe/infNFe/det').Item(i).selectNodes('imposto/IPI).Item(0).Text = '' then
Não tem como ver se está vazio, pois a tag nao possui na xml... entao nao existe nada setado para verificar se em conteudo ou nao




#497600 - 23/07/2021 10:32:27

MRSILVA
MARINGA
Cadast. em:Julho/2015



Citação:
ão tem como ver se está vazio, pois a tag nao possui na xml... entao nao existe nada setado para verificar se em conteudo ou nao  


Então foi isso que te expliquei. O xml tem uma hierarquia, se alguma linha que você espera ter no xml e por algum motivo não tem você tem que fazer um teste antes de pegar o valor da tag.

Você já esta indo para o ultimo nível por isso que o erro ocorre não existe a informação nos níveis anteriores.

Tem que ir escalando os níveis, no seu caso tem que descobri em VBA como faz para verificar se existe a tag IPI  que fica dentro da tag imposto.






 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário