RE:Almacenar Imagenes En ASA
De los Foros... Aplicaciones PB...
Foto en Bd desde PB
Este articulo muestra la manera de incluir un BMP o un archivo gráfico en un campo Bynary de una base de datos.
string ls_defext="BMP"
string ls_filtro="Archivos JPG(*.jpg),*.jpg, Archivos GIFs(*.gif),*.gif, Mapa de Bits(*.bmp),*.bmp"
li_ret=getFileOpenName("Abrir Mapa de bits",ls_txtname,ls_named,ls_defext,ls_filtro)
if li_ret = 1 then
ii_fh=fileopen(ls_txtname, streammode!)
if ii_fh -1 then
fileread(ii_fh, gb_blob)
If IsNull(gb_blob) Then MessageBox("A","Blob nulo")
fileclose(ii_fh)
p_foto.setpicture(gb_blob)
UPDATEBLOB Alumno SET foto = :gb_blob WHERE Cod_univers = :le_cod_univ.text;
commit;
end if
end if
Las variables li_ret, ii_fh, gb_blob pueden ser declaradas en forma global.
Foto en Bd desde PB (otra)
"Vamos a desarrollar un pequeño aplicativo, en donde almacenaremos en una DB, una imagen, para despues poder visualizarla o cambiarla por otra.
1. Creamos una tabla llamada 'alumnos_fotos' con 2 campos: 'cod_alumno' de tipo char(2) y foto_alumno de tipo image(16), al campo cod_alumno lo ponemos como Clave Principal.
a esta tabla le agregamos 3 registros con los codigos: '01', '02', y '03'
2. Creamos una Window con los siguientes objetos:
un Picture Control, llamado 'p_foto'
dos Command Button, llamados 'cb_cargar_foto' y 'cb_ver_foto' y
un Single Line Edit, llamado 'sle_cod_alumno'
3. En el evento clicked de 'cb_cargar_foto' poner el siguiente codigo:
STRING ls_pathname, ls_filename, ls_filtro, ls_cod_alumno
LONG ll_File
BLOB lbl_data, lbl_temp
ls_filtro = "JPEG Files (*.jpg),*.jpg," + "GIFF Files (*.gif),*.gif,"
IF GetFileOpenName ( "Archivo de Imagen: ", ls_pathname, ls_filename , "jpg", ls_filtro) = 0 THEN RETURN
p_foto.picturename = ls_pathname
ls_cod_alumno = trim(sle_cod_alumno.text)
ll_File = FileOpen(ls_pathname, StreamMode!)
DO WHILE FileRead(ll_file,lbl_temp) > 0
lbl_data += lbl_temp
LOOP
FileClose(ll_file)
IF ll_File -1 THEN
FileRead(ll_file, lbl_data)
FileClose(ll_file)
SQLCA.AutoCommit = True
UPDATEBLOB alumnos_fotos SET foto_alumno = :lbl_data WHERE cod_alumno = :ls_cod_alumno;
SQLCA.AutoCommit = False
ELSE
messagebox('Error','Falló el FileOpen')
END IF
IF SQLCA.SQLNRows > 0 THEN
COMMIT;
messagebox('OK: ' + ls_cod_alumno,'Se guardó la foto del alumno')
ELSE
messagebox('Error','Falló el UPDATEBLOB')
END IF
FileClose(ll_file)
4. En el evento clicked de cb_ver_foto, copiar el codigo:
Blob lb_imagen
STRING ls_cod_alumno
ls_cod_alumno = trim(sle_cod_alumno.text)
SELECTBLOB foto_alumno INTO :lb_imagen FROM alumnos_fotos WHERE cod_alumno = :ls_cod_alumno ;
p_foto.SetPicture(lb_imagen)
5. Ejecutar y probar:
escribimos el codigo '01' en sle_cod_alumno, le damos click en cb_cargar_foto y seleccionamos el archivo que se va a guardar en la DB. Repetimos este paso para los demas codigos '02' y '03'. Luego, probamos el boton cb_ver_foto, para cada codigo.
long ll_numinforme
blob lblb_fitxer,lbl_temp
Long ll_file
Guardar BLOB (PDF)
//Guardar el PDF al registre de l'informe
ll_file = FileOpen(is_directori+ls_nomfitxer, StreamMode!)
Do while FileRead(ll_file,lbl_temp)>0
lblb_fitxer +=lbl_temp
Loop
FileClose(ll_file)
UPDATEBLOB Informes SET DocumentPdf=:lblb_fitxer WHERE NumInforme=:ll_NUMINFORME USING trans_1 ;
IF trans_1.sqlcode=0 THEN
COMMIT USING trans_1 ;
END IF
Espero que te sirva...
Saludos desde Maracay, Venezuela.