Ir para conteúdo
  • Cadastre-se

dev botao

[IBX] Delphi 2010 - Blobs


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

Recommended Posts

Boa tarde,

Estou com um problema a alguns dias com um código que funcionava normalmente no Delphi 7.

with SP_DESENVOLVIMENTO_ANEXOS do
  begin
  Close;
  ParamByName('DSA_CODIGO').AsInteger  := 0;
  ParamByName('DES_CODIGO').AsInteger  := SP_DESENVOLVIMENTO.Tag;
  ParamByName('FUN_CODIGO').AsInteger  := CodFuncionario;
  ParamByName('DSA_NOME').AsString     := DSA_NOME.Text;
  ParamByName('DSA_ARQUIVO').LoadFromFile(OpenDialog1.Files.Strings[0], ftBlob);
  ParamByName('DSA_EXTENSAO').AsString := Extensao(OpenDialog1.Files.Strings[0]);
  ExecProc;
  end;

 

O sistema até grava informações no blob mas ao tentar exportar o arquivo é como se o mesmo estivesse corrompido ou algo do genero.

Se tento extrair do banco pelo .exe gerado pelo Delphi 2010 um arquivo que foi "gravado" com o exe Delphi 7 funciona normalmente, logo acredito

que o problema não seja na extração e sim no gravar.

De qualquer forma segue o código para extrair:

 

var
f2 : TFileStream;
FileStream:TStream;

try
  f2 := TFileStream.Create('C:\TEMP\TEMP.'+QryAnexos.FieldByName('DSA_EXTENSAO').AsString, fmCreate or fmOpenWrite);
  FileStream:=QryAnexos.CreateBlobStream(QryAnexos.Fieldbyname('DSA_ARQUIVO'),bmRead);
  f2.CopyFrom(FileStream, 0);
finally
  FileStream.Free;
  f2.free;
end;

 

Alguém passou por isso ou pode dar alguma dica?

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

De uma olhada nesses links:

 

Caso não consiga, de uma pesquisada no Google.

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Link para o comentário
Compartilhar em outros sites

Bom dia Isaque,

Perdi um dia e meio pesquisando e infelizmente suas dicas também não funcionaram bem pra mim então tive que fazer uma gambiarra...

if OpenDialog1.Execute then
   with SP_DESENVOLVIMENTO_ANEXOS do
      begin
      Close;
      ParamByName('DSA_CODIGO').AsInteger  := 0;
      ParamByName('DES_CODIGO').AsInteger  := Self.Tag;
      ParamByName('FUN_CODIGO').AsInteger  := CodFuncionario;
      ParamByName('DSA_NOME').AsString     := DSA_NOME.Text;
      ParamByName('DSA_ARQUIVO').Value     := Null;
      ParamByName('DSA_EXTENSAO').AsString := Extensao(OpenDialog1.Files.Strings[0]);
      ExecProc;
      end;

GravarBlob('DESENVOLVIMENTO_ANEXOS', 'DSA_ARQUIVO', OpenDialog1.Files.Strings[0], 'WHERE DSA_CODIGO = '+SP_DESENVOLVIMENTO_ANEXOS.ParamByName('CODIGO').AsString);
procedure GravarBlob(Tabela,Campo, arquivo, condicao :string);
var
zConexao:TZConnection;
zQuery:TZQuery;
zparametros : TIniFile;
begin
try
   zparametros := TIniFile.Create(ExtractFilePath(Application.ExeName)+'caminhoZeos.ini');
   zConexao := TZConnection.Create(Application);
   zConexao.HostName := zParametros.ReadString('CONEXAO', 'IP', '127.0.0.1');
   zConexao.Port     := StrToIntDef(zParametros.ReadString('CONEXAO', 'PORTA', '3050'), 0);
   zConexao.Database := zParametros.ReadString('CONEXAO', 'DataBase', 'C:\Bancos\Simbolus\BANCO.FDB');
   zConexao.Protocol := zParametros.ReadString('CONEXAO', 'Protocol', 'firebird-2.5');
   zConexao.User     := zParametros.ReadString('USUARIO', 'USER', 'SYSDBA');
   zConexao.Password := zParametros.ReadString('USUARIO', 'PASSWORD', 'masterkey');
   zConexao.Connect;

   try
      zQuery := TZQuery.Create(Application);
      zQuery.Connection := zConexao;
      zQuery.SQL.Add('UPDATE ' + Tabela+' SET ' + Campo + ' = :VALOR');
      zQuery.SQL.Add(condicao);
      zQuery.ParamByName('VALOR').LoadFromFile(arquivo, ftBlob);
      zQuery.ExecSQL;
   finally
      zQuery.Free;
   end;
finally
   if ZConexao.Connected then
      ZConexao.Disconnect;
   ZConexao.Free;
   zparametros.Free;
end;

Simplesmente gravo o que já gravava com o IBX mas o Blob com o  Zeos e funcionou perfeitamente.

 

Ainda aceito dicas para não ter que fazer dessa forma,rs

 

abraço

Editado por Marcos Gerene

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Moderadores

A dica que você mesmo pode comprovar é que o IBX foi feito para interbase e não para Firebird!

a partir do momento que utilizou o Zeos ele usa o cliente do firebird e faz exatamente o que precisa vindo a funcionar!

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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...