Insertar o asociar fotos en bd

Quiero que por favor me ayudes diciéndome como hago para colocar una foto en una bd. Yo trabajo con pb8 y estoy haciendo una bd de clientes que consta de nombre, tl, fax, direcc, ciudad, tel y foto.
El campo foto, ¿qué tipo de dato es? ¿Y cómo hago para insertar o anexar la foto del cliente cada vez que agrego un nuevo cliente?
2

2 Respuestas

23.575 pts. Licenciado en Analisis de Sistemas Informaticos
Yo personalmente almaceno las imágenes en un sector del disco duro y hago el llamado desde un datawindow utilizando un computed field y la función Bitmap..
o sea..
Creas un datawindow y en el computed fild.. solo colocas..
bitmap(direccion_de_la_imagen)
Es muy sencillo y tu bd no crece tanto como si lo haría si insertas las imágenes en él...
De todas maneras te paso el código para que puedas insertar tus imágenes en la BD... es un código que lo encontré en otra web.. www.lawebdelprogramador.com y es del amigo Oscar.. así que si te sirvió mucho agradecelo a él.. yo solo lo copie.. :P
Como insertar en una BD:
Acá tienes un ejemplo, que guarda imágenes en la BD y las visualiza.
1. Creas una tabla llamada mitabla.
En ASA sería:
Id...(int) Clave principal
nombre...(var)
foto...(Long Binary)
Nota:
- En ASA se elige Long Binary
- En SQL server se elige IMAGE
- En Oracle elegí un tipo de dato BINARIO, creo tienes varios: (Raw, Low Raw, Blob, Clob, Nlog, bfile...). En fin, tu sabes mejor eso.
2. Creas tu objeto DW; incluyes los campos id y nombre (no podrás incluir el campo foto. No te preocupes).
3. En una ventana insertá los siguientes elementos:
* Un control DataWindow (que está relacionado con tu objeto DataWindow).
* Fuera de los botones clásicos (Anterior, Siguiente, Nuevo registro y Guardar Registro), incluí un botón llamado EXAMINAR.
* Insertá un Control picture (p_1) en cualquier parte de la ventana o sobre el mismo control DW. En propiedades del control p_1, desactivá: OriginalSize.
4. Script del botón EXAMINAR, que permite examinar una imagen (inclusive superior a 32 KB), mostrarla en el p_1 y guardarla en la BD.
//Obtener la ruta de la imagen
Long ll_valor
Long ll_row
String ls_ruta,ls_nombre
ll_valor = GetFileOpenName("Seleccione el archivo", + ls_ruta, ls_nombre, "DOC", + "Bmp Files (*.BMP),*.BMP," + "Jpg Files (*.JPG),*.JPG")
sle_1.Text=string(ls_ruta)
//Leer imágenes mayores a 32 KB
Long ll_file,ll_fila
blob lbl_foto, lbl_temp
//Obtenemos el id de la fila actual
ll_fila=dw_1.GetItemNumber(dw_1.GetRow(),"id")
ll_file = FileOpen(ls_ruta, StreamMode!)
Do while FileRead(ll_file,lbl_temp)>0
lbl_foto +=lbl_temp
Loop
FileClose(ll_file)
p_1.setpicture(lbl_foto)
//Guardar en la BD
UPDATEBLOB mitabla
SET foto = :lbl_foto
WHERE id=:ll_fila;
IF sqlca.sqlcode=0 THEN
messagebox('','Ingreso existoso.')
ELSE
messagebox('','Error en el ingreso')
END IF
-----------
Espero que sirva en Oracle, y por sí acaso, controlá cuanto "engorda" tu BD, cada vez que insertas un imagen.
Muchas gracias por tu ayuda. Me sacaste del lio así sea que solo hayas copiado el script. Ahh ! Y gracias también al amigo OSCAR de la web del programador.
1.250 pts. 9 años de programador en diferentes lenguajes (VB y...
Eso nunca lo he utilizado, lo que alguna vez hice en tu caso fue crear una subcarpeta en la carpeta donde se instaló el .exe con todas las imágenes de los empleados, las imágenes llevaban por nombre el id_empleado, y así las relacionaba y las cargaba en un picture...
Si no encuentras la solución que buscas y ya debes terminar el proyecto, puedes emplear esta solución barata pero segura.
Gracias por tu respuesta, esa solución me sirve en modo de diseño porque se cual imagen insertar. En modo de ejecución no serviría.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas