Firebird - gravar imagem na base via comando SQL

Top  Previous  Next

Bom, eu passei por isso também recentemente. Eu fiz assim para resolver:

 

1) Carrego a foto .JPG para um TImage, faço isso para o usuário visualizá-la 

antes de gravar no banco de dados;

 

2) Gravo a imagem do TImage no banco da seguinte maneira:

 

var

   msFoto: TMemoryStream;

begin

msFoto:=TMemoryStream.Create;

imFoto.Picture.Graphic.SaveToStream(msFoto);

msFoto.Position:=0;

qrOutros.Sql.Clear;

qrOutros.Sql.Add('UPDATE Far105 SET Foto=:PFoto WHERE Produto=1');

qrOutros.Prepare;

qrOutros.ParamByName('PFoto').LoadFromStream(msFoto, ftGraphic);

qrOutros.ExecSql;

qrOutros.UnPrepare;

 

 

Desta forma tenho certeza que funciona porque estou usando assim. Porém, em 

meu sistema eu não utilizo ClientDataSet, eu trabalho com os dados na 

memória e depois quando o usuário confirma eu gravo no banco de dados. Não 

sei se funcionaria se você tentar fazer de forma automática a leitura e 

gravação através de um campo de um TClientDataSet.

 

Só sei uma coisa, se você usar um TDBImage não vai funcionar porque o 

desgraçado não consegue ler JPG, apenas BMP. Então eu tive que usar um 

TImage.