• Jueves 28 de Marzo de 2024, 13:20

Autor Tema:  Almacenar Y Leer Una Imagen En Sqlserver Con Pb 9.  (Leído 14426 veces)

periclay

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Almacenar Y Leer Una Imagen En Sqlserver Con Pb 9.
« en: Viernes 3 de Junio de 2005, 16:49 »
0
Como puedo Almacenar y leer una imagen en sqlserver con Power Builder 9.0
pordesir un mantenimientode personal consu respectiva imagen .....gracias por la ayuda de antemano escribanme  a periclay@hotmail.com

Soultaker

  • Miembro HIPER activo
  • ****
  • Mensajes: 972
  • Nacionalidad: pe
    • Ver Perfil
Re: Almacenar Y Leer Una Imagen En Sqlserver Con Pb 9.
« Respuesta #1 en: Sábado 4 de Junio de 2005, 01:44 »
0
Cita de: "periclay"
Como puedo Almacenar y leer una imagen en sqlserver con Power Builder 9.0 por decir un mantenimientode personal con su respectiva imagen
Bueno, no se exactamente como guardar imagen en sql server, pero tambien lo que puedes hacer es grabar solo la ruta de la imagen junto con el nombre, y despues llamarla desde tu aplicacion.

Espero que me hayas entendido.

 :comp:
http]
foros,programacion, c, c++, java,
linux, videojuegos, directX, .NET,
visual basic,robotica,microprocesadores

Para los nuevos usuarios de este Foro, por favor leerse esta discusión.
Cómo Hacer Preguntas De Forma Inteligente

Ojos que no ven... pisan caquita
Camarón que se duerme... muere electrocutado


<<< Harol Moreyra Bendezú >>>

carlossv

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Almacenar Y Leer Una Imagen En Sqlserver Con Pb 9.
« Respuesta #2 en: Domingo 2 de Julio de 2006, 08:31 »
0
Recien encontre esta pagina y supongo que ya resolvieron este problema, pero respondo por si alguien necesita saber como hacerlo todavia.

Para almacenar una imagen en sql puedes hacer lo siguiente.

Obvio que la columna de la tabla donde se va a almacenar la imagen debe ser de tipo IMAGE.

Asumo que en la pantalla de mantenimiento, donde vas a capturar la imagen tienes un control data window para la demas informacion, al lado de ella colocas un control PICTURE.

En el control PICTURE vamos a desplegar la imagen que se va a guardar, generalmente una que existe en el disco duro, por ejemplo para un periodico una carpeta donde los fotografos depositen todas las imagenes que posteriormente van a guardarse en la base de datos asociadas a una noticia.

Para seleccionar la imagen puedes colocar un boton CommandButton, con texto "Elegir Imagen" por ejemplo, que al hacer click te muestre la carpeta que contenga las imagenes.

En el evento Click de este boton colocar lo siguiente para que te muestre la ventana con la carpeta:

//Todo el siguiente codigo en el evento click del CommandButton, "Elegir Imagen"
//Definir parametros para ventana que muestra la carpeta de las imagenes
String   ls_Path, ls_File, ls_Type, ls_Mask
Integer   li_Pos
ls_Type = "*.bmp"
ls_Mask = "Bitmap Files (*.bmp), *.bmp, JPG Files (*.jpg)"

//Obtener el nombre de la imagen.
If GetFileOpenName("Seleccionar Archivo de Imagen", ls_Path, ls_File, &
   ls_Type, ls_Mask) = 1 Then
   li_Pos = Pos(ls_Path, ls_File)
End If

/// mostrar la imagen
Integer   li_Files, li_Cnt, li_Index
string ls_ruta

//Para el caso el control IMAGE se llama P_MOSTRAR
//y a la propiedad de la imagen le asignamos la ruta del
//archivo que acabamos de seleccionar.
//Se coloca la propiedad OriginalSize falsa porque asi todas las imagenes
//las coloca del tamaño de mi control, no cambia de tamaño segun el tamaño de
//la imagen.
p_mostrar.PictureName =  ls_Path
p_mostrar.OriginalSize = False

// Fin Evento Click boton CommandButton.

Hata ahi lo que se hace es seleccionar la imagen que se almacenara en la base de datos.
Para guardarla se hace lo siguiente:

Supongo que asociada a la imagen habran otras columnas que debes guardar al mismo tiempo, quiero decirte que se guardan por separado las columnas que son imagen de las que no lo son.

Si tienes un boton GUARDAR, este debe contener lo siguiente en el evento CLICK:


//Actualizar la informacion de la datawindow
if dw_2.update()=-1 then
   dw_2.setfocus()
   MessageBox("Error", "Informacion no almacenada")
   return
else  // Se almacenaron los datos de la  DATAWINDOW
        // proceder a guardar la imagen para este registro
   //Datos a utilizar para almacenar la imagen
   integer vueltas // Esta nos va a servir para barrer todos los bytes de la imagen
   blob b_blob, b_blob_total // Blob variables que vamos a utilizar para la imagen
   long longitud // Longitud de la imagen
   int archivo, bytes_leidos,i
   
   // Obtenemos la longitud de la imagen que esta en el control picture
       longitud = FileLength(p_mostrar.picturename)
   
   // Calculamos la longitud para leer la imagen por partes  
   IF longitud > 32765 THEN
       IF Mod(longitud, 32765) = 0 THEN
           vueltas = longitud/32765
       ELSE
           vueltas = (longitud/32765) + 1
       END IF
   ELSE
       vueltas = 1
   END IF
   
   // Abrimos el archivo en modo lectura
   archivo = FileOpen(p_mostrar.picturename, StreamMode!, Read!, LockRead!)
   
   //Leemos los bytes del archivo
   FOR i = 1 to vueltas
       bytes_leidos = FileRead(archivo, b_blob)
       b_blob_total = b_blob_total + b_blob
   NEXT
   
   // Cerramos el archivo
   FileClose(archivo)
   
 // Obtenemos el codigo del registro donde vamos a guardar la imagen   
  ls_codigo = dw_datos.getitemstring(dw_datos.getrow(),"codigo")
   
 // Actualizamos la columna de la imagen para el registro correspondiente
 // al CODIGO, para esto usamos la funcion UPDATEBLOB
   
   UPDATEBLOB NOMBRE_DE_TABLA
                 SET NOMBRE_COLUMNA_IMAGEN = :b_blob_total
            WHERE CODIGO = :ls_codigo ;
   
  //Verificamos si no hubo error
   if sqlca.sqldbcode <> 0 then
       MessageBox ("No se Pudo Actualizar!", sqlca.sqlerrtext)
       return
   end if
end if

// Fin del codigo guardar.


PARA RECUPERAR LA IMAGEN CUANDO HAGAS UN RETRIEVE
debes usar el siguiente codigo

// Recuperar y desplegar imagen
blob b_dibujo
int a
dec longi
string ls_codigo

ls_codigo = This.GetItemString(This.getrow(), "codigo")

SELECTBLOB NOMBRE_COLUMNA_IMAGEN
             into :b_dibujo
      from NOMBRE_DE_TABLA
     where CODIGO = :ls_codigo;

  IF isnull(b_dibujo) then
     // Si no tiene imagen mostrar una imagen que diga NOIMAGE
     p_mostrar.PictureName =  "c:\noimage.bmp"
  end if
     
if sqlca.sqldbcode <> 0 then
     MessageBox ("error al recuperar", sqlca.sqlerrtext)
     return
end if

//Desplegar la imagen
p_mostrar.SetRedraw(true)
a = p_mostrar.SetPicture(b_dibujo)
p_mostrar.SetRedraw(TRUE)

Las funciones para que sepas en detalle lo que significan puedes remitirte
a la ayuda de powerbuilder.


Espero te sirva o le sirva a alguien mas.

Que esten bien.

yansijanin

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Almacenar Y Leer Una Imagen En Sqlserver Con Pb 9.
« Respuesta #3 en: Viernes 1 de Febrero de 2008, 17:14 »
0
Gracias, me sirvió mucho este código.

Otra pregunta sería:
Qué puedo hacer si se quieren imprimir los datos guardados junto con la imagen.  Necesito desplegar las imágenes en un datawindow que será el reporte, pero cómo hago si no se puede seleccionar el campo de imagen al crear datawindow.

Les agredecería mucho su ayuda.