Foto Firebird FastReport

Delphi

12/02/2008

Olá comunidade...

Estou tentando montar um relatório em FastReport que exibirá as fotos dos clientes cadastrados.

As fotos estão em um campo do tipo Blob, banco Firebird. Porém quando chamo o relatório no FastReport aparece o erro: ´JPEG Error #51´. Procurei esse erro na net, mas não encontrei o que é.

Quando eu apago o objeto Picture do relatório ele aparece corretamento, porém sem as fotos, somente com os dados em texto.

Se alguém souber o que posso fazer, agradeço.


Leandro.schmitk

Leandro.schmitk

Curtidas 0

Respostas

Henrytpc

Henrytpc

12/02/2008

Qual versão do fast vc está usando??? trabalho com fast a + ou- 2 anos e nunca tive problema com imgs


outra pergunta cm vc esta inserindo estas imagens no banco???


GOSTEI 0
Leandro.schmitk

Leandro.schmitk

12/02/2008

Estou usando o Fast Report 4.3, e campo do tipo Blob do Firebird para armazenar as imagens. Utilizo uma função do Delphi pra gravar as imagens.


GOSTEI 0
Henrytpc

Henrytpc

12/02/2008

Estou usando o Fast Report 4.3, e campo do tipo Blob do Firebird para armazenar as imagens. Utilizo uma função do Delphi pra gravar as imagens.


Leandro,

sua versão é nova, não acredito q seja ela o problema.
poste a sua funcão de inserção para mim dar uma olhada


GOSTEI 0
Leandro.schmitk

Leandro.schmitk

12/02/2008

Utilizo a procedure abaixo:

procedure FtGrava(DataSet: TDataSet; BlobFieldName, FileName : PChar);
var
ext : string;
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(´Formado de imagem não suportado! Formato suportado: Jpeg ou Bitmap´);
Abort;
end;
try
Jpg := TJpegImage.Create;
MemoryStream := TMemoryStream.Create;
Bitmap := TBitmap.Create;
if (ext = ´.BMP´) then
begin
Bitmap.LoadFromFile(FileName);
Jpg.Assign(Bitmap);
Jpg.Compress;
end
else
Jpg.LoadFromFile(FileName);
Jpg.SaveToStream(MemoryStream);
MemoryStream.Position := OffsetMemoryStream;
(DataSet.FieldByName(BlobFieldName) as TBlobField).BlobType := ftTypedBinary;
(DataSet.FieldByName(BlobFieldName) as TBlobField).LoadFromStream(MemoryStream);
finally
MemoryStream.Free;
Bitmap.Free;
Jpg.Free;
end;
end;
end;


GOSTEI 0
Leandro.schmitk

Leandro.schmitk

12/02/2008

Mais uma observação.

Estou desconfiado que seja alguma falha no Banco de Dados, pois tentei montar um relatório no Crystal Report e ao inserir o campo foto, ocorre um erro no editor do Crystal.


GOSTEI 0
Henrytpc

Henrytpc

12/02/2008

eu insiro de forma mais simples e nunca tive problema com os bds que utilizo (SqlServer,Access,MSDE);
tenta implementar uma procedimento parecido com este

se for atualizar a tabela é so vc mudar a instrução SQL

procedure InserirFoto(Caminho:string);
var qry:TadoQuery;
begin
if caminho<>´´ then
begin
Qry:=TADOQuery.Create(Self);
Qry.Connection:=AdoConnection1;
Qry.SQL.Clear;
Qry.SQL.Text:=´Insert into tabela(img) values (:img)´;
QrySQL.Parameters.ParamByName(´img´).LoadFromFile(img1,ftBlob);
Qry.execSql;
qry.Free;
end;
end;

o exemplo é bem simples mas é assim que insiro imagens, espero que te ajude pq se for problema no Firebird não irei poder te ajudar pois não conheço

qualquer duvida poste ai


GOSTEI 0
POSTAR