Yo hago lo siguiente:
En la base de datos, el campo de la imagen lo genero como LONGTEXT, y para guardar y leer las imagenes hago lo siguiente:
ACTIVATE DIALOG oDlg CENTERED
if ! lContinuar; return(nil); endif
cPath=cGetFile("*.jpg;*.bmp",'Seleccione la imagen deseada')
cTemp = '.\bitmaps\temp001.tmp'
FMimeEnc(cPath,cTemp) //Esta es la función que nos ayuda agrabar la imagen como texto
if file(cTemp)
cMemo=memoread(cTemp)
cMemo=STRTRAN(cMemo,CRLF,'')
::oRsImagenes:AddNew()
TRY
::oRsImagenes:Fields("IdCliente"):Value := ::Id
::oRsImagenes:Fields("IdDocto"):Value := oSolicitud:IdDocto
::oRsImagenes:Fields("Descripcion"):Value := cNomSol
::oRsImagenes:Fields("Imagen"):Value := cMemo
::oRsImagenes:Update()
ferase(cTemp)
msginfo('Imagen salvada !', oApp:cEmpresa)
Catch oErr
Msginfo( 'La Imagen no puede ser agregada a la base de datos !',oApp:cEmpresa )
End
else
Msginfo( 'La Imagen no pudo ser guardada en la base de datos !',oApp:cEmpresa )
endif
osolicitud:End()
//::oRsImagenes:Requery()
Return Self
METHOD AbreImagen() CLASS TCliente //Para abrir una imagen GRABADA en la BD
local cMemo:='',cTemp:=''
SysRefresh()
CursorWait()
cMemo := ::oRsImagenes:Fields("imagen"):Value
if !empty(cMemo)
cTemp = '.\Bitmaps\temp002.tmp'
MEMOWRIT(cTemp,cMemo)
if file(cTemp)
cTemp2 = '.\Bitmaps\temp003.JPG'
FMimeDec(cTemp,cTemp2) //Esta es la funcion que nos permite leer la imagen en la base de datos
if file(cTemp2)
ShellExecute(GetActiveWindow(),"open",cTemp2)
else
MsgAlert("No ha sido posible leer la imagen de la base de datos" ,oApp:cEmpresa)
endif
else
MsgInfo("No existe la imagen del documento" ,oApp:cEmpresa)
endif
else
MsgInfo("No es posible abrir la imagen del Documento" ,oApp:cEmpresa)
EndIf
SysRefresh()
CursorArrow()
Return Self
Espero que te sea util.
Saludos
Ricardo E. Guardado Flores
Guadalajara, Jalisco Méx.