Extrair xml de campo blob

27/03/2023

0

Estou tentando extrair alguns "arquivos" XML que foram armazenados no BD em forma de texto em campos blob

BLOB SUB_TYPE 1 SEGMENT SIZE 100 CHARACTER SET WIN1252 COLLATE WIN1252


O BD é Fire Bird 2.5. (Não fui eu quem criei o banco).

Estou tentando extrair os arquivos XML de NFe e CFe. O código é o mesmo para ambos os documentos só troco o tipo na query.

Quando o documento é NFe ele funciona normal.

Quando o documento é CFe ele não funciona.

Se eu utilizar
ArqXML.Text := qry2.Fields[0].AsString; 


O arquivo salva em branco.

Se eu utilizar
 ArqXML.Text := qry2.Fields[0].Text; 


O arquivo salva com um (Memo) dentro.

Estou tentando resolver isso a alguns dias mas não consegui já tentei basicamente de tudo. Alguém tem alguma luz?

    try
      Conn1  :=  FConnectionManager.AcquireConn1('Conn1');
      Conn2  :=  FConnectionManager.AcquireConn2('Conn2');
      qry1   :=  TFDQuery.Create(nil);
      qry2   :=  TFDQuery.Create(nil);
      qry1.Connection  := Conn1;
      qry2.Connection  := Conn2;
      ArqXML  :=  TStringList.Create;
      { Encontra os XML que foram emitidos }
      try
        qry1.Close;
        qry1.SQL.Clear;
        qry1.SQL.Add('select'
                         + ' nf_numero,'
                         + ' nf_nfe_chave_identificacao'
                         + ' from nf'
                         + ' where NF_MODELO = ' + QuotedStr('SAT')
                         + ' and nf_cancelada = ' + QuotedStr('N')
                         + ' and nf_nfe_enviado = ' + QuotedStr('S')
                         + ' and NF_DTEMISSAO BETWEEN ' + QuotedStr(sDataInicial)  + ' AND ' + QuotedStr(sDataFinal));
        qry1.Open;
      except
        on E: Exception do begin
          ShowMessage('Erro: ' + E.Message );
          qry1.Close;
        end;
      end;
      { Caso encontre XML inicia exportação }
      if not qry1.IsEmpty then begin
        qry1.FetchAll;
        qry1.First;
        { Cria a pasta no desktop }
        if not DirectoryExists(uSysTools.DirDesktop + '\xml_sat') then begin
          ForceDirectories(uSysTools.DirDesktop + '\xml_sat');
        end;
        while not qry1.Eof do begin
          try
            qry2.Close;
            qry2.SQL.Clear;
            qry2.SQL.Add('select'
                                + ' NF_NFE_XML'
                                + ' from nf '
                                + ' where nf_nfe_chave_identificacao = ' + QuotedStr(qry1.Fields[1].Text)
                                + ' and nf_numero = ' + QuotedStr(qry1.Fields[0].Text)
                                + ' and nf_modelo = ' + QuotedStr('SAT'));
            qry2.Open;
          except
            on E: Exception do begin
              ShowMessage('Erro: ' + E.Message );
              qry2.Close;
            end;
          end;
          if not qry2.IsEmpty then begin
            ArqXML.Clear;
            ArqXML.Text := qry2.Fields[0].AsString;
            ArqXML.SaveToFile(uSysTools.DirDesktop + '\xml_sat' + qry1.Fields[1].Text + '.xml');
          end;
          qry1.Next;
        end;
      end;
    finally
      FreeAndNil(qry1);
      FreeAndNil(qry2);
      FreeAndNil(ArqXML);
      FConnectionManager.ReleaseConn1(Conn1);
      FConnectionManager.ReleaseConn2(Conn2);
    end;
Paulo

Paulo

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar