Saludos
He estado intentando enviar un archivo que debe insertarse a una Base de datos en SQL Server, con VFP 6 pero mi servidor esta en la nube y mi archivo en la máquina cliente, el esquema es cliente servidor.
para insertar el archivo a la base de datos encontré algo como esto:
INSERT INTO myTable(Document) SELECT * FROM OPENROWSET(BULK N'C:\Image1.jpg', SINGLE_BLOB) AS Document
No me mermiten usar vistas remotas de Fox pero haciendo una prueba con
REPLACE y el valor de mi archivo ya convertido a Base 64 y no hace nada, no envia error, pero no guarda nada en la BD:
**-------------------------------------------------------------------------------------------------------------
*** ---------- ENVIANDO ARCHIVO A SQL SERVER CON VISTA REMOTA DE FOX
**--------------------------------------------------------------------------------------------------------------
Local vcArchivo
SET SAFETY OFF
set database to bdsicj
vcArchivo = getfile('pdf', 'Archivos Prueba', 'Seleccionar', 0, 'Buscar archivo para prueba')
if empty(vcArchivo)
return
endif
select 0
LOWER(RIGHT(vcArchivo, 4)) = '.pdf'
IF LOWER(RIGHT(vcArchivo, 4)) = '.pdf'
ELSE
=messagebox("No es una extensión valida.", 48, "Error al incluir el documento")
RETURN
ENDIF
extension = LOWER(RIGHT(vcArchivo, 4))
IF extension = '.pdf'
extension = RIGHT(extension, 3)
ENDIF
if isnull(extension)
=messagebox("Ocurrio un error, vuelva a intentarlo nuevamente.", 48, "Error al incluir el documento")
return
endif
pcExtDocto = extension
thisForm.txtIniOp.value = DATETIME()
IF USED('TEST_SPEED')
SELECT TEST_SPEED
USE
ENDIF
WAIT WINDOW NOWAIT 'Insertando Documento en Base de Datos'
USE MyBD!TEST_SPEED IN 0
lcNomFile = SUBSTR(vcArchivo,4,12)
if recc() = 0
insert into TEST_SPEED (nameFile,loadDate) ;
values (lcNomFile,thisForm.txtIniOp.value)
endif
arc = sys(5)+curdir()+'pla\'
extension = '.'+extension
archiv = arc + lcNomFile + extension
lcFileString = FILETOSTR(vcArchivo)
=STRTOFILE(lcFileString, archiv)
replace sentFile with
lcFileString
ERASE (archivZ)
ERASE (archiv)
IF !tableupdate(.T., .T., 'TEST_SPEED')
=Messagebox('No se pudo insertar el documento',16, 'Error')
endif
use in TEST_SPEED
**-------------------------------------------------------------------------------------------------------------
**-------------------------------------------------------------------------------------------------------------
No manda ERROR pero no inserta el archivo.
Con CONECTION STRING Intente con lo siguiente:
vcArchivo = getfile('pdf', 'Documentos', 'Seleccionar', 0, 'Buscar Documento')
lsFile = FILETOSTR(vcArchivo)
lcContent = STRCONV(lsFile,9)
vcInsertFile = "insert into TEST_SPEED (nameFile,sentFile,loadDate) values ('" + lcNomFile + "','" + lcContent + "','" + DTOC(thisForm.txtFinOp.value) + "')"
vnressql = SQLEXEC(myConnection, vcInsertFile, 'DocIns')
IF vnressql=-1
= MESSAGEBOX('ERROR AL INTENTAR INSERTAR ARCHIVO', 48, 'Conexión al Servidor Regional')
RETURN
ENDIF
Tampoco manda error, pero tampoco inserta.
VFP 6 no tiene de manera nativa la forma de convertir a Base64 a diferencia de VFP 9 lo intenté también con la librería Base64 de Chilkat sin éxito
Agradezco de antemano su apoyo para resolver este problema