Con el siguiente codigo guardo la imagen en un campo 'Text' en una base de Sql Server, esto lo logre gracias a la colaboracion de Victor Espina
SET PROCEDURE TO base64Helper ADDITIVE
LOCAL loFile AS "base64Helper",lcAnio, lcMes
loFile = CREATEOBJECT("base64Helper")
SQLEXEC(controlador,'BEGIN TRANSACTION')
lcAnio = "0"
lcMes = ""
FOR I = 101 TO 800
lcAnio = ALLTRIM(STR(I))
lcTipoArc = "D:\guias_escaneadas\0\"
lcPathArc = lcTipoArc+lcAnio+'\'
gnDbcnumber = ADIR(gaDatabase, (lcPathArc)+"*.TIF") && Create array
FOR nCount = 1 TO gnDbcnumber && Loop for number of databases
STORE ALLTRIM(gaDatabase(nCount,1)) TO lcArchivo
STORE SUBSTR(lcArchivo,1,LEN(ALLTRIM(lcArchivo))-4) TO lcArchivo1
lcFile = ALLTRIM(lcPathArc)+ALLTRIM(lcArchivo)
lcTpMovto = "GUIAS"
lcExtension = ALLTRIM(lcArchivo)
lcCodigo = ALLTRIM(lcArchivo1)
DO conectarmeco
cBase64 = loFile.encodeFile(lcFile)
cBse64 = SUBSTR(cBase64,1,LEN(cBase64)-1)
set textmerge on TO memvar lcStringSQL noshow
\insert into Imagenes1 (codigo1, nombre, contenido,tipo_movimiento,año,mes) values (?lcCodigo,?lcExtension,?cBase64,?lcTpMovto,?lcAnio,?lcMes)
set textmerge to
lnresultado1 = sqlexec(controlador,lcStringSQL,' ')
CREATE table mensaj1 (recurso m)
INSERT INTO mensaj1 (recurso) VALUES (lcStringSQL)
*suspend()
IF lnresultado1 = 1
SQLEXEC(controlador,'IF @@TranCount > 0 COMMIT')
SQLDISCONNECT(0)
ELSE
Dimension laError(1)
*** Desplegar mensaje de error
Messagebox("Error al intentar conectar:"+laError[2])
SQLEXEC(controlador,'IF @@TranCount > 0 ROLLBACK')
SQLDISCONNECT(0)
=MESSAGEBOX("Error en la actualizacion de los datos guardando.",16,"EdutSoft",m.duracion_mensajes)
ENDIF
ENDFOR
ENDFOR
RELEASE loFile
=MESSAGEBOX("Termino el proceso en el servidor")
Te comento que he trasladado mas de 70 Gigas y funciona excelente. Y esta es la forma que utilizo para extraer la imagen y mostrarla en un formulario
loFile = CREATEOBJECT("base64Helper")
SQLEXEC(controlador,'BEGIN TRANSACTION')
WAIT WINDOW "Espere un momento por favor...." NOWAIT
LOCAL loFile AS "base64Helper"
loFile = CREATEOBJECT("base64Helper")
lcCodigo = ALLTRIM(STR(VAL(THISFORM.numeroconvenio)))
set textmerge on TO memvar lcStringSQL noshow
\SELECT codigo1,contenido,nombre FROM Imagenes1 WHERE LTRIM(RTRIM(codigo1)) = ?lcCodigo
set textmerge to
DO conectarmeco
STORE sqlexec(controlador,lcStringSQL,'QARCHIVO') TO a
sqldisconnect(0)
IF a > 0
IF !EMPTY(QARCHIVO.contenido)
LOCAL cTarget,cBase64
cTarget = "C:\temp\" + RTRIM(QARCHIVO.nombre)
cBase64 = RTRIM(QARCHIVO.contenido)
loFile.decodeFile(cBase64, cTarget)
WAIT WINDOW "Espere un momento por favor...." NOWAIT
DO visualizar_pdf WITH cTarget
DELETE FILE (cTarget)
ELSE
=MESSAGEBOX('El Documento no esta escaneado, couniquese con el archivo',16,"Miempresa",m.duracion_mensajes)
ENDIF
ELSE
=MESSAGEBOX('El documento no esta disponible por el momento',16,"Miempresa",m.duracion_mensajes)
ENDIF
RELEASE loFile
Notaras que inmediatamente cargo el documento en el formulario lo borro de la carpeta temporal, esto lo hago para que por ningun motivo saque impresiones de la documentacion ya que es de caracter confidencial, por lo tanto el documento se ve en pantalla, pero en la pantalla no habilito los botenes de impresion, solo sen accesibles cuando el usuario tiene los roles de administrador o supervisor.
Saludos
Elkin Uribe