Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 3 de 3
Ir a la página Anterior  1, 2, 3
 
Insertar Imagenes Campo "Blob" Mysql [SOLUCIONADO]
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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 
estrella_de_galicia - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
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 
estrella_de_galicia - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Saludos / Best Regards

Pedro Aguilar

http://edrossuse.blogspot.com
Desarrollador de LNXGEST
 
estrella_de_galicia - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
estrella_de_galicia - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Un Detalle Con El Insert Into Gambas Value... jousseph Bases de Datos 5 Domingo, 04 Noviembre 2012, 20:58 Ver último mensaje
Shell
No hay nuevos mensajes PhP Y Mysql: Borrado De Registros "so... jsbsan PHP 9 Miercoles, 01 Octobre 2014, 23:14 Ver último mensaje
jguardon
No hay nuevos mensajes Insertar Un Campo Blob En Gambas. ramon_661 Bases de Datos 5 Domingo, 28 Agosto 2016, 08:12 Ver último mensaje
shordi
No hay nuevos mensajes Duda Con Campo "Fecha" En SQLite gambafeliz Bases de Datos 2 Miercoles, 21 Agosto 2019, 06:23 Ver último mensaje
gambafeliz
 

Publicar nuevo tema  Responder al tema  Página 3 de 3
Ir a la página Anterior  1, 2, 3

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron