Imagem JPG em banco Mysql

MySQL

Delphi

22/12/2018

Boa tarde estou tenta salvar uma imagem (.jpg) através de um DBimage em um banco Mysql tipo Blob e não estou conseguindo.
Em formato Bitmap eu consigo salvar no banco, mais preciso em .jpg.
Alguém pode me ajudar. Segue o código que estou usando.
procedure Tfrmpostagem.DBImage1Click(Sender: TObject);
var
  JPG:TJPEGImage;
  BMP:TBitmap;
  MS :TMemoryStream;
begin
  if OpenPictureDialog1.Execute then
  begin
    DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
    MS := TMemoryStream.Create;
    try
      DBImage1.Picture.Graphic.SaveToStream(MS);
      (DataModule1.TBpostagem.FieldByName('img1') as TBlobField).LoadFromStream(MS);
    finally
      MS.Free;
    end;
  end;
end;
Jordan Bernardes

Jordan Bernardes

Curtidas 0

Respostas

Fernando Wahl

Fernando Wahl

22/12/2018

Bom dia Jordan, como vai, essa rotina abaixo, grava a imagem completa (não so o caminho) no banco de dados no caso MYSQL...
Crie uma tabela no banco de dados e no campo onde vai a imagem coloque-o do tipo longblob(aqui que vc possivelmente está errando, não pode ser blob, tem que ser longblob).Porque usar longblob? Esse tipo de campo armezena arquivos binarios no nosso caso imagens com tamanho grandes..assim melhor que usar o blob ou mediumblob que armazenam imagem medias e pequenas respectivamente.

Na USES do form declare : DBTables , db

logo abaixo do uses declare:
const
OffsetMemoryStream : Int64 = 0;


//Busca a imagem geralmente atribuido no onclick de um botão
//Esse Timage é um componente da palete additional


if OPPicture.execute then
Timage.Picture.LoadFromFile(OPPicture.FileName);


// salva a imagem no banco
//
var sqltexto : string;
jpg1 : TJpegImage;
BEGIN
if OPPicture.FileName <>'' then
begin
jpg1 := TJpegImage.Create;
jpg1.LoadFromFile(OPPicture.FileName);
nome_da_tabela.FieldByName('nome_do_campo_da_imagem').Assign(jpg1);
jpg1.Free;
end
else
Begin
nome_da_tabela.FieldByName('nome_do_campo_da_imagem').value := '';
End;
END:

// Puxa imagem do banco e jogua para o Timage
//
procedure ExibeFoto(DataSet : TDataSet; BlobFieldName : String; ImageExibicao :
TImage);
begin
if not(DataSet.IsEmpty) and
not((DataSet.FieldByName(BlobFieldName) as TBlobField).IsNull) then
try
MemoryStream := TMemoryStream.Create;
Jpg := TJpegImage.Create;
(DataSet.FieldByName(BlobFieldName) as
TBlobField).SaveToStream(MemoryStream);
MemoryStream.Position := OffsetMemoryStream;
Jpg.LoadFromStream(MemoryStream);
ImageExibicao.Picture.Assign(Jpg);
finally
// Jpg.Free;
MemoryStream.Free;
end
else
ImageExibicao.Picture := Nil;
end;

//chama a procedure...colocar em algum evento eu uso no ONSHOW
ExibeFoto(nome_da_tabela,'nome_do_campo_da_imagem',Timage);


//Deletar a imagem do Timage..colocoque um botão deletar no onclick declare:

OpPicture.FileName := ''; // limpa o caminho do arquivo
Timage.Picture:=nil;
GOSTEI 0
POSTAR