Imagenes en Mysql

Imagenes en Mysql

Postby jponce » Tue Jan 25, 2011 3:35 am

Hola a todos.


Tengo una consulta como puedo cargar una foto a un campo mediumblob de mysql, necesito saber como subirla y como desplegarla en pantalla.

de atemano muy agradecido.

Atentamente
Julio Ponce
Guatemala
jponce
 
Posts: 194
Joined: Fri Apr 18, 2008 4:21 pm
Location: Guatemala

Re: Imagenes en Mysql

Postby Willi Quintana » Tue Jan 25, 2011 3:53 pm

Hola, depende de la herramienta que uses para MySQL, pero podrias convertir la imagen a hexadecimal y asi guardarla como un archivo bin a un campo blob,,
Salu2
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Imagenes en Mysql

Postby jponce » Tue Jan 25, 2011 3:57 pm

Hola
No entiendo de la herramienta de mysql, trabajo con mysql 5.1.

Atentamente
Julio Ponce
jponce
 
Posts: 194
Joined: Fri Apr 18, 2008 4:21 pm
Location: Guatemala

Re: Imagenes en Mysql

Postby Willi Quintana » Tue Jan 25, 2011 8:13 pm

Que usas para acceder a MySQL, estan EAGLE1, TMySQL, TDophin, ADO, y otras mas,,, que trabajan juntamente con FW.
Salu2
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Imagenes en Mysql

Postby carlos vargas » Tue Jan 25, 2011 9:37 pm

Con este codigo que les comparto no he tenido problmeas, incluso desde los los manejadores de mysql se visualiza la imagen almacenada.
las funciones StrFle y FileStr son parte de la libreria CT de [x]harbour.
incluso desde dbfcdx y la imagen almacenada en un campo memo, tampo e tenido problemas.

esto es lo implementado ....

salu2

Code: Select all  Expand view

   ...

   IF lNuevo

      /*inicializa variables*/
      cCodigo := StrZero( CTRL->NUM_ALU + 1, 6 )

      /*carga buffer del alumno con datos en blanco*/
      oDBAlumno:blank()

      /*modifica algunos datos a valores por defecto en el buffer*/
      oDBAlumno:codigo  := cCodigo

      /*carga la foto*/
      Alumnos_LoadPhoto()

      /*titulo del dialogo*/
      cTitulo := " Alumno No. : " + oDBAlumno:codigo

   ELSE

      /*verifica su tabla esta vacia*/
      IF ALUM->( Eof() )

         /*muestra mensaje indicando que tabla de datos esta vacia*/
         MsgAlert( "No existen alumnos registrados, nada que editar!", "Tabla vacia!" )
         RETURN

      ENDIF

      /*carga buffer con los datos de la tabla*/
      oDBAlumno:load()

      /*carga la foto*/
      Alumnos_LoadPhoto()

      /*titulo del dialogo*/
      cTitulo := " Alumno No. : " + oDBAlumno:codigo + " (" + RTrim( oDBAlumno:nombre ) + ")"

   ENDIF
   DEFINE DIALOG ......

   REDEFINE IMAGE    oFoto                  ID 108 OF PAGE1 FILENAME cFoto ADJUST
   REDEFINE BUTTON                           ID 109 OF PAGE1 ACTION Alumnos_SetPhoto()
   REDEFINE BUTTON                           ID 110 OF PAGE1 ACTION Alumnos_ClearPhoto()

   ...
 


Code: Select all  Expand view

PROCEDURE Alumnos_SetPhoto()
   LOCAL cFotoPict := ".\MYPICT.JPG"
   LOCAL cPictFile := cGetFile( "JPEG (*.jpg)| *.jpg|"   + ;
                                "PNG (*.png)| *.png|"    + ;
                                "BMP (*.bmp)| *.bmp|"    + ;
                                "All Files (*.*)| *.*"   , ;
                                "Seleccione una foto en JPG o PNG", 3, GetFolderMyPictures() )
   /*si selecciono una foto*/
   IF !Empty( cPictFile ) .and. File( cPictFile )

      /*la foto seleccionada se carga en una variable y se pasa al buffer del alumno*/
      oDBAlumno:foto := FileStr( cPictFile )

      /*graba foto a un archivo local*/
      StrFile( oDBAlumno:foto, cFotoPict )

      /*se indica que la foto a mostrase es la que se acaba de guardar a disco*/
      cFoto := cFotoPict

      /*se muestra la foto*/
      oFoto:LoadBmp( cFoto )

   ENDIF

RETURN

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Alumnos_LoadPhoto( lShow )
   LOCAL cFotoTemp := ".\NOPICT.JPG"
   LOCAL cFotoPict := ".\MYPICT.JPG"

   /*por defecto no se muestra la foto*/
   DEFAULT lShow := FALSE

   /*si el buffer de la foto no esta vacio*/
   IF !Empty( oDBAlumno:foto )

      /*graba foto a un archivo local*/
      StrFile( oDBAlumno:foto, cFotoPict )

      /*se indica que la foto a mostrase es la que se acaba de guardar a disco*/
      cFoto := cFotoPict

   ELSE

      /*se indica que la foto que se mostrara es la vacia por defecto*/
      cFoto := cFotoTemp

   ENDIF

   /*si pidio que se muestre*/
   IF lShow
      oFoto:LoadBmp( cFoto )
   ENDIF

RETURN

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Alumnos_ClearPhoto()
   LOCAL cFotoTemp := ".\NOPICT.JPG"

   /*limpia buffer de la foto*/
   oDBAlumno:foto := ""

   /*se indica que la foto que se mostrara es la por defecto*/
   cFoto := cFotoTemp

   /*se muestra la foto*/
   oFoto:LoadBmp( cFoto )

RETURN

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Alumnos_GetPhoto()

   /*TODO:Get Photo from webcam, this is for version 2.0 :-)*/

RETURN

/*-------------------------------------------------------------------------------------------------*/
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Imagenes en Mysql

Postby jponce » Tue Jan 25, 2011 11:58 pm

Hola

Por lo que puedo ver en tu codigo lo estas haciendo en una dbf, podrias mostrar un ejemplo de como hacerlo exactamente con Mysql.

y mil disculpas.

Atentamente
Julio Ponce
jponce
 
Posts: 194
Joined: Fri Apr 18, 2008 4:21 pm
Location: Guatemala

Re: Imagenes en Mysql

Postby carlos vargas » Wed Jan 26, 2011 2:33 am

la verdad es que estoy usando mysql con sqlrdd o dbf con solo recompilar :-)
el tipo de dato en mysql es
Code: Select all  Expand view

foto        mediumblob   NULL               YES             (NULL)  
...
           `cedula` varchar(16) default NULL,              
           `foto` mediumblob,                              
           `direccion` varchar(60) default NULL,  
 
 


por lo que no es muy complicado si se usa mysql desde otro tipo de librera como tdolphin o tmysql

salu2
carlos vargas


Code: Select all  Expand view

/*-------------------------------------------------------------------------------------------------*/
/*abre tablas segun motor de datos*/
FUNCTION AbrirTablas( lShared )

   #ifndef __SQLRDD__
   IF !AbrirTablas_ADS( lShared )
      RETURN FALSE
   ENDIF
   #else
   IF !AbrirTablas_MYSQL( lShared )
      RETURN FALSE
   ENDIF
   #endif

RETURN TRUE
 


Code: Select all  Expand view

/*-------------------------------------------------------------------------------------------------*/
/**/
PROCEDURE CrearTabla_Alumnos()
   LOCAL aEstruc := {}

   aadd( aestruc, { "codigo",     "c", 06, 00 } ) //codigo de alumno (incremental)
   ...
   aadd( aestruc, { "cedula",     "c", 16, 00 } ) //numero de cedula
   aadd( aestruc, { "foto",       "m", 10, 00 } )
   ...
   index on codigo tag codigo for !deleted()
   ...
   DBCloseAll()

RETURN
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Imagenes en Mysql

Postby jponce » Wed Jan 26, 2011 4:09 am

Hola Willi

Como se haria en eagle o en tdolphin?

Atentamente
Julio Ponce
jponce
 
Posts: 194
Joined: Fri Apr 18, 2008 4:21 pm
Location: Guatemala

Re: Imagenes en Mysql

