Insertar Imagenes Campo "Blob" Mysql [SOLUCIONADO]


Ir a la página Anterior  1, 2, 3

Objetivo: Re: Insertar Imagenes Campo "Blob" Mysql
He probado con tu código pero me sigue dando error cuando igualo Valor = RS["doc"].data

He mirado aqui http://www.mail-archive.com/gambas-...t/msg04539.html

DIM RS AS Result
DIM sImagen AS String


RS = modlnxgest.$Con.Exec("select doc from tipoarchivo where icono = 'PDF'")
sImagen = RS["doc"]
File.Save("/tmp/mas/imagen.png", sImagen)



Si ejecuto el código citado sobre estas lineas, no me da error, pero no crea de forma correcta la imagen

en cambio si nos fijamos en esta linea del código que tu me has pasado:
Valor = RS["doc"] 'valor es de tipo blob

Me da error type mismatch. wanted Blob, got String instead

Para que sea fácil la solución pero no se que puede estar fallando, si tu me dices que a ti te funciona pero a mi no

Versión de gambas la 2.21, componente gb.db y gb.db.mysql estan activados

última edición por estrella_de_galicia el Martes, 04 Enero 2011, 16:11; editado 1 vez
Objetivo: Re: Insertar Imagenes Campo "Blob" Mysql
No pongas valor=rs![doc].data. Eso tiene que dar error porque es erroneo.
Pon valor=rs!doc y así metes en valor el valor de la base de datos. Como valor lo tienes definido como blob de gambas (el otro es de mysql) ahora es cuando dispones de valor.data o valor.length para obtener los datos o su longitud.

te paso el código que a mi me funciona

Este es el código para meter un png en un campo blob
rs = cn.Create("prueba")
rs!ElBlob = File.Load(User.Home &/ "balon.png")
rs.update


Y este es el código para extraerlo y grabarlo en un archivo
Dim r AS Blob, f AS file, rr AS String

rs = cn.Exec("select last_insert_id() as reg")
rs = cn.Find("prueba", "codigo=&1", rs!reg)
r = rs!ElBlob
rr = r.Data
f = OPEN User.home &/ "prueba.png" FOR CREATE
WRITE #f, rr, r.Length
CLOSE (f)

Eso a mi me funciona bien. Cada vez que lo ejecuto me queda un archivo prueba.png que contiene un balón de baloncesto idéntico al que metí en la base de datos y que se llama balon.png.

Un saludo

última edición por soplo el Martes, 04 Enero 2011, 18:25; editado 1 vez
Perfil MP  
Objetivo: Re: Insertar Imagenes Campo "Blob" Mysql
Pues lo siento soplo pero me sigo diciendo que no, cuando igualo el campo BLOB
Código: [Descargar] [Ocultar]
  1. DIM RS AS Result
  2. DIM r AS Blob, f AS file, rr AS String
  3.  
  4. RS = modlnxgest.$Con.Exec("select * from tipoarchivo where icono = 'PDF'")
  5.  
  6. r = rs!doc
  7. rr = r.Data
  8. f = OPEN User.home &/ "prueba.png" FOR CREATE
  9. WRITE #f, rr, r.Length
  10. CLOSE (f)
  11.  


El error me lo pone en la linea 6

Al final me veo haciendo videoconferencia para averiguar el error jajaja

última edición por estrella_de_galicia el Martes, 04 Enero 2011, 23:28; editado 1 vez
Objetivo: Re: Insertar Imagenes Campo "Blob" Mysql
Si r es de tipo blob y rs!doc es de tipo blob es imposible que r=rs!doc te de type mismatch wanted blob get string instead

Ambos tienen que ser de tipo blob. Ese error lo obtienes si uno de los dos es de tipo string.

dim r as blob
...
r=rs!doc
...
...
r.data 'los datos
r.length 'la longitud

En el texto que me dices tienes definido el campo zimage como string y debería ser blob

Perfil MP  
Objetivo: Re: Insertar Imagenes Campo "Blob" Mysql
Te adjunto unas capturas de la estructura de la base de datos, pero sigo comentando que el campo es tipo BLOB

