//cargar foto
procedure TFDatos.Cargarfoto1Click(Sender: TObject);
var
m, f: TStream;
s: string;
begin
//se abre picturedialog para cargar fichero foto que se coja
if dlgOpenPicture.Execute then
begin
//modo edición
DM.IBDSAlumnos.Edit;
//stream a partir campo Blob que contendrá la imagen
m:= DM.IBDSAlumnos.CreateBlobStream(DM.IBDSAlumnosFOTO, bmWrite);
//stream para acceder al archivo gráfico
f:= TFileStream.Create(dlgOpenPicture.filename, fmOpenRead);
//copiar de un stream a otro
m.CopyFrom(f, f.Size);
//coger formato foto y ponerlo en campo correspondiente
s:= AnsiUpperCase(ExtractFileExt(dlgOpenPicture.FileName));
if s='.JPEG' then
s:= '.JPG';
DM.IBDSAlumnosFORMATOFOTO.AsString:= Copy(s,2,3);
DM.IBDSAlumnos.Post;
//destruir streams
f.Free;
m.Free;
end
end;
--------
//borrar foto
procedure TFDatos.Borrarfoto1Click(Sender: TObject);
begin
//borrar imangen
ImageFoto.Picture.Assign(nil);
//borrar foto del campo blob
if (DM.IBDSAlumnos.State <> dsEdit) and (DM.IBDSAlumnos.State <> dsInsert) then
DM.IBDSAlumnos.Edit;
DM.IBDSAlumnosFOTO.Assign(nil);
DM.IBDSAlumnos.Post;
DM.IBDSAlumnos.Edit;
end;
-------
//mostrar imagen (evento on change de datasource)
procedure TFDatos.DSAlumnosFDataChange(Sender: TObject; Field: TField);
var
m: TStream;
begin
if DM.IBDSAlumnosFOTO.IsNull then
//para registros sin foto poner imagen vacia
ImageFoto.Picture := nil
else
begin
if DM.IBDSAlumnosFORMATOFOTO.AsString = 'BMP' then
//si es formato BMP
ImageFoto.Picture.Graphic:= TBitmap.Create
else if DM.IBDSAlumnosFORMATOFOTO.AsString = 'JPG' then
//si es formato JPG
ImageFoto.Picture.Graphic:= TJpegImage.Create
else
Exit;
//copiar los datos desde la tabla con un stream
m:= DM.IBDSAlumnos.CreateBlobStream(DM.IBDSAlumnosFOTO, bmRead);
ImageFoto.Picture.Graphic.LoadFromStream(m);
m.Free;
end;
end;