Página 1 de 1
StringToHex() para guardar una foto en mysql
Publicado: Jue Sep 02, 2010 6:45 pm
por Fernando Leal
Así se guarda la info en una tabla de mysql
cFoto := StringToHex( MEMOREAD( "Foto.jpg" ) )
// La foto pesa 8 kb y al usar un len( cFoto ) te dice que son 16 kb
AppData:oBase:Execute( "UPDATE Fotos SET foto = '" + cFoto + "' WHERE RowId = 5" )
Lo que estoy buscando es si la foto pesa 8 kb que se guarden 8 kb
¿Alguna idea?
StringToHex() para guardar una foto en mysql
Publicado: Vie Sep 03, 2010 5:56 pm
por Jaxmax
yo la guardo así, y por ejemplo con un jpg que pesa 80kb al momento de checarlo ya en la tabla el campo blob pesa los 80kb no me duplica el tamaño
cImagen:=MEMOREAD("c:imagenimg.jpg")
cCon:=" insert into imagenes set";
+" ,imagen=X'"+StringToHex(cImagen)+"'"
appData:origen1:execute(cCon,cCon))
StringToHex() para guardar una foto en mysql
Publicado: Vie Sep 03, 2010 10:49 pm
por Fernando Leal
Hola,
Ya había notado ese código de guardar
foto = X'" + StringToHex( cFoto ) + "'"
Pero pensé que era una metida de pata lo de usar X
Bien, al guardarlo de esa manera y recuperarlo con
cFoto := AppData:oBase:QueryValue( "SELECT foto FROM Empleados WHERE ID = 5")
Al usar len( cFoto ) mide 8
y para mostarlo en mi programa uso.
::oImage1:oPicture:=TPicture():LoadFromStream(cFoto)
Excelente... gracias por ayudarme
Saludos
Fernando Leal
México, DF
StringToHex() para guardar una foto en mysql
Publicado: Dom Sep 05, 2010 2:52 pm
por jfgimenez
Fernando,
> Ya había notado ese código de guardar foto = X'" + StringToHex( cFoto ) +
> "'"
>
> Pero pensé que era una metida de pata lo de usar X
La X al comienzo de una cadena le indica a MySql que lo que viene detrás es
una cadena de valores hexadecimales del contenido real. Es decir, la cadena:
X'01020304FF'
equivale a:
chr( 1 ) + chr( 2 ) + chr( 3 ) + chr( 4 ) + chr( 255 )
pero evitando los caracteres de control que provocarían errores al
interpretar la sentencia.
Pero al convertir el contenido (la foto) a una cadena hexadecimal, ocupa el
doble de tamaño, con lo que la sentencia se hace muy muy grande. Y MySql
tiene por defecto un tamaño de buffer de comunicación de 1MB, lo que limita
en la práctica que puedas guardar una foto de más 500KB.
Pero si en vez de la sentencia utilizas un dataset, entonces no vas a tener
ningún problema, porque Xailer ya se encarga de trocearla y enviarla al
servidor. Y además, sin convertirla a hexadecimal, con lo que ahorras ancho
de banda.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
StringToHex() para guardar una foto en mysql
Publicado: Lun Sep 06, 2010 2:20 pm
por Fernando Leal
José,
Ya puesto a código quedaría así
Para guardar
cFoto := MEMOREAD( "Foto.jpg" )
::oSQLQuery1:cSelect := "SELECT ID, foto FROM Empleados WHERE ID = 5"
::oSQLQuery1:lOpen := .T.
::oSQLQuery1:foto := cFoto
::oSQLQuery1:lOpen := .F.
Y para leer y mostrar en el formulario.
cFoto := AppData:oBase:QueryValue( "SELECT foto FROM Empleados WHERE ID = 5'"
::oImage1:oPicture:=TPicture():LoadFromStream(cFoto)
Gracias
Fernando Leal
StringToHex() para guardar una foto en mysql
Publicado: Lun Sep 06, 2010 5:28 pm
por Jaxmax
Si, con el datasource nativo de mysql y datasets te evitas convertirla a hexadecimal, pero para los que no tienen versión Enterprise de Xailer no es opción.