Salvar imagem no banco de dados Access

Delphi

16/05/2007

Estive pesquizando no forum como fazer para inserir uma imagem no banco e encontrei o seguinte código:

if OpenPictureDialog1.Execute Then
begin
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;


Só que, quando clico sobre a imagem ele apresenta um erro [b:eda0625eac]´Unknowm picture file extension(.JPG)´[/b:eda0625eac] Alterei a extenção da imagem para .BMP ae funcionou. Só que gostaria que fosse em JPG pois o tamanho é menor. Alguém tem uma dica ?


Vagner.oliveira

Vagner.oliveira

Curtidas 0

Respostas

Vagner.oliveira

Vagner.oliveira

16/05/2007

Estive pesquizando no forum como fazer para inserir uma imagem no banco e encontrei o seguinte código:
if OpenPictureDialog1.Execute Then
begin
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
Só que, quando clico sobre a imagem ele apresenta um erro [b:1fc8bc3946]´Unknowm picture file extension(.JPG)´[/b:1fc8bc3946] Alterei a extenção da imagem para .BMP ae funcionou. Só que gostaria que fosse em JPG pois o tamanho é menor. Alguém tem uma dica ?


Outro detalhe, quando coloco a imagem no banco ele aumenta de tamanho (nada de anormal até aqui), só que depois que eu a exclu-o o banco permanesse com o mesmo tamanho. Tem como diminuir o tamanho do banco depois ?


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

16/05/2007

Após várias tentativas descobri como colocar um arquivo .JPEG dentro de uma tabela access.

De quebra ele limita o tamanho da imagem em 15kb, para não atolar o banco de dados. :D

segue o código:

procedure TForm1.Button2Click(Sender: TObject);
var imagem: Tpicture;
   F: file of Byte;
begin
{No caso aqui, estou editando um regitro salvo} 
ADOTable1.Edit;

{Aqui verifica se a tabela esta sendo editada, se for no modo de inserção, este campo recebe "DsInsert"} 
if ADOTable1.State=DsEdit then
begin
if OpenPictureDialog1.Execute then
begin
imagem:= Tpicture.Create();
imagem.LoadFromFile(OpenPictureDialog1.FileName);
    AssignFile(F, OpenPictureDialog1.FileName);
    Reset(F);
    try
      if FileSize(F) > 15707 then
        ShowMessage(´O arquivo não pode ser maior que 15kb!´)
      else
        clipboard.Assign(imagem);
        DBImage1.PasteFromClipboard;
        imagem.Free;
    finally
      CloseFile(f);
    end;
end;
end
else
Showmessage(´Falta editar a tabela´);
end;



GOSTEI 0
Thiago Vidal

Thiago Vidal

16/05/2007

Cara, eu te recomendaria fazer assim:

No meu exemplo, eu tenho um Form com um Botao ´Carregar Imagem´ chamado ´Button1´ um OpenPictureDialog, um TImage, e um ClientDataSet para exemplificar como trabalhar com campos BLOB:

para salvar a imagem:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
    try
      ClientDataSet1.Edit;
      ClientDataSet1Imagem.LoadFromFile(OpenPictureDialog1.FileName);
      if (ClientDataSet1Imagem.Size > 15707) then
        raise Exception.Create(´O arquivo não pode ser maior que 15kb!´);

      ClientDataSet1.Post;
    except
      ClientDataSet1.Cancel;
      raise;
    end;
end;


e para carregar, no evento AfterScroll do DataSet:
procedure TForm1.ClientDataSet1AfterScroll(DataSet: TDataSet);
var
  jpg: TJPegImage;
  bs: TStream;
begin
  jpg := TJPegImage.Create;
  bs := ClientDataSet1.CreateBlobStream(ClientDataSet1Imagem, bmRead);
  try
    jpg.LoadFromStream(bs);
    Image1.Picture.Assign(jpg);
  finally
    bs.Free;
    jpg.Free;
  end;
end;


Não se esqueça de incluir a unit jpeg à sua lista de uses na seção implementation.

acho que assim o código fica bem mais limpo e elegante.


GOSTEI 0
Ricardo Araujo

Ricardo Araujo

16/05/2007

Pessoal gostei da dica de colocar imagem no banco de dados, pra mim serviu, muito obrigado...
GOSTEI 0
POSTAR