[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