HOLA AMIGOS, COMO PUEDO GUARDAR IMAGENES EN UNA TABLA DE SQL SERVER 2008 R2?

2,059 views
Skip to first unread message

Jimmy Pozo

unread,
Mar 2, 2012, 8:40:36 AM3/2/12
to Comunidad de Visual Foxpro en Español
Estimados amigos

Despues de un calido saludo me permito preguntar a los expertos con un
breve ejemplo como almacenar imagenes BMP, JPG en SQL SERVER 2008
teniendo como lenguage de programacion al poderoso VFP, les comento
que soy un poco novato en el tema de SQL

Saludos

Daniel Sánchez

unread,
Mar 2, 2012, 9:05:11 AM3/2/12
to publice...@googlegroups.com
Bueno, esto se comento hace poco lo que debes hacer es lo siguiente

obtienes el contenido del archivo

cmiarchivo=filetostr(larutaynombredelarchivo)

se recomienda pasarlo a base64 antes de grabarlo, puedes tranquilamente almacenarlo en un campo text

wbase64=strconv(thisform.cimagenfile,13)

y lo remplazas en el campo tex de tu tabla 

replace mitabla.micampo with wbase64

para recuperarlo

wbase64=mitabla.micampo

lo pasamos nuevamente al formato normal

cimagenfile=STRCONV(oreg.fotopersonal,14)

si deseas puedes volver a pasarlo almacenarlo en un archivo

nok=strtofile(cimagenfile,crutaynombrearchivo)

si deseas visualizarlo en un objeto imagen

thisform.imagen.picturevalue=cimagenfile

si desea visualizarlo desde el archivo que se grabo

thisform.imagen.picture=crutaynombrearchivo

Con este método puedes almacenar cualquier tipo de archivo no solo imagenes.

Saludos


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

Carlos Illacutipa Espinoza

unread,
Mar 2, 2012, 10:42:41 AM3/2/12
to Comunidad de Visual Foxpro en Español
Saludos también podrías usar esta otra opción usando un ensamblado que
realice el .net mira esta entrada de mi blog
saludos

http://micro4dev.blogspot.com/2011/07/guardar-archivos-en-base-de-datos.html

Alfonso Arias Lemas

unread,
Mar 2, 2012, 8:18:59 PM3/2/12
to publice...@googlegroups.com
Sabes colega, 
Asi hacia yo antiguamente pero desisti, por que?, 
Si la base de datos esta localmente puedes hacer Backup da la base de datos normalmente sin problema lo que te permite restaurar en un futuro sin dificultad pero..... si la base de datos la tienes en la Web la mayoria de los administradores de hosting te salvan la base de datos en script de forma que ya me paso que uno de los capos de una tabla era nvarchar(max) con ficheros y fotos y al correr los script para restaurar la base de datos al llegar a ese campo formaba un rollo grande porque el guardaba los ficheros en binario pero "SQL Server Management" no entendia los caracteres en binario o algunos de esos caracteres indicaban el fin del archivo y paraba todo.
Solución que di a ese problema, si la base de datos es local solo guardo el camino del archivo y si es en la web guardo el fichero en FTP.

Saludos,
   Alfonso



De: Daniel Sánchez <resets...@gmail.com>
Para: publice...@googlegroups.com
Enviado: Viernes 2 de marzo de 2012 13:05
Asunto: Re: [vfp] HOLA AMIGOS, COMO PUEDO GUARDAR IMAGENES EN UNA TABLA DE SQL SERVER 2008 R2?

Victor Espina

unread,
Mar 2, 2012, 8:47:27 PM3/2/12
to publice...@googlegroups.com, Alfonso Arias Lemas
Jimy, una de las mejores funciones que brinda este grupo es la posibilidad de realizar busquedas en todos los posts que se han enviado desde que se fundo el grupo, gracias a la potencia del motor de busqueda de Google. Una busqueda por "almacenar imagenes en SQL desde VFP" me llevo a varios discusiones que se han tenido en el grupo sobre ese tema. Es decir, que si hubieras dedicado 5 minutos a buscar no habrias tenido necesidad de preguntar. Aqui te dejo el link de la ultima discusion que se tuvo al respecto:

https://groups.google.com/forum/#!searchin/publicesvfoxpro/almacenar$20imagenes$20en$20SQL$20desde$20VFP/publicesvfoxpro/MaYMZ7Qh-Kk/mLdiDceJY1kJ

Alfonso, a lo que se refiere Daniel es a grabar el contenido de la imagen pero en forma de Texto y no de binario, justamente para evitar los problemas que describes.  Guardar la ubicacion de la imagen te funcionara siempre y cuando el sistema ejecute en un ambiente local; en el momento que tengas clientes remotos que se conecten por internet podrias empezar a tener problemas.

