Enviar archivo e insertarlo en SQL Server

56 views
Skip to first unread message

Juan Carlos M

unread,
Feb 24, 2023, 12:51:22 PM2/24/23
to Comunidad de Visual Foxpro en Español

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



Reply all
Reply to author
Forward
0 new messages