Extrair xml de campo blob
Estou tentando extrair alguns "arquivos" XML que foram armazenados no BD em forma de texto em campos blob
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
O arquivo salva em branco.
Se eu utilizar
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?
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
Curtidas 0