Salvar imagem no banco de dados Access
Estive pesquizando no forum como fazer para inserir uma imagem no banco e encontrei o seguinte código:
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 ?
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
Curtidas 0
Respostas
Vagner.oliveira
16/05/2007
Estive pesquizando no forum como fazer para inserir uma imagem no banco e encontrei o seguinte código:
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 ?
if OpenPictureDialog1.Execute Then begin DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName); end;
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
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:
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
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:
e para carregar, no evento AfterScroll do DataSet:
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.
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
16/05/2007
Pessoal gostei da dica de colocar imagem no banco de dados, pra mim serviu, muito obrigado...
GOSTEI 0