Esto funciona en FireBird. Adaptalo a tus necesidades.
Guardado en un campo Blob pero poniendo otro campo Varchar donde se guarda el formato de la foto: bmp o jpg
Se visualiza en TImage
Debes añadir en el uses del form la unit JPG.
Código Delphi
[-]
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;