Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: ADONAIRAFA 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. :-[
-
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 (http://leandroascierto.com/foro/index.php?topic=1611.msg9138#msg9138) (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
-
aquí tengo un ejemplo que realice cuando empece con Firebird
http://www.4shared.com/rar/svviksBp/file.html (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?
-
ya lo preguntaron varias veces a esto...mira este post.
Guardado de íconos e imágenes (http://leandroascierto.com/foro/index.php?topic=1611.0)
-
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
-
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.
-
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)
-
;D firebird 2.5
-
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 ;)
-
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
-
- 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.
-
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:
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
Select c.id, c.nombre, c.direccion, f.foto
from cliente c, fotocliente f
where c.id = f.idcliente
Saludos
-
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 !!!
-
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.
-
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 !!!
-
orita lo ve Sebas o Lea o Raul y te echa una mano.
Patience
-
Aqui tienes estos 2 ejemplos...
http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/351-ado-stream-imagenes.htm
http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/191-ado-guardar-imagen-bd.htm
El segundo es el que uso yo...!
Saludos
-
Creo que ninguna base de datos te permite hacer eso de poner la ruta del archivo y guardarlo tranquilamente :P
Como bien puso scan, se tiene que poner "el choco binario" que es la imagen convertida a base64 :P y cuando se usa, obtenerlo n.n
-
- Yvan: eso es bastante factible !!!
- Raul338: tienes razón, hay que hacer un "preparado" primero para poder realizarlo.
- Ssccaann !!!: Ya había visto ese ejemplo, el del ADO Stream, pero me resultana algo incomprensible, sobre todo porque estaba buscando un código que despues pensaba "adaptarlo" al VB .NET. Pero no le veia "la vuelta" :'(
Ahora les digo, que estoy probando un código directamente en VB 2008, luego les comento los resultados.
Saludos y un abrazo !!!
Manuel F. Borrego S. 8)
-
Para .net, no tenes otra que usar Streams (namespace System.IO), y buscar alguna clase que convierta de base64 (u otro) :P
-
- Yvan: eso es bastante factible !!!
...
No entendí doc ¿Que es bastante factible?
-
orita lo ve Sebas o Lea o Raul y te echa una mano.
A eso me refería Broth !!!
-
Para .net, no tenes otra que usar Streams (namespace System.IO), y buscar alguna clase que convierta de base64 (u otro) :P
Exacto Raul, estoy en eso... ::)
-
hola a todos mil disculpas por la ausencia
bueno en vista que en la sesion de net no hay este tema
lo publicare aqui
este ejemplo simple este desarrollado en vb 9 con FirebirdSql 2.5
http://www.4shared.com/rar/vdnXyyMY/FOTO.html
(http://www.4shared.com/rar/vdnXyyMY/FOTO.html)
contraseña para acceder es 123456
la funcion es similar para SQL server, MYSQL, ACCESS
Gracias
-
Lo hubieras hecho abriendo un nuevo tema !!! ;D
-
Saludos !!!
Otra vez yo con el "temita" este de guardar las imágenes, Pero como los "perros de caza", hasta no tener "asegurada la presa", no la dejo !!!
Esto es para cristian_19a ...
Tengo una duda en cuanto al código que subiste a www.4shared.com, para la versión .NET, pero antes que los moderadores nos corran a "escobazo limpio" por publicar temas en lugares inadecuados, voy a colocarlo en el subforo de .NET
Continuará (en el sub de .NET)