miércoles, 16 de abril de 2008

Insertar archivo binario desde vfp a SQL Server en campo IMAGE o TEXT

El siguiente código permite agregar archivos binarios a una registro en una tabla de base de datos SQL Server desde VFP. Cabe aclarar que el campo es de tipo Image para evitar perdidas de conversión. Para realizar lo siguiente lo explicaremos con un ejemplo primero en un campo de tipo Text y a continuación en uno Image:

Primero creamos un tabla en SQL server

create table archivos (TipoText text, tipoImage image)

Luego creamos una conexión desde fox a sql server que llamaremos "con"

El string de conexión

Conn_Str=[Driver={SQL Server};Server=]+ 'tuServer';

+[;UID=]+ 'usuario' + [;PWD=] + 'password' + [;Database=] + 'tuBase'

Conectamos

con = SQLSTRINGCONNECT(Conn_Str)


Ahora el código fox para insertar un archivo a un campo TEXT

* insertar
l_datos = FILETOSTR('c:\temp\100_1160.JPG') && para evitar las '
SQLEXEC(con, "insert into archivos (TipoText)values (?l_datos)")

*Recuperar
SQLEXEC(con, 'select * from archivos', 'cursor')
STRTOFILE(cursor.tipotext , 'c:\temp\resultado.JPG')

ahora si ese mismo código lo utilizas con un campo ntext no funciona.

o IMAGE (Mejor) siguiendo estos truquillos

*Insertar

caracteres=FILETOSTR( 'c:\temp\100_1160.JPG' )
binario=CREATEBINARY(caracteres)
CURSORSETPROP("MapBinary",.F.,0) && sino la instrucción siguiente te va a dar error
res = SQLEXEC(1, "update archivos set tipoImage=?binario")
CURSORSETPROP("MapBinary",.T.,0)

*Extraer

SQLEXEC(con, 'select * from archivos', 'cursor')
STRTOFILE( cursor.tipoImage , 'c:\temp\resultado3.JPG')

No hay comentarios: