Página 1 de 1

Mysql y guardar imagenes, rtf, etc...

Publicado: Sab Abr 30, 2011 3:40 am
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

Mysql y guardar imagenes, rtf, etc...

Publicado: Sab Abr 30, 2011 5:59 pm
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...

Mysql y guardar imagenes, rtf, etc...

Publicado: Lun May 02, 2011 3:38 pm
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...

Mysql y guardar imagenes, rtf, etc...

Publicado: Lun May 02, 2011 4:44 pm
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

Mysql y guardar imagenes, rtf, etc...

Publicado: Mar May 03, 2011 1:19 am
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

Mysql y guardar imagenes, rtf, etc...

Publicado: Mar May 03, 2011 1:37 am
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...
>

Mysql y guardar imagenes, rtf, etc...

Publicado: Mar May 03, 2011 1:12 pm
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