Autor Tema: Guardar Imágenes en una BD...  (Leído 12388 veces)

0 Usuarios y 1 Visitante están viendo este tema.

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Guardar Imágenes en una BD...
« en: Marzo 25, 2012, 04:50:01 am »
Saludos a todos !!!

Lo que planteo es sencillamente lo siguiente: ¿Cómo guardar un archivo de imágenes (.bmp o .jpg) en una Base de Datos? Y en cuanto a la BD, me refiero a Firebird, qué tipo de campo debo definir en la tabla donde vaya a guardar el archivo, y por supuesto, de ser posible un código de eejmplo para hacerlo (que despues con dicho código haré la adaptación para usralo en VB 2008).

Agradecido de antemano !!! ;D


Saludos.

Manuel F. Borrego S. 8)
Barcelona, Venezuela.


PD: Disculpen los moderadores y administrador
      del foro, por si estoy repitiendo un Post.
      Estuve buscando, pero no pude encontrar
      un tema paraecido al respecto. :-[
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Guardar Imágenes en una BD...
« Respuesta #1 en: Marzo 25, 2012, 05:58:58 am »
Tienes que definirlo como BLOB.
Personalmente no he tenido experiencia aun en trabajar las fotos directamente en la BD porque las manejo por fuera, pero en un programa que hice hace un tiempo (programa pequeño) utilizo una técnica que enseño Sebas para convertirlo en string, esto lo explica aqui (ese hilo debería estar con tachuela).

Pero hasta donde vi las recomendaciones son:

Crear una tabla que maneje las fotos y nada mas y con un campo relacionado a la tabla respectiva.
El campo lo debes crear asi: BLOB SUB_TYPE 0 SEGMENT SIZE 80
Claro que si creas fotos en varias tablas mandate por un dominio, algo asi:
CREATE DOMAIN FOTO AS BLOB SUB_TYPE 0 SEGMENT SIZE 80 y de esa forma se lo asignas a tu campo foto.

Sobre hacerlo en .Net no lo se. Como dije sobre VB6 no lo he hecho pero me has dado una buena idea para el próximo vídeo je, en los siguientes dias voy a probar a que sabe esa mermelada.

Saludos

« última modificación: Marzo 25, 2012, 06:09:53 am por YAcosta »
Me encuentras en YAcosta.com

cristian_19a

  • Kilobyte
  • **
  • Mensajes: 80
  • Reputación: +28/-3
    • Ver Perfil
Re:Guardar Imágenes en una BD...
« Respuesta #2 en: Marzo 25, 2012, 09:21:56 am »
aquí tengo un ejemplo que realice cuando empece con Firebird
http://www.4shared.com/rar/svviksBp/file.html
la contraseña para ingresar es 123456

y con vb 2008 lo publico aquí ó en la sesión de vb.net?

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Guardar Imágenes en una BD...
« Respuesta #3 en: Marzo 25, 2012, 08:52:56 pm »
ya lo preguntaron varias veces a esto...mira este post.

Guardado de íconos e imágenes

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Guardar Imágenes en una BD...
« Respuesta #4 en: Marzo 26, 2012, 12:12:55 am »
Ese es el hilo que deben poner tachuela en el foro de VB6.

Sebas, si me permites quisiera copiarme todo ese tema para ponerlo en mi blog, claro esta que seria indicando como es natural, lógico y justo el reconocimiento a tu persona sobre este tema.

Espero tu aprobación o desaprobación. Saludos
Me encuentras en YAcosta.com

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Guardar Imágenes en una BD...
« Respuesta #5 en: Marzo 26, 2012, 01:30:27 am »
Ese es el hilo que deben poner tachuela en el foro de VB6.

Sebas, si me permites quisiera copiarme todo ese tema para ponerlo en mi blog, claro esta que seria indicando como es natural, lógico y justo el reconocimiento a tu persona sobre este tema.

Espero tu aprobación o desaprobación. Saludos

claro que si, no hay ningun problema.

saludos.

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Guardar Imágenes en una BD...
« Respuesta #6 en: Marzo 26, 2012, 02:01:52 am »
Saludos a todos !!! ;D

Definitivamente no entiendo un caraj... este tema o no me quedo claro, no se la verdad !!! :-[ :-[ :-[
- Yvan, Broth estoy claro en que se debe almacenar en un campo tipo BLOB y tamaño 80, pero me interesaría una muestra de código para guardarla en la BD (Firebird por supuesto), tendrás algo de eso??? Un detallito, es verdad que Firebird en VB 6.0, se sirve del ADO, pero en .Net Yvan, ya es distinto, ya usa su propia DLL, y los métodos y/o propiedades tienen nombres similares a los utilizados por Access, SQLServer, MySQL entre otros, Y veo que un código hecho en VB 6.0 tiene muy poca semejanza (prácticamente ninguna) al que hay que realizar en .Net.
- cristian_19a, bajé tu ejemplo, pero me da un error de "no soportado" en cual versión de Firebird lo hiciste? por encima de la 2.1?
- Seba, me fui al post que pusiste de referencia, pero nada. Busqué la referencia que haces de "El Guille" acerca de los métodos GetChunk y AppendChunk, pero el Link está caído.

El "rollo" para mí de todo este asunto, es que no lo capto bien (o nada !!!). Se que de repente para uds es facil, pero... para mí, se me ha hecho confuso !!!

Perdonen tanta vai...!!!


Saludos a todos !!!


Manuel F. Borrego S. 8)
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

cristian_19a

  • Kilobyte
  • **
  • Mensajes: 80
  • Reputación: +28/-3
    • Ver Perfil
Re:Guardar Imágenes en una BD...
« Respuesta #7 en: Marzo 26, 2012, 02:48:11 am »
;D firebird 2.5

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Guardar Imágenes en una BD...
« Respuesta #8 en: Marzo 26, 2012, 12:53:59 pm »
Saludos a todos !!! ;D

- Yvan, Broth estoy claro en que se debe almacenar en un campo tipo BLOB y tamaño 80, pero me interesaría una muestra de código para guardarla en la BD (Firebird por supuesto), tendrás algo de eso??? Un detallito, es verdad que Firebird en VB 6.0, se sirve del ADO, pero en .Net Yvan, ya es distinto, ...

Papa, te respondí lo que exactamente preguntaste en el primer post mi estimado:
"qué tipo de campo debo definir en la tabla donde vaya a guardar el archivo?"
Por eso me apresure en responderte: Blob.

Doc, por eso te dije luego que en .Net no se nada, lo que si me queda claro es que es bien diferente hacer algo .Net que en VB6.
¿Lo que te mando cristian no lo puedes aplicar al 2.1? , no he visto el adjunto pero create una BD y usa el nombre de tabla y campos que invoca en el código y debería correr.

Metale punche  ;)
Me encuentras en YAcosta.com

cristian_19a

  • Kilobyte
  • **
  • Mensajes: 80
  • Reputación: +28/-3
    • Ver Perfil
Re:Guardar Imágenes en una BD...
« Respuesta #9 en: Marzo 26, 2012, 03:18:20 pm »
vamos ayudarte
aquí esta el código para que te crees la tabla en firebird 2.1 del ejemplo que te mande

CREATE TABLE MASCOTA (
    CODIGO           INTEGER NOT NULL,
    NOMBRE           VARCHAR(50),
    FECHANACIMIENTO  DATE,
    FOTO             BLOB SUB_TYPE 0 SEGMENT SIZE 80
);
ALTER TABLE MASCOTA ADD CONSTRAINT PK_MASCOTA PRIMARY KEY (CODIGO);

no te olvides de colocarla tu BD en la misma carpeta donde esta tu proyecto de vb al menos que cambies la ruta en el código

yo también lo hecho en .net 2008 si gustas te lo paso pero por eso pregunte antes lo público aquí o en la sesión de .net

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Guardar Imágenes en una BD...
« Respuesta #10 en: Marzo 26, 2012, 10:17:14 pm »
- Yvan: tienes razón broth !!!  :-[ Lo que pasa es que ya tengo una trauma con este tema !!! :'( :'( :'( Con respecto a la versión de la BD, veré el adaptar el código para una BD creada con versión 2.1.
- cristian_19a: El código está muy bueno, ahora una pregunta... Cada vez que quiera guardar una imagen, tengo que crear una tabla nueva??? :o De paso, me gusta la metodología de crear la BD aparte, creando sus tablas y definiendo sus campos respectivamente, para luego, desde la plácida comodidad de VB, comunicarme con la BD e ir agregando, actualizando o eliminando registros según se requiera (y por supuesto sin verme en la necesidad de usar los comandos CREATE TABLE - ALTER TABLE (este último con pena :-[ me declaro ignorante en su uso), qué más les puedo decir !!!
Por cierto cristian_19a, sí, colócalo en el sub-foro de VB .Net.

Saludos, y se merecen un +1 por sus aclaratorias y por ver lo mucho que puedo aprender de uds !!!

Un abrazo a ambos !!!


Manuel F. Borrego S. 8)
Barcelona, Venezuela.
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Guardar Imágenes en una BD...
« Respuesta #11 en: Marzo 26, 2012, 11:57:54 pm »
Sin temor a equivocarme, tengo entendido que el amigo cristian_19 te paso el script de creación de la tabla por única vez que incluso puedes correrla del lado del servidor con tu manejador de base de datos favorito, esta tabla no has de volver a crearla ni tampoco por cada foto porque alli tienes el campo foto. Si usas el ibExpert no tendrías que crear o correr query y solo hacerla con las definiciones que requieras según el modelo que te expone Cristian.

Si te interesa otra alternativa podrias en todo caso tener la puritita foto en una sola tabla sin ningun dato mas que el id de relacion, ejemplo: 2 tablas CLIENTE y FOTOCLIENTE
CLIENTE
ID
NOMBRE
DIRECCION
etc
etc

FOTOCLIENTE 
IDCLIENTE
FOTO

y para esta tabla el script seria:
Código: (SQL) [Seleccionar]
CREATE TABLE FOTOCLIENTE(
    IDCLIENTE      INTEGER NOT NULL,
    FOTO           BLOB SUB_TYPE 0 SEGMENT SIZE 80
);
ALTER TABLE FOTOCLIENTE ADD CONSTRAINT PK_FOTOCLIENTE PRIMARY KEY (IDCLIENTE);

El campo IDCLIENTE de la tabla FOTOCLIENTE no sera incremental necesariamente, se lo daras a partir de la tabla CLIENTE, y ya sabes, luego tu select seria algo asi

Código: (SQL) [Seleccionar]
Select c.id, c.nombre, c.direccion, f.foto
from cliente c, fotocliente f
where c.id = f.idcliente


Saludos
Me encuentras en YAcosta.com

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Guardar Imágenes en una BD...
« Respuesta #12 en: Marzo 27, 2012, 01:14:51 am »
A ver si voy captando esto... Entonces el código de las instrucciones "CREATE TABLE" y "ALTER TABLE" están en un Script, ¿No?
Ahja, supongamos que tengo un "programita" (esto por cariño, je, je !!!) Donde estoy tomando los datos básicos de un Cliente:
- Cédula de Identidad
- Nombres
- Apellidos
- Teléfono
- Fotografía (Esto a través de una cámara -una suposición, claro- que luego de tomar la foto, esta
                    es guardada en un archivo bajo formato .jpg o .bmp, y de este archivo es la imagen
                    que toma el programa para guardarla en el campo 'Foto' de la Tabla "Foto_Cliente")
Mi pregunta, seguiría usando el Script, por cada inserción que vaya a hacer en la BD???
Perdóname tanta vaina Yvan, pero he sido capaz de resolver problemas complicados en circuitos electrónicos (por poner un ejemplo), y no he podido con este asunto, que tal parece algo simple, pero es que me tiene enredado !!! :'(  :-[

El Código en SQL, lo tengo claro, pero lo de la inserción no.  :(

Saludos !!!

Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Guardar Imágenes en una BD...
« Respuesta #13 en: Marzo 27, 2012, 01:44:43 am »
En circuitos electrónicos si me das una resistencia no tengo npi de que significan los colores o cuanto valor tiene esa resistencia o si eso se pregunta así jajaja.
Con un amigo forista (también de Venezuela) quedamos en que me iba a ayudar en hacer algo como un simple circuito que prenda un led pero desde VB6, me dio la lista a comprar y esa lista se la di al vendedor, la cosa es que ya no se pudo concretar la clase... en fin, alli esta mi bolsita con su placa, resistencias, un chip tambien, una botellita etc etc, algun dia jugare con eso jajaj

Cito:
"Entonces el código de las instrucciones "CREATE TABLE" y "ALTER TABLE" están en un Script, ¿No?"
Si, estan en un script y es el scrip de creacion de la tabla y luego se modifica para designar la clave primaria.
¿Como se usa? Sin hacerlo con VB6 o .Net (porque lo mandas tal como haces las consultas)
Tu abres por ejemplo el IbExpert, copias ese script y lo ejecutas y veras que la tabla se crea y esta se altera para definir la clave primaria.

Estos pasos son exactamente los mismos usando el wizard que estoy seguro has usado y que yo también uso, y es usando el IbExpert clic derecho "Nueva tabla" y creas a mano los campos y defines la llave primara y grabas y la tabla se crea. Es exactamente lo mismo.
A pesar de hacerlo así con el wizard, igual el script se genero ¿como te das cuenta?
Usando el IbExpert tomas una tabla cualquiera, le haces doble clic, a la derecha se abrira la estructura y alli hay unas lengüetas, una de las ultimas lengüetas dice DDL, si te vas alli veras el famoso script de creacion de dicha tabla y de todas sus modificaciones.

Como el amigo cristian no esta enterado del manejador de BD que usas, te envió de forma apropiada un ejemplo de script de creación de tabla.

Ahora, si vas a crear la tabla solo por única vez la tabla, osea no la vas a eliminar o alterar, entonces hazlo a mano que es mas rapido y usando el wizard de IbExpert.

Donde no te puedo ayudar porque aun no lo he probado es en:
"Esto a través de una cámara -una suposición, claro- que luego de tomar la foto, esta
 es guardada en un archivo bajo formato .jpg o .bmp, y de este archivo es la imagen
 que toma el programa para guardarla en el campo 'Foto' de la Tabla "Foto_Cliente")"


En teoria es asi, de ese archivo toma la imagen a guardar, pero me parece que no se le puede dar algo como esto:
Insert(.... Foto_Cliente,...) Values (... "C:\miFoto.jpg"...)

Esa parte no la he probado aun, pero me parece que darle la ruta de la foto creo que no es, creo que hay que hacer un tratamiento previo, no estoy seguro, en esta parte esperemos a que nos oriente cristian u otro amigo.

Mi pregunta, seguiría usando el Script, por cada inserción que vaya a hacer en la BD???
El script de insercion tal cual como siempre usas si, el script de creación de la tabla no.
Por eso digo que si el script de creación se usa una sola vez me parece innecesario tenerlo en el programa, salvo que quieras tener un modulo donde tengas toda la creación de todas las tablas y con un clic lo corras, en mi caso no lo hago porque lo creo una vez y luego copio las bd vacias cuando vendo mi sistema.

La insercion es con el Insert que siempre usas.

Saludos bro.
Me encuentras en YAcosta.com

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Guardar Imágenes en una BD...
« Respuesta #14 en: Marzo 27, 2012, 11:26:26 pm »
Bueno Broth !!! :o captaste exactamente mi problema !!! :o

Cito:
"En teoria es asi, de ese archivo toma la imagen a guardar, pero me parece que no se le puede dar algo como esto:
Insert(.... Foto_Cliente,...) Values (... "C:\miFoto.jpg"...)

Esa parte no la he probado aun, pero me parece que darle la ruta de la foto creo que no es, creo que hay que hacer un tratamiento previo, no estoy seguro..."


La explicación que te mandaste acerca del ALTER TABLE - CREATE TABLE, me quedó más clara que el agua !!! Mi rollo está en lo que escribiste, que cité arriba en "negritas" !!!

Bueno toca a esperar solución en esto. Lo consulté en el foro de Firebird, en el subforo Firebird .Net, en el post "Guardar imágenes en una BD". Lo único que han hecho es verlo, pero nada han querido largar la solución >:( Ni modo... toca esperar !!!

Saludos Viejo !!!
« última modificación: Marzo 27, 2012, 11:28:31 pm por ADONAIRAFA »
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!