La solucion de la que habla daniel, usando Base64, soluciona ambos problemas de una vez.  En el link que le reomende a Jimy hay una clase que te permite codificar un archivo en base64 y luego recrearlo, usando el API de Windows en lugar de la funcion STRCONV() de VFP, lo cual en teoria deberia darte un rendimiento superior y de paso funciona en todas las versiones de VFP (STRCONV para base64 solo funciona a partir de ciertas versiones de VFP).

El codigo de esta solucion puedes verlo directo en codeWiki:

Saludos

Victor Espina

On Friday, March 2, 2012 10:18:59 PM UTC-3, alfonso wrote:
Sabes colega, 
Asi hacia yo antiguamente pero desisti, por que?, 
Si la base de datos esta localmente puedes hacer Backup da la base de datos normalmente sin problema lo que te permite restaurar en un futuro sin dificultad pero..... si la base de datos la tienes en la Web la mayoria de los administradores de hosting te salvan la base de datos en script de forma que ya me paso que uno de los capos de una tabla era nvarchar(max) con ficheros y fotos y al correr los script para restaurar la base de datos al llegar a ese campo formaba un rollo grande porque el guardaba los ficheros en binario pero "SQL Server Management" no entendia los caracteres en binario o algunos de esos caracteres indicaban el fin del archivo y paraba todo.
Solución que di a ese problema, si la base de datos es local solo guardo el camino del archivo y si es en la web guardo el fichero en FTP.

Saludos,
   Alfonso


De: Daniel Sánchez <resets...@gmail.com>

Alfonso Arias Lemas

unread,
Mar 2, 2012, 9:12:04 PM3/2/12
to publice...@googlegroups.com
ok, Victor yo resuelvo de esa forma mas tu sugerencia es valida, voy a estudiarmela para ver como la implemento....



De: Victor Espina <vesp...@gmail.com>
Para: publice...@googlegroups.com
CC: Alfonso Arias Lemas <arias...@yahoo.es>
Enviado: Sábado 3 de marzo de 2012 0:47

Asunto: Re: [vfp] HOLA AMIGOS, COMO PUEDO GUARDAR IMAGENES EN UNA TABLA DE SQL SERVER 2008 R2?

Alfonso Arias Lemas

unread,
Mar 2, 2012, 9:34:32 PM3/2/12
to publice...@googlegroups.com
Hola Victor, ya revice el Link y esta bastante facil de implementar utilizando la clase que creaste o modificaste, ahora me salta una duda, cuando he almacenados archivos mayores que 8000 o 10000 byte, a la hora de grabar en la base de datos no hay problemas pero al leerlo no me lo baja completo, Mi pregunta es, hay forma de configuara esto en VFP o es alguna configuración del ODBC con el tamaño maximo de los paquetes a bajar de la base de datos?

Alfonso


De: Victor Espina <vesp...@gmail.com>
Para: publice...@googlegroups.com
CC: Alfonso Arias Lemas <arias...@yahoo.es>
Enviado: Sábado 3 de marzo de 2012 0:47
Asunto: Re: [vfp] HOLA AMIGOS, COMO PUEDO GUARDAR IMAGENES EN UNA TABLA DE SQL SERVER 2008 R2?

Victor Espina

unread,
Mar 2, 2012, 9:43:04 PM3/2/12
to publice...@googlegroups.com, Alfonso Arias Lemas
Quizas el problema sea el tipo de dato asociado a la columna donde estas grabando la data del archivo. Algunos tipos de datos solo almacenan hasta cierta cantidad de bytes. Lo ideal seria usar tipos de datos ilimitados, como TEXT o BLOB.

Otra causa es enviar los datos en forma binaria en lugar de texto. Algunas secuencias de caracteres pueden interpretarse como "end-of-file" causando que al momento de grabar no se guarde toda la informacion.

Prueba con la clase base64Helper a ver si puedes reproducir el problema o si por el contrario te funciona correctamente.

Saludos

Victor Espina


On Friday, March 2, 2012 11:34:32 PM UTC-3, alfonso wrote:
Hola Victor, ya revice el Link y esta bastante facil de implementar utilizando la clase que creaste o modificaste, ahora me salta una duda, cuando he almacenados archivos mayores que 8000 o 10000 byte, a la hora de grabar en la base de datos no hay problemas pero al leerlo no me lo baja completo, Mi pregunta es, hay forma de configuara esto en VFP o es alguna configuración del ODBC con el tamaño maximo de los paquetes a bajar de la base de datos?

Alfonso

De: Victor Espina <vesp...@gmail.com>
Reply all
Reply to author
Forward
0 new messages