[firebase-br] ClientDataSet + Blob + Jpeg

Kleber Caneva kdcc em terra.com.br
Seg Nov 24 14:00:35 -03 2008


Eu tenho usdo assim e funciona muito bem

var Bmp: TBitMap;
    JPeg: TJpegImage;
    Gif: TJvGIFImage;
begin
  inherited;
  If not OpenPictureDialog1.Execute then
    Exit;

  JPeg := TJPEGImage.Create;
  Gif  := TJvGIFImage.Create;
  Bmp  := TBitMap.Create;
  try
    If UpperCase(ExtractFileExt(OpenPictureDialog1.FileName)) = '.JPG' then
      begin
        JPeg.LoadFromFile(OpenPictureDialog1.FileName);
        Bmp.Assign(JPeg);
      end
    else If UpperCase(ExtractFileExt(OpenPictureDialog1.FileName)) = '.GIF' 
then
      begin
        Gif.LoadFromFile(OpenPictureDialog1.FileName);
        Bmp.Assign(Gif);
      end
    else
      begin
        Bmp.LoadFromFile(OpenPictureDialog1.FileName);
      end;

    if not(dtmUsuario.cdsPadrao.State in [dsInsert,dsEdit]) then
      dtmUsuario.cdsPadrao.Edit;
    dtmUsuario.cdsPadraoASSINATURA.Assign(Bmp);
  except
    Application.HandleException(nil);
  end;
  JPeg.Free;
  Gif.Free;
  Bmp.Free;
end;

[]´s

Kléber Caneva

----- Original Message ----- 
From: "Fabrício Fadel Kammer" <ffkammer em conchalnet.com.br>
To: "Lista Firebase" <lista em firebase.com.br>
Sent: Friday, November 21, 2008 3:15 PM
Subject: [firebase-br] ClientDataSet + Blob + Jpeg


Boa tarde à todos!

Terminando a migração para o ClientDataSet encontrei mais um problema e
não consigo achar a solução em lugar nenhum. O problema agora é eu
conseguir armazenar uma imagem JPEG em um campo Blob do clientdataset
(enquanto usava TIBDataSet funiconava perfeitamente).

Uso o código abaixo para gravar a imagem no banco:

var
  MemStream: TStream;
  Jpg: TJpegImage;
begin
  if dlgAbrir.Execute then
  begin
    MemStream :=
dmTabPrincipal.cdsDadosProprio.CreateBlobStream((dmTabPrincipal.cdsDadosProprioLogotipo
as TBlobField),bmWrite);
    Jpg := TJPEGImage.Create;
    Jpg.LoadFromFile(dlgAbrir.FileName);
    Jpg.SaveToStream(MemStream);
    MemStream.Free;
    Jpg.Free;
  end;
end;

E para recuperar a imagem:

MemStream := dmTabPrincipal.cdsDadosProprio.CreateBlobStream( (
cdsDadosProprioLogotipo as TBlobField ) , bmRead );
Jpg := TJpegImage.Create;
try
  Jpg.LoadFromStream(MemStream);
  imgLogotipo.Picture.Assign( Jpg );
finally
  Jpg.Free;
  MemStream.Free;
end;


Logo em seguida ao gravar o Logo no banco de dados através do
ClientDataSet se eu carregar a imagem usando o método acima funciona
corretamente, porém após fechar o ClientDataset e abrí-lo novamente não
consigo mais carregar a imagem, recebo o erro: "JPEG error #50".

Alguém saberia como solucionar esse problema?

Obrigado

Fabrício

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista