La Web del Programador: Comunidad de Programadores
 
    Pregunta:  671 - COMO INGRESAR GRAFICOS EN ORACLE 7
Autor:  Daniel Ramirez Hernandez
No he podido encontrar una forma de cargar graficos en las tablas de Oracle, mi problema se basa en que desearia utilizar Visul basic para hacerlo, por otro lado he copiado un archivo BMP al ambiente VAX (donde esta oracle) y no he tenido problemas para utilizar la herramienta Sql* Loader pero solo carga imagenes de hasta 512 bytes, superiores a este tamaƱo quedan mal.
Agradeceria que alguien me ayudase.

  Respuesta:  Christian Cela
Bueno a mi parecer no creo que debes de apuntar a una carpeta con todos los archivos solo a travez de una ruta por que ocupas recursos .. creo que lo mejor es que crees un directorio .. hagamos un ejemplo
"create or replace directory IMAGEN
as 'C:\Fotos\'; "
es decir esta carpeta va estar en la maquina servidor ...luego
dale permisos de lectura a esta carpeta a todos tus usuarios
" grant read on directory IMAGEN to [USUARIO] ;"
en tu tabla donde vas a almacenar la foto habra un campo de tipo BLOB
en mi caso guardo la imagen y a la vez la foto ...

PROCEDURE PU_AGREGAIMAGEN (DIRECTORIO IN VARCHAR2, ARCHIVOIMAGEN IN VARCHAR2) IS
F_LOB BFILE;
B_LOB BLOB;
BEGIN
IF (FU_FIND_IMAGES_DIR_CUENTA(WK_CUENTA) = TRUE )THEN
F_LOB := BFILENAME(DIRECTORIO, ARCHIVOIMAGEN);
INSERT INTO tbl_foto VALUES (WK_CUENTA, EMPTY_BLOB (),ARCHIVOIMAGEN)
RETURNING foto_predio INTO BLOB;
SYS.DBMS_LOB.FILEOPEN (F_LOB,SYS.DBMS_LOB.FILE_READONLY);
SYS.DBMS_LOB.LOADFROMFILE( B_LOB, F_LOB, SYS.DBMS_LOB.GETLENGTH (F_LOB) );
SYS.DBMS_LOB.FILECLOSE(F_LOB);
END IF;
end;

una vez que tengas creado el procedimiento , el directorio y los permisos puedes compartir esa carpeta y ponerla como una unidad de red .. y de esa manera apuntara a una ruta y a la vez tendras las imagenes alojada en la base ...
pero en tu caso al trabajar con visual basic tendrias que utilizar el objeto picture y la propiedad .LOAD cualquier cosa solo avisame al correo [email protected]

  Respuesta:  Alixandro Florian
Hola Daniel

No se si esta respuesta es demasiado tarde, pero ahi te va.....

ademas de la respuesta de Maria E. esta es una segunda opcion.

Declara en tabla un campo como varcha2(30) o segun considere, para guardar en el los nombres de las imagenes como .BMP; Ejemplo Daniel.bmp, para luego invocarlo mediante un Procedure.

Ejemplo

Procedure busca_imagen IS
Begin
select nombre_imagen from Table_name into :block_xx.imagen
where cod_cliente = :nombre_block.codigo
..................................................................................
..................................................................................
read_image_file('block_xx.imagen','bmp',':nombre_block.imagen');
if not form_success then
message(' too many row');
end if;
end;

nota la imagen debe esta en el folder en donde se encuentra el menu en ejecucion o la forma que invoca la imagen.

Ademas en la propiedades debe especificarle que es un campo imagen.

  Respuesta:  Maria Enoe Giraldo
por que no defines en la tabla que necesitas un campo para el grafico de tipo LONG RAW que te permitira trabajar con graficos mayores a 1GB. No te asusten por el espacio el usa lo minimo que tu consumas.