Postby Daniel Garcia-Gil » Wed Jan 26, 2011 9:34 am

Julio

Willi Quintana wrote:Que usas para acceder a MySQL, estan EAGLE1, TMySQL, TDophin, ADO, y otras mas,,, que trabajan juntamente con FW.
Salu2
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Imagenes en Mysql

Postby jponce » Wed Jan 26, 2011 12:49 pm

Uso Eagle1.

Atentamente
Julio Ponce
jponce
 
Posts: 194
Joined: Fri Apr 18, 2008 4:21 pm
Location: Guatemala

Re: Imagenes en Mysql

Postby Daniel Garcia-Gil » Wed Jan 26, 2011 1:34 pm

Julio

sigue este hilo desde el foro oficial de eagle1

http://es.groups.yahoo.com/group/eagle1/message/1542
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Imagenes en Mysql

Postby Carles » Wed Jan 26, 2011 3:04 pm

Hola Daniel,

Aprovecho la consulta... A veces me da error al grabar un archivo binario en un campo blob, Y ya no se mirar de la clase, pero basicamente el ejemplo seria:

Code: Select all  Expand view
#include 'fivewin.ch'

#define P_SERVER        'localhost'
#define P_USER          'root'
#define P_PASSW         'pol'
#define P_PORT           3306
#define P_FLAGS          0
#define P_DBNAME        'test'

STATIC oDb

*--------------
FUNCTION Main()
*--------------
    LOCAL cFile, uData, cSql

    IF !ConectaDb()
       RETU NIL
    ENDIF

    cFile := cGetFile( '*.*' )

    IF !File( cFile )
       RETU NIL
    ENDIF

    uData := D_ReadFile( cFile )
    uData := Val2Escape( uData )
    uData := ClipValue2Sql( uData )

    cSql  := "INSERT INTO image SET data = " + uData

    MsgInfo( oDb:execute( cSql ) )

RETU NIL

*-------------------
FUNCTION ConectaDb()
*-------------------

   oDb := TDolphinSrv():New( P_SERVER, P_USER, P_PASSW, P_PORT, ;
                             P_FLAGS,  P_DBNAME, ;
                             {| oServer, nError, lInternal | GetError( oServer, nError, lInternal  ) } )

RETU !oDb:lError

*-----------------------------------------------------
STATIC FUNCTION GetError( oServer, nError, lInternal )
*-----------------------------------------------------
   LOCAL cText := ""

   cText += "Descripcio:" + Chr( VK_TAB ) + oServer:ErrorTxt() + CRLF
   cText += "Error No:  " + Chr( VK_TAB ) + ltrim(Str( nError )) + CRLF
   cText += "Internal:  " + Chr( VK_TAB ) + If( lInternal, "Yes", "No" ) + CRLF
   
   MsgAlert( cText, 'Error en conexio a MySql' )
   
RETU NIL
 


La definicion de tabla ...
Code: Select all  Expand view
CREATE TABLE IF NOT EXISTS `image` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data` longblob NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


Cuando el fichero es grande, muchas veces da error :cry:

Hago algo mal ??? :D
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1090
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: Imagenes en Mysql

Postby Daniel Garcia-Gil » Wed Jan 26, 2011 3:56 pm

Carles

Probando...
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Imagenes en Mysql

Postby Daniel Garcia-Gil » Wed Jan 26, 2011 4:51 pm

Carles

he probado el ejemplo testfile.prg en la carpeta samples de dolphin, subi 2 videos de 24Mb 1 de 3.5 mb y otro de 5Mb no he tenido problemas

por favor verificarlo, mira el ejemplo como lo he hecho ejecutalo y pruebalo...

ahora voy a probar con el codigo que has puesto

Gracias
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Imagenes en Mysql

Postby Carles » Wed Jan 26, 2011 5:05 pm

Daniel,

Cony !!! Pues el ejemplo q he puesto es basico y en base al ejemplo testfile:
- Leer fichero
- Sacar valores de escape
- Cascarles las comillas
- Generar sentencia

y ya esta

Uhmmmm

Sera algo de la configuracion de MySql ?

Yo tambien sigo con las pruebas

Gracias Daniel
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1090
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 70 guests