Filestream para guardar imagenes en SQL SERVER 2008 R2

3,504 views
Skip to first unread message

ARVIOS

unread,
Oct 30, 2012, 3:08:04 PM10/30/12
to publice...@googlegroups.com
Hola Amigos: Ya realicé todos los procedimientos para guardar archivos por FileStream en SQL y tambien ya creé la tabla para que acepte este tipo de archivos, pero no he podido

Alguien me puede ayudar de cómo guardar una imágen en una BD SQL SERVER 2008 R2 con FileStream y cómo visualizarla desde VFP?

Agradezco su ayuda,

Arnoldo

MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Oct 30, 2012, 4:15:23 PM10/30/12
to publice...@googlegroups.com
Hola amigo, yo guardo imágenes en mi base de datos de SQL Server 2008R2,2005,2012, El campo tiene que ser de tipo image 
NomFoto = "ruta donde esta tu imagen"
cValFoto = CREATEBINARY(FILETOSTR(NomFoto))
se esa manera con un update puedes guardar la imagen que deseas

*--- para mostrarlo lo único que tienes que hacer lo siguiente
STRTOFILE(CAST(TuCampoimagen as Blob),cRuta)

Thisform.miigm.picture = cRuta


Pd.: Descargate mi grilla que tiene multiples funciones como filtrar, multiseleccion, búsqueda, etc del siguiente link http://www.developervfp.blogspot.com/p/gridlibre-v35.html. Ahora también puedes bajarte mi ultima herramienta Busqueda Incremental con un TEXTBOX http://developervfp.blogspot.mx/p/busqueda-incremental-con-un-textbox.html  las herramientas viene con código fuente, ojo no hacer mal uso por favor. 


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
San Juan del Rio - Queretaro - Mexico 
Nextel.: 52*133750*16
rycjesusrj @ hotmail.com 
 

Miguel Antúnez

unread,
Oct 30, 2012, 4:47:03 PM10/30/12
to publice...@googlegroups.com
Hola Arvios,
me puse a investigar un rato, ya que me quede con la duda, 
ahí te va la solución.

Introducción al almacenamiento mediante FILESTREAM

Cómo habilitar FILESTREAM

Cómo crear una base de datos habilitada para FILESTREAM

Cómo crear una tabla para almacenar datos FILESTREAM

Administrar datos FILESTREAM usando Transact-SQL


Hasta aquí full sql server

VFP
grabando archivos
lc=cast(filetostr(getpict()) as blob)

?sqlexec(nc_x,"INSERT INTO Archive.dbo.Records VALUES (newid (), 4,?m.lc)")

recuperando datos grabados
=SQLEXEC(NC_X,"select * from Archive.dbo.Records")

mostrando datos grabados
thisform.objpicture.Pictureval=cast(chart as blob)

Saludos.



--
 
 
 



--
Miguel Angel Antúnez Camones
mant...@gmail.com


mpulla

unread,
Oct 30, 2012, 5:07:33 PM10/30/12
to publice...@googlegroups.com

Hola.

Muy buena solucion de Miguel, no conocia la propiedad Pictureval.

Otra alternativa para subir la imagen sin usar filetostr sería:

lcsql = [Insert into Pruebas.dbo.PrbFilstran (cDoc) SELECT i.* FROM ] + ;
        [OPENROWSET(BULK N'D:\Temp\VaneR.jpg', SINGLE_BLOB) AS i]

Russvell, los campos image va a ser descontinuados en futuras versiones.

Saludos.
Mauricio

xiloa

unread,
Mar 7, 2013, 10:23:19 AM3/7/13
to publice...@googlegroups.com
Buenos dias amigo

Probe guardar la imagen en sql server y me lo hiso sin ningun problema, en donde he tenido dificultades es en la consulta de la misma, ya que me da error en cRuta
no se a que se refiere, no se si es la ruta de la imagen cuando se grabo en el primer paso o que,,, te solicito ayuda por favor para poder avanzar en este paso que no me ha sido posible de pasar,,


