[firebase-br] ClientDataSet + Blob + Jpeg

Fabrício Fadel Kammer ffkammer em conchalnet.com.br
Sex Nov 28 09:35:31 -03 2008


Obrigado pelas respostas Kleber e Fausto.

Essa rotina era exatamente a que eu usava quando o acesso era feito 
diretamente através de TIBDataSet (sem o ClientDataSet).

Porém agora que acrescentei o ClientDataSet em meu sistema, para reduzir 
o tempo de transações abertas, não consigo recuperar as imagens que eu 
gravo.

Aparentemente a imagem é gravada de forma danificada, pois vejo que o 
campo tem conteúdo através do IBExpert, mas na hora que tento recuperar 
o conteúdo do campo (no momento do Jpg.LoadFromStream) recebo a mensage: 
"JPEG error #50"

To ficando louco com isso, meu banco tem inúmeras imagens e não posso 
atualizar meu clientes antes de corrigir essa deficiência.

Abraços e muito obrigado pelo auxílio que você estão me dando!

Fabrício


Kleber Caneva escreveu:
> Só pra constar, eu também uso DBExpress. Então pode ser problema do 
> componente de acesso qeu você está usando e não do CDS.
>
> []´s
>
> Kléber Caneva
>
>
> ----- Original Message ----- 
> From: "Fausto" <fausto.s.a em uol.com.br>
> To: <lista em firebase.com.br>
> Sent: Thursday, November 27, 2008 9:47 PM
> Subject: Re: [firebase-br] ClientDataSet + Blob + Jpeg
>
>
> Fabrício Fadel Kammer escreveu:
>   
>> Bom dia Kleber,
>>
>> Obrigado pelo retorno, mas realmente não consigo gravar e recuperar uma
>> imagem jpeg através do ClientDataSet.
>>
>> Será que mais alguém pode auxiliar-me? Preciso gravar e recuperar
>> arquivos JPEG dentro de campos Blob usando
>> ClientDataSet+DataSetProvider+IBQuery.
>>
>> Grato
>>
>> Fabrício
>>
>>     
> Amigo, não uso IBQuery, uso DBExpress faço da seguinte forma:
> Para gravar:
> var
>    BS: TStream;
>    Imagem: TJPEGImage;
> begin
>    with DataRepres do
>    begin
>      if CdsPar.State = dsEdit then
>      begin
>        FotoProDialog.Title := 'Selecione um logotipo';
>        if FotoProDialog.Execute then
>        begin
>          BS := CdsPar.CreateBlobStream((CdsParLOGO as TBlobField), BMWRITE);
>          Imagem := TJPEGImage.Create;
>          Imagem.LoadFromFile(FotoProDialog.FileName);
>          Imagem.SaveToStream(BS);
>          Logo.Picture.Assign(Imagem);
>          BS.FREE;
>          Imagem.Free;
>        end;
>      end;
>    end;
> end;
>
> Para exibir:
> var
>    BS: TStream;
>    Imagem: TJPEGImage;
> begin
>    with DataRepres do
>    begin
>      CdsPar.Open;
>      Logo.Picture := nil;
>      BS := CdsPar.CreateBlobStream((CdsParLOGO as TBlobField), BMREAD);
>      if BS.Size > 0 then // Verifica se o registro tem imagens gravadas
>      begin
>        Imagem := TJPEGImage.Create;
>        Imagem.LoadFromStream(BS);
>        Logo.Picture.Assign(Imagem);
>        BS.FREE;
>        Imagem.Free;
>      end;
>    end;
> end;
> Lembrando que:
> Logo é um TImage
> FotroProDialog é um TOpenDialog
>   





Mais detalhes sobre a lista de discussão lista