|
Página 3 de 3
|
Insertar Imagenes Campo "Blob" Mysql [SOLUCIONADO]
Autor |
Mensaje |
estrella_de_galicia
Programador
Registrado: Enero 2010
Mensajes: 110
Edad: 41 Ubicación: Terrassa
|
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
=================== Saludos / Best Regards
Pedro Aguilar
http://edrossuse.blogspot.com
Desarrollador de LNXGEST
última edición por estrella_de_galicia el Martes, 04 Enero 2011, 16:11; editado 1 vez
|
#21 Martes, 04 Enero 2011, 16:10 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
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
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
|
#22 Martes, 04 Enero 2011, 18:25 |
|
|
estrella_de_galicia
Programador
Registrado: Enero 2010
Mensajes: 110
Edad: 41 Ubicación: Terrassa
|
Re: Insertar Imagenes Campo "Blob" Mysql
Pues lo siento soplo pero me sigo diciendo que no, cuando igualo el campo BLOB
El error me lo pone en la linea 6
Al final me veo haciendo videoconferencia para averiguar el error jajaja
=================== Saludos / Best Regards
Pedro Aguilar
http://edrossuse.blogspot.com
Desarrollador de LNXGEST
última edición por estrella_de_galicia el Martes, 04 Enero 2011, 23:28; editado 1 vez
|
#23 Martes, 04 Enero 2011, 23:26 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
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
|
#24 Miercoles, 05 Enero 2011, 04:19 |
|
|
estrella_de_galicia
Programador
Registrado: Enero 2010
Mensajes: 110
Edad: 41 Ubicación: Terrassa
|
Re: Insertar Imagenes Campo "Blob" Mysql
=================== Saludos / Best Regards
Pedro Aguilar
http://edrossuse.blogspot.com
Desarrollador de LNXGEST
|
#25 Miercoles, 05 Enero 2011, 10:07 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
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
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í
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
|
#26 Miercoles, 05 Enero 2011, 14:55 |
|
|
estrella_de_galicia
Programador
Registrado: Enero 2010
Mensajes: 110
Edad: 41 Ubicación: Terrassa
|
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
=================== Saludos / Best Regards
Pedro Aguilar
http://edrossuse.blogspot.com
Desarrollador de LNXGEST
última edición por estrella_de_galicia el Miercoles, 12 Enero 2011, 22:52; editado 1 vez
|
#27 Miercoles, 12 Enero 2011, 22:51 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 3 de 3
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|