de antemano mil gracias por tu ayuda

xiloa

xilo...@gmail.com

Miguel Antúnez

unread,
Mar 7, 2013, 10:49:00 AM3/7/13
to publice...@googlegroups.com
Prueba con esta parte.
VFP
grabando archivos
lc=cast(filetostr(getpict()) as blob)

?sqlexec(nc_x,"INSERT INTO Archive.dbo.Records VALUES (newid (), 4,?m.lc)")

recuperando datos grabados
=SQLEXEC(NC_X,"select * from Archive.dbo.Records")

mostrando datos grabados
thisform.objpicture.Pictureval=cast(chart as blob)

Saludos.

Daniel Sánchez

unread,
Mar 7, 2013, 12:24:49 PM3/7/13
to Comunidad de Visual Foxpro en Español
Una pregunta Miguel Antúnez, porque haces esto

thisform.objpicture.Pictureval=cast(chart as blob)

yo normalmente una vez obtenido los datos en la variable me lo muestra con el código así

thisform.objpicture.Pictureval=chart

e igualmente al grabar

lc=filetostr(getpict())

?sqlexec(nc_x,"INSERT INTO Archive.dbo.Records VALUES (newid (), 4,?m.lc)")

Pero eso si el campo a actualizar en sqlserver es del tipo text, pero siempre lo paso a base64 al grabar y lo paso a 32 al recuperar.


Saludos
--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú

Miguel Antúnez

unread,
Mar 7, 2013, 2:30:40 PM3/7/13
to publice...@googlegroups.com
En este caso no estamos metiendo en un campo de una tabla, si no en una nueva forma de manejar archivos en la base de datos , con la tecnología Filestream, hace que tu base de datos no crezca en tamaño, si no que guarda los archivos como si fuera en una unidad de red compartida, pero para acceder a esa información tienes que hacerlo vía SQLSERVER. 

Saludos.

Daniel Sánchez

unread,
Mar 8, 2013, 11:50:52 PM3/8/13
to Comunidad de Visual Foxpro en Español
Ok Miguel, con tu explicación me quedo más claro el tema del filestream con sqlserver, algo que desconocía por completo,se agradece por tomarte el tiempo de explicarlo

Saludos

Jairo Miranda

unread,
Mar 9, 2013, 1:00:33 AM3/9/13
to publice...@googlegroups.com

Interesante.. hay alguna forma para que el archivo FPT no crezca tanto?

 

JM

Miguel Antúnez

unread,
Mar 9, 2013, 8:08:28 PM3/9/13
to publice...@googlegroups.com
A que archivo FPT refieres?.

Douglas Sánchez

unread,
Mar 9, 2013, 8:17:43 PM3/9/13
to publice...@googlegroups.com
Creo que se refiere a dbf fpt los memos de las tablas nativas de vfp, pero aca se esta hablando de SQL SERVER.

Saludes
--
Ing. Douglas Sánchez Guillén
      Consultor Informatico
Claro: 505 88495476

Mario Escudero

unread,
Feb 23, 2016, 8:07:19 AM2/23/16
to Comunidad de Visual Foxpro en Español
Hola Miguel:
Con esto quiere decir que no podemos recuperar/grabar campos Image directamente con un Cursoradapter?
Gracias

Miguel Antúnez

unread,
Feb 23, 2016, 3:43:25 PM2/23/16
to publice...@googlegroups.com
Estimado Mario, no he trabajado con los Cursoradapter, pero al devolverte el resultado en un cursor, me imagino que es posible trabajarlo de esa forma.

Saludos.

Mario Escudero

unread,
Feb 23, 2016, 4:14:31 PM2/23/16
to publice...@googlegroups.com

Gracias Miguel.
Afortunadamente ya lo pude resolver trabajando directamente con el cursoradapter, aplicando la metodología de Daniel Sánchez.
Saludos

Mario Escudero
Rpm #995817087
www.cheff2000.com

Enviado desde mi móvil

Reply all
Reply to author
Forward
0 new messages