Debes poner los campos persistentes en el dataset.
Para seleccionar el archivo de imagen que vas a guardar, puedes hacerlo por medio de un control OpenDialog.
En el siguiente ejemplo utilizo archivos JPG (necesitas hacer el include de jpeg.hpp)
El código que iria en el evento OnClick del botón que el usuario pulsaría para seleccionar el archvio seria algo asi (El objeto TImage se llama ima_empleado):
if (opndlg_archfoto->Execute())
ima_empleado->Picture->LoadFromFile(opndlg_archfoto->FileName);
Para grabar en la tabla de FireBird (Aqui estoy usando un TIBDataSet que se llama IBDS_perobra, y el nombre del campo persistente en donde se guarda la foto es FOTO_EMPLEADO)
IBDS_perobraFOTO_EMPLEADO->LoadFromFile(opndlg_archfoto->FileName);
Para recuperar la imagen de la tabla de FireBird :
if (IBDS_perobra->FieldByName("foto_empleado")->IsNull)
ima_empleado->Picture->Graphic = NULL;
else
{
TIBBlobStream *BS = new TIBBlobStream;
BS->Mode=bmWrite;
BS->LoadFromStream(IBDS_perobra->CreateBlobStream(IBDS_perobraFOTO_EMPLEADO , bmRead));
std::auto_ptr<TJPEGImage> Graphic(new TJPEGImage);
Graphic->LoadFromStream(IBDS_perobra->CreateBlobStream(IBDS_perobraFOTO_EMPLEADO, bmRead));
ima_empleado->Picture->Graphic = Graphic.get();
delete BS;
}
Y eso es todo