Ir para conteúdo
  • Cadastre-se

  • Este tópico foi criado há 3754 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Olá pessoal, como vocês estão guardando o XML em banco, isso para quem guarda em banco, hoje eu apenas guardo o XML em arquivo e também guardo os dados da NF-e em banco, mas eu queria guardar o XML em si no banco de dados.

Eu tentei guardar o XML como TXT mas da erro na hora do delphi persistir em banco, esse erro ocorre por causa dos caracteres que existe no xml, pois, o delphi entende como parâmetros e da erro na hora de dar o Update.

Eu utilizo ADOQuery, com ODBC e persisto tudo via SQL.

Exemplo de persistencia:

try

  _inserir.Active := false;

  _inserir.SQL.Clear;

  _inserir.SQL.Add('update notafiscal_e.bloco_a set');

  _inserir.SQL.Add('id    = ' + QuotedStr(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID) + ', ');

  if(ACBrNFe1.WebServices.Retorno.cStat <> null)then

  begin

    _inserir.SQL.Add('cstatus    = ' + IntToStr(ACBrNFe1.WebServices.Retorno.cStat) + ', ');

    _inserir.SQL.Add('xstatus    = ' + QuotedStr(ACBrNFe1.WebServices.Retorno.xMotivo) + ', ');

    if ACBrNFe1.WebServices.Retorno.cStat = 100 then

      _inserir.SQL.Add('status   = ' + QuotedStr('2') + ', ');

  end;

  _inserir.SQL.Add('xml_nfe = ' + QuotedStr(ACBrNFe1.NotasFiscais.Items[0].XML));

  _inserir.SQL.Add('where infnfe = ' + _tnota_fiscal_saida.fieldbyname('infnfe').AsString);

  _inserir.SQL.Add(';commit;');

  _inserir.ExecSQL;

except

  UServico.verifica_erro(1, _inserir.SQL.Text, true);

  abort;

end;

Att.

Carlos Fitl.

Postado

Caro Carlos Alberto, primeiramente, qual banco você usa. No meu caso eu uso o Firebird 2.1 e persisto o XML da NFe no banco por dois motivos. Se o seu sistema funcionar em rede, os xml's ficaram fragmentados pela empresa e em caso de formatação das máquinas ou demais danos os mesmos podem ser perdidos.

Neu caso eu uso um campo blob e logo apos o envio da nota set XML para um MEMO e a minha função que gera SQL persiste esta informação.

O fato de gravar o XML adiantou a minha vida por que o usuário poderá utilizá-lo de qualquer estação em que estiver logado e simplesmente o carrego para imprimir danfe, cancelar, exportar, etc.

Isto é o que eu faço, mas como eu faço pode não ser útil para você por que talves os componentes que você usa para persistir em banco pode ser diferentes dos meus, a geração do sql etc. Espero ter dado uma luz.

  • Curtir 1

Pedro Antônio de Oliveira Peixoto

Analista de Sistemas

Professor do IFMG SJE

http://www.eagletecnologia.com

  • Moderadores
Postado

(respondendo novamente) vc pode salvar o XML diretamente no banco lendo a propriedade:

ACBrNFe1.NotasFiscais.Items[0].XML

Após o envio da NFe.

Dae vc le essa propriedade do componente e associa ao seu campo:

Query.FieldByName('XML'):AsString := ACBrNFe1.NotasFiscais.Items[0].XML

Para salvar informando esse campo como parametro vc deverá configurar corretamente o parametro de entrada. Informando o tipo, tamanho, método de entrada, etc.

Explorem o componente, mantenham o CTRL pressionado e clique em cima da propriedade do componente enquanto estiver escrevendo o código.

Isso te levará ao código do componente onde lista todos os metodos e sub-propriedades que vc clicou. Com isso vc tem uma visao geral do componente e muitas das duvidas de como usar o componente serão sanadas.

Sem mais.

João Henrique de Souza

 

Manual de como configurar o TortoiseSVN para não ficar mostrando a senha repetidas vezes (somente para commiters):

https://sourceforge.net/p/forge/community-docs/TortoiseSVN/

 

 

Postado

Olá juaumkiko, eu já faço assim para gravar o XML, o problema é quando eu faço o update no banco, o banco entendi que o XML possui vários parametros e da erro no update, então eu gostaria de saber se o pessoal esta gravando em TXT ou BLOB, em BLOB eu sei como faz, mas quem esta gravando como TXT como estão fazendo.

Eu estou utilizando ADOQuery, ODBC e Postgres, e estou gravando desta forma:

