[firebase-br] RES: Fwd: Gravando FOTO utilizando ClientDataSet
José Aparecido da Silva
joseasilva em bol.com.br
Qua Nov 29 09:18:12 -03 2006
Fiz algumas alterações na Unit desenvolvida por Enio Marconi, da lista
Delphi-Br e fiz os testes e funcionou adequadamente.
Se servir aos amigos da lista segue abaixo a unit já modificada
[ ] ‘s
Jose Aparecido da Silva
**********************************************************
unit U_BlobImageFB;
interface
uses Jpeg, Graphics,ExtDlgs,Classes,DB,SysUtils,ExtCtrls,Dialogs,Consts;
type
TTipoImagem = (tiBitmap, tiJpeg);
procedure ExibeFoto(DataSet : TDataSet; BlobFieldName : String;
ImageExibicao : TImage);
procedure GravaFoto(DataSet : TDataSet; BlobFieldName, FileName :
String);
procedure ExcluiFoto(DataSet : TDataSet; BlobFieldName : String;
ImageExibicao : TImage);
procedure ExportaFoto(DataSet : TDataSet; BlobFieldName, FileName :
String; TipoImagem : TTipoImagem);
implementation
procedure ExibeFoto(DataSet : TDataSet; BlobFieldName : String;
ImageExibicao : TImage);
var
BlobStream : TStream;
JpegImage : TJPEGImage;
bitmap:TBitMap;
begin
BlobStream :=
DataSet.CreateBlobStream(DataSet.FieldByname(BlobFieldName), bmRead);
if BlobStream.Size <> 0 then
begin
JpegImage := TJPEGImage.Create;
try
JpegImage.LoadFromStream(BlobStream);
ImageExibicao.Picture.Assign(JpegImage);
ImageExibicao.Center:=true;
finally
BlobStream.Free;
JpegImage.Free;
end;
end
else
begin
Bitmap:=TBitMap.Create;
Try
Bitmap.Width:=1;
Bitmap.Height:=1;
ImageExibicao.Picture.Assign(BitMap);
ImageExibicao.Center:=false;
finally
Bitmap.Free;
BlobStream.Free;
end;
end;
end;
procedure GravaFoto(DataSet : TDataSet; BlobFieldName, FileName : String);
var
ext : string;
JpegImage : TJPEGImage;
bitmap:TBitMap;
begin
if (DataSet.State in [dsEdit,dsInsert]) then
begin
ext := UpperCase(ExtractFileExt(FileName));
if (ext <> '.BMP') and (ext <> '.JPG') and (ext <> '.JPEG') then
begin
raise EAccessViolation.Create('Formato de imagem não suportado!
Formato suportado: Jpeg ou Bitmap');
Abort;
end;
try
JpegImage := TJpegImage.Create;
Bitmap := TBitmap.Create;
if (ext = '.BMP') then
begin
Bitmap.LoadFromFile(FileName);
JpegImage.Assign(Bitmap);
JpegImage.Compress;
end
else
begin
JpegImage.LoadFromFile(FileName);
end;
JpegImage.SaveToFile('FIGURA.JPG');
(DataSet.FieldByName(BlobFieldName) as
TBlobField).LoadFromFile('FIGURA.JPG');
finally
Bitmap.Free;
JpegImage.Free;
end;
end;
end;
procedure ExcluiFoto(DataSet : TDataSet; BlobFieldName : String;
ImageExibicao : TImage);
var
bitmap:TBitMap;
begin
if (DataSet.State in [dsEdit,dsInsert]) and
not((DataSet.FieldByName(BlobFieldName) as TBlobField).IsNull) then
begin
(DataSet.FieldByName(BlobFieldName) as TBlobField).Clear; // para
limpar o TImage use // Image1.Picture := Nil;
Bitmap:=TBitMap.Create;
Try
Bitmap.Width:=1;
Bitmap.Height:=1;
ImageExibicao.Picture.Assign(BitMap);
ImageExibicao.Center:=false;
finally
Bitmap.Free;
end;
end;
end;
procedure ExportaFoto(DataSet : TDataSet; BlobFieldName, FileName : string;
TipoImagem : TTipoImagem);
begin
// SERÁ IMPLEMENTADO FUTURAMENTE // ME FALTA TEMPO :)
end;
end.
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Eliomar
Enviada em: quarta-feira, 29 de novembro de 2006 07:27
Para: FireBase
Assunto: Re: [firebase-br] Fwd: Gravando FOTO utilizando ClientDataSet
Obrigado mas já fiz assim tb e não gravou no banco
poderem as fotos que já estavam gravadas eu consigo
retirar do banco blz....
veja como eu tentei fazer tb.
procedure TForm1.Button1Click(Sender: TObject);
var
BlobMST: TMemoryStream;
ImageJPG: TJPEGImage;
begin
//salvando a foto
ImageJPG := TJPEGImage.Create;
BlobMST := TMemoryStream.Create;
ImageJPG.Assign(Image1.Picture);
ImageJPG.SaveToStream(BlobMST);
BlobMST.Position := 0;
ClientDataSet.Params.ParamByName('IP_FOTO').LoadFromStream(BlobMST,
ftBlob);
ImageJPG.Free;
BlobMST.Free;
tbAux.Execute;
Showmessage('concluido');
end;
Da a mensagem de concluído sem problemas porem no banco não fica gravada a
imagem.
se eu for pelo IBExpert e olhar no banco tem alguma coisa lá porem não é
imagem correta...
Agradecido.
Eliomar,
MSN - eliomar em promediconet.com.br
Soft-Data Softwares Administrativos
hptt://www.promediconet.com.br
------------- Segue mensagem original! -------------
De: Junior <jr.primeiro em gmail.com>
Data: Tue, 28 Nov 2006 19:49:59 -0300
Para: FireBase <lista em firebase.com.br>
Assunto: Re: [firebase-br] Fwd: Gravando FOTO utilizando ClientDataSet
Olá Eliomar!
Já tentou criar uma variável TMemoryStream, carregar esta variável com
o conteúdo deseja e depois salvar no banco utilizando TBlobField para
salvar no banco de dados?
Para trazer (tirar do banco) eu faço o processo inverso. Tiro do
TBlobField (colocando em um TMemoryStream) e depois escolho o local
onde quero que o TMemoryStream salve.
Bem tranquilo de se fazer!
Espero ter ajudo :)
Abraço
Jr
2006/11/28, Dheyson Wildny <dheysonws em gmail.com>:
> Cara eu aconselho vc fazer uma função na aplicação para gravar as
> imagens como "binário"... daí vc aplica a função e grava normalmente como
um
> arquivo qualquer, e na hora da consulta vc desfaz o processo!
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
--
Junior
T.I. - Tecnologia da Informação
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista