Hola:
No se si será por la forma de guardar la imagen o por qué pero te copio el código que uso por si te sirve de algo. A mi me funciona bien en FireBird.
Como puedes ver guardo en un campo blob la foto y en un campo varchar el formato, por si hay fotos en formato .jpg o .bmp
Para mostrar la foto guardada uso un TImage, y para imprimirla con QuickReport un TQRImage .
DM. es un DataModule
Código Delphi
[-]
uses
..... DB, Jpg, ...;
procedure TFDatos.Cargarfoto1Click(Sender: TObject);
var
m, f: TStream;
s: string;
begin
if dlgOpenPicture.Execute then
begin
DM.IBDSAlumnos.Edit;
m:= DM.IBDSAlumnos.CreateBlobStream(DM.IBDSAlumnosFOTO, bmWrite);
f:= TFileStream.Create(dlgOpenPicture.filename, fmOpenRead);
m.CopyFrom(f, f.Size);
s:= AnsiUpperCase(ExtractFileExt(dlgOpenPicture.FileName));
if s='.JPEG' then
s:= '.JPG';
DM.IBDSAlumnosFORMATOFOTO.AsString:= Copy(s,2,3);
DM.IBDSAlumnos.Post;
f.Free;
m.Free;
end
end;
procedure TFDatos.Borrarfoto1Click(Sender: TObject);
begin
ImageFoto.Picture.Assign(nil);
if (DM.IBDSAlumnos.State <> dsEdit) and (DM.IBDSAlumnos.State <> dsInsert) then
DM.IBDSAlumnos.Edit;
DM.IBDSAlumnosFOTO.Assign(nil);
DM.IBDSAlumnos.Post;
end;
procedure TFDatos.DSAlumnosFDataChange(Sender: TObject; Field: TField);
var
m: TStream;
begin
if DM.IBDSAlumnosFOTO.IsNull then
ImageFoto.Picture := nil
else
begin
if DM.IBDSAlumnosFORMATOFOTO.AsString = 'BMP' then
ImageFoto.Picture.Graphic:= TBitmap.Create
else if DM.IBDSAlumnosFORMATOFOTO.AsString = 'JPG' then
ImageFoto.Picture.Graphic:= TJpegImage.Create
else
Exit;
m:= DM.IBDSAlumnos.CreateBlobStream(DM.IBDSAlumnosFOTO, bmRead);
ImageFoto.Picture.Graphic.LoadFromStream(m);
m.Free;
end;
end;
Un saludo.