Ler campo Blob no Delphi 2010

Delphi

13/11/2009

Bom Dia pessoal, estou com problemas ao ler o campo blob de uma determinada tabela no Delphi 2010, ao compilar no Delphi 7 funciona normalmente. Tentei passar o subtipo do campo para 0 e mesmo assim não funcionou. O campo blob, estou utilizando para identificar a digital da leitura biométrica. A gravação da digital faz sem problemas.   Estou utilizando o conector DBExpress e o banco é o Firebird 2.1   Att. Diogo Henrique Contato
Diogo Contato

Diogo Contato

Curtidas 0

Respostas

Anderson

Anderson

13/11/2009

O Firebird aceita qualquer coisa (na gravação) em campos do tipo BLOB SubType 0 (ele grava e não reclama).
Mas na leitura o papo é outro pois, o componente que pega os dados deve receber eles já formatados.
Alguns drivers (Devart) fazem automaticamente alguns ajustes no retorno, outros não (e aí da creps).

Exemplo de uma rotina para recuperar a imagem:

.
.
.
Le_Imagem(ClientDataSetClientes,ImageFoto,'FOTO');
.
.
.


Procedure Le_Imagem(ob_cld:TClientDataSet;ob_img:TImage;sc_campo:string);

var
  ob_BlobStream:TClientBlobStream;
  ob_jpg:TJPegImage;

begin
    ob_jpg:=TJPegImage.Create;
    ob_BlobStream:=TClientBlobStream.Create(TBlobField(ob_cld.FieldByName(sc_campo)),bmRead);
    ob_jpg.LoadFromStream(ob_BlobStream);
    ob_img.Picture.Assign(ob_jpg);
    FreeAndNil(ob_BlobStream);
    FreeAndNil(ob_jpg);
end;

Importante:

O campo no arquivo .FDB que contém as fotos deve ser obrigatóriamente do tipo BLOB SubType 0

Trabalhe com apenas um tipo de imagem (jpg por exemplo) ou terá que tratar o retorno de cada tipo com uma
conversão diferente (bmp é um jeito, gif é outro, jpg ...)

GOSTEI 0
POSTAR