Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

Postado

Boa tarde,

Gostaria de saber se é possível abrir o arquivo XML da NFe que está armazenado em banco de dados direto no navegador padrão sem salva-lo antes em disco.

Estou utilizando o Delphi 10 com SQL Server.

Grato!

Postado
15 horas atrás, Juliomar Marchetti disse:

Creio que não pois o navegador sempre faz cache de algo em disco pra renderizar na tela.

Obrigado pelo retorno Juliomar.

Imaginei isso tb :)

Pode fechar o post. 🤝

 

  • Membros Pro
Postado
Em 21/02/2025 at 15:35, carlos_tedex disse:

Boa tarde,

Gostaria de saber se é possível abrir o arquivo XML da NFe que está armazenado em banco de dados direto no navegador padrão sem salva-lo antes em disco.

Estou utilizando o Delphi 10 com SQL Server.

Grato!

Por que vc não quer salvar em disco?
Mesmo que seja em uma pasta temporária e um arquivo temporário?
Geralmente os navegadores abrem arquivos salvos no disco, mas abrir sem salvar no disco seria algo complicado, mas uma alternativa que eu posso te dar é você criar um TTrvwNFe e exibir.
image.png.cb3d59103a87d1cb0905b8ede74a750d.png

  • Curtir 1

Valter Patrick

Gerente de Projetos na empresa CTEC

(33)98400-0936

GitHub: https://github.com/valterpatrick

Postado
Em 24/02/2025 at 09:14, valterpatrick disse:

Por que vc não quer salvar em disco?
Mesmo que seja em uma pasta temporária e um arquivo temporário?
Geralmente os navegadores abrem arquivos salvos no disco, mas abrir sem salvar no disco seria algo complicado, mas uma alternativa que eu posso te dar é você criar um TTrvwNFe e exibir.
 

Bom dia meu amigo,

O motivo de NÃO salvar em disco partiu do gerente da empresa... mas tem algo haver com uma migração que iram fazer para AWS.

Mas para esse caso de visualizar o XML vou salvar em disco mesmo na pasta TEMP.

E se realmente for necessário visualizar SEM salvar em disco eu tentarei usar via webbrowser ou edge como o @Juliomar Marchetti sugeriu ou usar um TreeView como vc sugeriu.

Grato pela atenção!

Postado
4 horas atrás, Juliomar Marchetti disse:

Cria um TStream ou TMemoryStream

carrega o xml nela e veja pra carregar no browser. dai não terá nada em disco

Assim que possível farei um teste meu amigo 🤝

Postado

Boa tarde, somente hoje pude fazer um teste... Usei o TWebBrowser mesmo.

Click do botão:

procedure Tform_principal.btn_view_xmlClick(Sender: TObject);
begin
  try
    FDQuery1.Close;
    FDQuery1.SQL.Text := 'SELECT ENT_XML FROM ENTRADA WHERE ENT_CODIGO = :ENT_CODIGO';
    FDQuery1.ParamByName('ENT_CODIGO').Value := edt_compra.Text;
    FDQuery1.Open;
    if FDQuery1.FieldByName('ENT_XML').AsString <> '' then
    begin
      form_preview_xml := Tform_preview_xml.Create(nil);
      try
        WBLoadHTML(form_preview_xml.WebBrowser1, FDQuery1.FieldByName('ENT_XML').AsString);
        form_preview_xml.ShowModal;
      finally
        form_preview_xml.Free;
      end;
    end;
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
end;

 

Função auxiliar: WBLoadHTML

uses
SHDocVw, ActiveX;

procedure Tform_principal.WBLoadHTML(WebBrowser: TWebBrowser; HTMLCode: string);
var
   sl: TStringList;
   ms: TMemoryStream;
begin
   WebBrowser.Navigate('about:blank') ;
   while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
    Application.ProcessMessages;

   if Assigned(WebBrowser.Document) then
   begin
     sl := TStringList.Create;
     try
       ms := TMemoryStream.Create;
       try
         sl.Text := HTMLCode;
         sl.SaveToStream(ms) ;
         ms.Seek(0, 0) ;
         (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)) ;
       finally
         ms.Free;
       end;
     finally
       sl.Free;
     end;
   end;
end;

 

NFe_99.png.27a78ec0846b8a73549c00a3532f6d29.png

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...