[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