try

  _inserir.Active := false;

  _inserir.SQL.Clear;

  _inserir.SQL.Add('update notafiscal_e.bloco_a set');

  _inserir.SQL.Add('id    = ' + QuotedStr(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID) + ', ');

  if(ACBrNFe1.WebServices.Retorno.cStat <> null)then

  begin

    _inserir.SQL.Add('cstatus    = ' + IntToStr(ACBrNFe1.WebServices.Retorno.cStat) + ', ');

    _inserir.SQL.Add('xstatus    = ' + QuotedStr(ACBrNFe1.WebServices.Retorno.xMotivo) + ', ');

    if ACBrNFe1.WebServices.Retorno.cStat = 100 then

      _inserir.SQL.Add('status   = ' + QuotedStr('2') + ', ');

  end;

  _inserir.SQL.Add('xml_nfe = ' + QuotedStr(ACBrNFe1.NotasFiscais.Items[0].XML));

  _inserir.SQL.Add('where infnfe = ' + _tnota_fiscal_saida.fieldbyname('infnfe').AsString);

  _inserir.SQL.Add(';commit;');

  _inserir.ExecSQL;

except

  UServico.verifica_erro(1, _inserir.SQL.Text, true);

  abort;

end;

Att.

Carlos Fitl.

  • Moderadores
Postado

Pelo oq entendi vc tem um campo tipo STRING (VARCHAR), e nao um campo BLOB.

Entao acho que o problema esta aqui:

_inserir.SQL.Add('xml_nfe = ' + QuotedStr(ACBrNFe1.NotasFiscais.Items[0].XML));

Tenta fazer assim:

_inserir.SQL.Add('xml_nfe = :PAR_XML' );

_inserir.ParamByName('PAR_XML').DataType := ftString;

_inserir.ParamByName('PAR_XML').ParamType := ptInput;

_inserir.ParamByName('PAR_XML').Size := ;

_inserir.ParamByName('PAR_XML').AsString := ACBrNFe1.NotasFiscais.Items[0].XML;

João Henrique de Souza

 

Manual de como configurar o TortoiseSVN para não ficar mostrando a senha repetidas vezes (somente para commiters):

https://sourceforge.net/p/forge/community-docs/TortoiseSVN/

 

 

  • 2 anos depois...
Postado

Como faço para trazer o xml do banco para vizualizar o DANFE. não estou conseguind fazer, alguem pode me ajudar, uso delphi 7 e firebird 2.5

erikepvh, boa tarde.

 

Use a ferramenta de busca do fórum.

 

Segue: 

 

Fábio

  • Curtir 1
  • 2 anos depois...
Postado

No

No componente de ACBrMDFe1 estou usando a rotina.

  ACBrMDFe1  DM.CDS_MDNFeXML.AsString := UTF8Encode(Fprincipal.ACBrMDFe1.Manifestos[0].XML );

funciona normal, gostaria de saber qual o procedimento para alimentar o componente .ACBrMDFe1   com o xml gerado na base de dados.

 

  • Consultores
Postado
9 minutos atrás, LuisMaracaja disse:

No

No componente de ACBrMDFe1 estou usando a rotina.

  ACBrMDFe1  DM.CDS_MDNFeXML.AsString := UTF8Encode(Fprincipal.ACBrMDFe1.Manifestos[0].XML );

funciona normal, gostaria de saber qual o procedimento para alimentar o componente .ACBrMDFe1   com o xml gerado na base de dados.

 

Primeiro acho que este tópico é lá de 2013 ..se vai ai 3 anos..

você já está tratando de algo em outro lugar né não?

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Postado

  Julio consegui resolver aqui, obrigado pela ajuda meu amigo.

  A rotina ficou com esta modificação 

 

  if  UTF8Encode(DM.CDS_MDNFe.FieldByName('XML').Value)  <> '' then
  Begin
   XMLstream := TStringStream.Create( UTF8Encode(DM.CDS_MDNFe.FieldByName('XML').Value) );
   XMLstream.Position := 0;
   ACBrMDFe1.Manifestos.LoadFromStream(XMLstream);
  End
  else
    ACBrMDFe1.Manifestos.LoadFromFile(dm._diretorioNFe(DM.CDS_MDNFeDATAHORA_EMISSAO.value )+ DM.CDS_MDNFeCHAVE.value + '-mdfe.xml' );

  ACBrMDFe1.Consultar;

Funcionou !!!!!!

 

 

para ler o arquivo do acbr xml e gravando em um campo blob 

  //PEGA XML
  DM.CDS_MDNFeXML.AsString := UTF8Encode(Fprincipal.ACBrMDFe1.Manifestos[0].XML );
  //PEGA CHAVE
  DM.CDS_MDNFechave.VALUE := Copy(Fprincipal.ACBrMDFe1.Manifestos.Items[0].MDFe.infMDFe.ID, 5, 44);

 

 

 

  • Este tópico foi criado há 3754 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...