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?
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
StringToHex() para guardar una foto en mysql
-
- Mensajes: 294
- Registrado: Jue Mar 13, 2008 3:03 pm
StringToHex() para guardar una foto en mysql
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))
cImagen:=MEMOREAD("c:imagenimg.jpg")
cCon:=" insert into imagenes set";
+" ,imagen=X'"+StringToHex(cImagen)+"'"
appData:origen1:execute(cCon,cCon))
-
- Mensajes: 294
- Registrado: Jue Mar 13, 2008 3:03 pm
StringToHex() para guardar una foto en mysql
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
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
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
> 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
-
- Mensajes: 294
- Registrado: Jue Mar 13, 2008 3:03 pm
StringToHex() para guardar una foto en mysql
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
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
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.