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.

Mysql y guardar imagenes, rtf, etc...

Foro público de Xailer en español
Responder
Fredy
Mensajes: 199
Registrado: Mié Mar 29, 2006 1:28 am

Mysql y guardar imagenes, rtf, etc...

Mensaje por Fredy »

Hola!
Alguien ha podido, o tiene un ejemplo de cómo guardar imágenes o ficheros
rtf en un tabla mysql.
Ojo, no me vale usar DataControls ni DataSets. Tiene que ser directamente
con el el DataSource, con una llamada a oMySqlDatasource:Execute.
Si por ejemplo tengo un ::oRichEdit1, hay que hacer así­ como
oMySqlQuery1:Execute("Update documentos set texto='"+::oRichEdit1:cText+"'
where codigo=1")
He probado absolutamente todo lo que se me ha ocurrido y MySql se empeña
en quitarme las y no te digo nada cuando hay comillas o sí­mbolos aún más
raros.
Por supuesto el campo es un blob, y tal y tal.
Al final lo he conseguido, pero a costa de usar mime para la codificación
a través de un ocx que además es de pago.
¿Alguien sabe cómo hacerlo "a pelo"?, o si nó, alguna librerí­a u ocx que
permita usar base64, se pueda usar en Xailer y sea gratuita.
1 Saludico,
Fredy
Martin Del Angel
Mensajes: 360
Registrado: Mié Dic 03, 2008 5:05 am

Mysql y guardar imagenes, rtf, etc...

Mensaje por Martin Del Angel »

On 4/29/2011 8:40 PM, Fredy wrote:
> Hola!
>
> Alguien ha podido, o tiene un ejemplo de cómo guardar imágenes o
> ficheros rtf en un tabla mysql.
> Ojo, no me vale usar DataControls ni DataSets. Tiene que ser
> directamente con el el DataSource, con una llamada a
> oMySqlDatasource:Execute.
>
> Si por ejemplo tengo un ::oRichEdit1, hay que hacer así­ como
> oMySqlQuery1:Execute("Update documentos set
> texto='"+::oRichEdit1:cText+"' where codigo=1")
>
> He probado absolutamente todo lo que se me ha ocurrido y MySql se empeña
> en quitarme las y no te digo nada cuando hay comillas o sí­mbolos aún
> más raros.
> Por supuesto el campo es un blob, y tal y tal.
>
> Al final lo he conseguido, pero a costa de usar mime para la
> codificación a través de un ocx que además es de pago.
>
> ¿Alguien sabe cómo hacerlo "a pelo"?, o si nó, alguna librerí­a u ocx que
> permita usar base64, se pueda usar en Xailer y sea gratuita.
>
> 1 Saludico,
> Fredy
>
>
Hola Fredy:
Me puedes mandar alguna imagen (archivo) de las que deseas grabar, para
hacer pruebas.
yo tengo algo hecho para grabar archivos PFDs en Campos BLOB.
Saludos...
Martin Del Angel
Mensajes: 360
Registrado: Mié Dic 03, 2008 5:05 am

Mysql y guardar imagenes, rtf, etc...

Mensaje por Martin Del Angel »

On 4/29/2011 8:40 PM, Fredy wrote:
> Hola!
>
> Alguien ha podido, o tiene un ejemplo de cómo guardar imágenes o
> ficheros rtf en un tabla mysql.
> Ojo, no me vale usar DataControls ni DataSets. Tiene que ser
> directamente con el el DataSource, con una llamada a
> oMySqlDatasource:Execute.
>
> Si por ejemplo tengo un ::oRichEdit1, hay que hacer así­ como
> oMySqlQuery1:Execute("Update documentos set
> texto='"+::oRichEdit1:cText+"' where codigo=1")
>
> He probado absolutamente todo lo que se me ha ocurrido y MySql se empeña
> en quitarme las y no te digo nada cuando hay comillas o sí­mbolos aún
> más raros.
> Por supuesto el campo es un blob, y tal y tal.
>
> Al final lo he conseguido, pero a costa de usar mime para la
> codificación a través de un ocx que además es de pago.
>
> ¿Alguien sabe cómo hacerlo "a pelo"?, o si nó, alguna librerí­a u ocx que
> permita usar base64, se pueda usar en Xailer y sea gratuita.
>
> 1 Saludico,
> Fredy
>
>
Fredy hola:
mandame por favor un archivo de los que quieres grabar en mysql .
Saludos...
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Mysql y guardar imagenes, rtf, etc...

Mensaje por jlalin »

Fredy,
en xHarbour habí­a alguna función para convertir a base64, busca por
hb_base64 en los fuentes.
Saludos,
José Lalí­n
Fredy
Mensajes: 199
Registrado: Mié Mar 29, 2006 1:28 am

Mysql y guardar imagenes, rtf, etc...

Mensaje por Fredy »

Hola José,
Tengo dos problemas con hb_base64
Que es un poco lenta y que por mucho que he buscado creo que no hay una función
para decodificar :(
1 Saludico,
Fredy
> Fredy,
>
> en xHarbour habí­a alguna función para convertir a base64, busca por
> hb_base64 en los fuentes.
>
> Saludos,
> José Lalí­n
Fredy
Mensajes: 199
Registrado: Mié Mar 29, 2006 1:28 am

Mysql y guardar imagenes, rtf, etc...

Mensaje por Fredy »

Hola Martin,
Estoy usando un documento escrito en wordpad y guardado en formato rtf que
dice : Esto es un documento escrito en wordpad.
Con los jpg puedes probar con el xailer.jpg que viene con el propio xailer.
Te dejo un pdf con los resultados que obtengo en http://hotfile.com/dl/116584049/39789ed ... o.pdf.html
El problema es que para hacer un insert o update desde código de un fichero
binario o con formato extraño, tí­picos de los campos blob tenemos que llamar
a execute pasándole una cadena de TEXTO y el contenido de la variable a utilizar
tiene caracteres no válidos para dicha cadena de texto, por eso la única
solición que veo es convertirlo mediante mime a algo que sí­ sea válido para
una cadena de texto.
Es el mismo problema que tienen los servidores de correo o los grupos de
noticias como este para guardar los ficheros adjuntos y terminan codificando
en base64 o alguno parecido, que lo transforma todo a letras y números. La
duda es lo larga que puede llegar a ser una cadena de texto que se le pase
al execute.
1 Saludico,
Fredy
> On 4/29/2011 8:40 PM, Fredy wrote:
>
>> Hola!
>>
>> Alguien ha podido, o tiene un ejemplo de cómo guardar imágenes o
>> ficheros rtf en un tabla mysql.
>> Ojo, no me vale usar DataControls ni DataSets. Tiene que ser
>> directamente con el el DataSource, con una llamada a
>> oMySqlDatasource:Execute.
>> Si por ejemplo tengo un ::oRichEdit1, hay que hacer así­ como
>> oMySqlQuery1:Execute("Update documentos set
>> texto='"+::oRichEdit1:cText+"' where codigo=1")
>>
>> He probado absolutamente todo lo que se me ha ocurrido y MySql se
>> empeña
>> en quitarme las y no te digo nada cuando hay comillas o sí­mbolos
>> aún
>> más raros.
>> Por supuesto el campo es un blob, y tal y tal.
>> Al final lo he conseguido, pero a costa de usar mime para la
>> codificación a través de un ocx que además es de pago.
>>
>> ¿Alguien sabe cómo hacerlo "a pelo"?, o si nó, alguna librerí­a u ocx
>> que permita usar base64, se pueda usar en Xailer y sea gratuita.
>>
>> 1 Saludico,
>> Fredy
> Fredy hola:
>
> mandame por favor un archivo de los que quieres grabar en mysql .
>
> Saludos...
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Mysql y guardar imagenes, rtf, etc...

Mensaje por jfgimenez »

Fredy,
> ¿Alguien sabe cómo hacerlo "a pelo"?, o si nó, alguna librerí­a u ocx que
> permita usar base64, se pueda usar en Xailer y sea gratuita.
No necesitas ni base64 ni ninguna otra codificación. Utiliza algo así­:
::oDataSource:Execute( "INSERT INTO documentos(Id, Contenido) VALUES('"
+ ;
cId + "', X'" + StringToHex( cBuffer ) + "')" )
Ojo a las comillas simples y dobles. Lo mejor es que copies ese texto al
editor de código y lo revises ahí­.
El "truco" está en convertir la cadena a hexadecimal, y en la sentencia SQL
utilizar X'...' en vez de '...', es decir, poniendo una X delante de la
cadena.
No obstante, esto funciona al 100% en SQLite, y también en MySQL... siempre
que la cadena no sea más grande del tamaño de los buffers de comunicacion de
MySQL, que por defecto son de 1MB. Es decir, que por defecto no vas a poder
grabar contenidos de más de 1/2 MB. Para sobrepasar ese lí­mite, lo mejor es
utilizar un dataset, aunque sea creado expresamente al vuelo, ya que los
dataset de Xailer utilizan una técnica de envio de datos por bloques, y por
lo tanto no les afecta esa limitación. Serí­a algo así­:
WITH OBJECT ::oDataSource:Query( "SELECT * FROM documentos WHERE 0" )
:Open()
:AddNew()
:Id := nId
:Contenido := cBuffer
:Update()
:End()
END
Fí­jate en la cláusula "WHERE 0", que permite abrir el query sin llegar a
obtener ningún registro, y por tanto no consume ancho de banda ni casi
ningún recurso del servidor.
Y por cierto, con ambas técnicas, el contenido grabado es directamente lo
que quieres grabar, sin codificar en ningún sistema concreto. Vamos, que el
blob contendrá exactamente los datos en binario de lo que tú quieres.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Responder