8b28f1c3904540817481006a70011922o

c574b8c41efdfa099c7bbee8d0867dc3o

53f56ab7a685ff3d369140c4ef65bb77o

Objetivo: Re: Insertar Imagenes Campo "Blob" Mysql
ya pero el campo al que lo mueves no es blob. sImagen es string y ese es tu error

Extraído del enlace que pusiste
DIM hResultado AS Result
DIM sImagen AS String

IF NOT Exist("/tmp/mas") THEN MKDIR "/tmp/mas"
hResultado = $hConn.Exec("SELECT * FROM `Imagenes`")
sImagen = hResultado["Imagen"].Data


Eso de hresultado["imagen"],data es incorrecto. Para referirte a ese campo haz hresultado!imagen o bien hresultado["imagen"]

Según ese texto sImagen es de tipo string y eso es incorrecto. Lo correcto es que fuera de tipo blob.
Para que funcionara bien sería así
DIM hResultado AS Result
DIM sImagen AS Blob

IF NOT Exist("/tmp/mas") THEN MKDIR "/tmp/mas"
hResultado = $hConn.Exec("SELECT * FROM `Imagenes`")
sImagen = hResultado["Imagen"]


A partir de eso puedes disponer de
sImagen.data 'devuelve los datos
sImage.length 'devuelve la longitud

Como muchas operaciones requieren string lo normal será copiar los datos a un string
Dim s as string
s=sImagen.data
Y ahora en s tienes los datos y haces con ellos lo que quieras.

Viendo tus pantallazos se me ocurre que otra cosa que no se como funcionará es que tienes definidas tus tablas como IISAM. Yo lo hago con Innodb.

última edición por soplo el Miercoles, 05 Enero 2011, 19:14; editado 1 vez
Perfil MP  
Objetivo: Re: Insertar Imagenes Campo "Blob" Mysql
Por fin lo he conseguido

¡¡Gracias Soplo!!

En el código que me enviaste (la adjunto para compartirlo con todo el mundo) crea la tabla, esto me sirvió para ver como crea el campo blob y este lo crea como LONGBLOB, asi pues, en mi tabla ha sido cambiar BLOB por LONGBLOB y problema solucionado!!!

Buf, esto ha costado lo suyo, pero finalmente ya he averiguado por donde estaba el error. En el MySQL hay que definir el campo BLOB como LONGBLOB

P.D: A ver si algún administrador puede cambiarle el titulo como [SOLUCIONADO] o [RESUELTO]

DIM Cn AS NEW Connection, Rs AS Result, tb AS Table, BB AS Blob, f AS file, Sstr AS String
cn.type = "mysql"
cn.Host = "localhost"
cn.User = "root"
cn.Password = "xxx" 'aquí tu clave
cn.Open()

TRY cn.Databases.Add("prueba")
IF ERROR THEN
cn.Databases.Remove("prueba")
ELSE
cn.Close
cn.name = "prueba"
cn.open()
tb = cn.Tables.Add("prueba", "Innodb")
tb.Fields.Add("codigo", db.Serial)
tb.Fields.Add("ElBlob", db.Blob)
tb.primarykey = ["codigo"]
tb.update

rs = cn.Create("prueba")
rs!ElBlob = File.Load(User.Home &/ "balon.png")
rs.update

'ahora extraer el png insertado en la tabla
rs = cn.Exec("select last_insert_id() as reg")
rs = cn.Find("prueba", "codigo=&1", rs!reg)
BB = rs!ElBlob
Sstr = BB.Data
f = OPEN User.home &/ "prueba.png" FOR CREATE
WRITE #f, Sstr, BB.Length
CLOSE (f)
ENDIF

última edición por estrella_de_galicia el Miercoles, 12 Enero 2011, 22:52; editado 1 vez
Ir a la página Anterior  1, 2, 3

Página 3 de 3


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4325s (PHP: -74% SQL: 174%)
Consultas SQL: 50 - Debug off - GZIP Activado