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