Guardar imagen en base de datos sqlite

Hola a todos, soy nuevo en xojo, vengo de visual basic 6, y estoy muy muy verde.
Me ha costado mucho comenzar a usar sqlite ya que venia de mdb. Resulta que ya se crear, modificar y borrar registros.
Pero tengo un imagewell con una foto y me gustaria guardarla en otra tabla creada que se llama “Fotos”, y tiene 2 campos: “ID” y otro BLOB que se llama “Foto”

¿alguien seria tan amable de ponerme el codigo de como guardaria una imagen en la tabla “fotos” de esa base de datos?. Llevo 2 dias y no encuentro nada para mi, que sea sencillo y bien explicado. Tambien me gustaria saber el poder leerla de esa base de datos para ponerla de nuevo en otro imagewell.

Un saludo

En SQLite es fcil, con recordset.edit y recordset.field(“nombre_columna”).PictureValue o con DatabaseRecord.

Desafortunadamente no funciona as para las otras bases de datos, en la ayuda hay ejemplos.

[quote=267519:@Bernardo Monsalve]En SQLite es fácil, con recordset.edit y recordset.field(“nombre_columna”).PictureValue o con DatabaseRecord.

Desafortunadamente no funciona así para las otras bases de datos, en la ayuda hay ejemplos.[/quote]

Muchas gracias por la rapida respuesta bernardo. Solo que tal cual me lo pones no se. Ya que he aprendido de tutoriales pero con slqexecute y para meter regisrros era con insert to… no se si me has entendido. Esto que me has puesto, que lo veo sencillo, me recuerda al visual basic que yo lo hacia con recordset update, add y todo eso. Pero aqui no se como funciona. No sabia que habia 2 metodos para trabajar con sqlite.

Si me puedes orientar mejor te lo agradeceria. Un saludo

ahhh es mejor, con sentencias SQL, el campo en la table es string; para insertar en db:

Dim pTmp As Picture= SaveFile // algun picture
Dim mTmp As MemoryBlock= pTmp.GetData(Picture.FormatPNG)
Dim sPict As String= EncodeBase64(mTmp.StringValue(0, mTmp.Size))

database.SQLExecute(“INSERT INTO tabla (foto) VALUES (’”+ sPict+ “’) ;”)

If database.Error Then

End If

Actualizar:


database.SQLExecute(“UPDATE taba SET foto=’”+ sPict+ “’ ;”)

Para cargar la foto:

Dim rs As RecordSet= database.SQLSelect(“SELECT * FROM table;”)

Dim pTmp As Picture= Picture.FromData(DecodeBase64(rs.Field(“foto”).StringValue))
’ or Dim pTmp As Picture= Picture.FromData(DecodeBase64(DecodeHex(rs.Field(“foto”).StringValue)))

Gracias Bernardo, guardarla ya he conseguido guardarla, pero luego al cargarla no me la carga. porque yo lo que hago es esto supongo:

Dim pTmp As Picture= Picture.FromData(DecodeBase64(rc_Fotos_Perfil.Field(“foto”).StringValue))
imagewell1.image=pTmp

y nada, no me hace nada

Lo que si tengo en la base de datos es el campo “foto” como BLOB, no como TEXT

[quote=267653:@Antonio Peralta Hitos]Gracias Bernardo, guardarla ya he conseguido guardarla, pero luego al cargarla no me la carga. porque yo lo que hago es esto supongo:

Dim pTmp As Picture= Picture.FromData(DecodeBase64(rc_Fotos_Perfil.Field(“foto”).StringValue))
imagewell1.image=pTmp

y nada, no me hace nada

Lo que si tengo en la base de datos es el campo “foto” como BLOB, no como TEXT[/quote]

sip, utilice:

Dim pTmp As Picture= Picture.FromData(DecodeBase64(DecodeHex(rs.Field("foto").StringValue)))

Lo q pasa es q al trasladar memoryblock a string el codifica como Hex. no recordaba cual c utiliza.

Bernardo muchiiiisimas gracias. Con lo ultimo que me pusiste no lo he conseguido, pero con lo primero que me dejaste los enlaces de la ayuda de xojo si que lo he conseguido, y me es mas facil trabajar con recordsets de esa manera, ya que se asemeja muchisimo a visual basic.

Esto es lo que tengo para leerlas de la base de datos y me funciona perfecto!!:

Dim productImage As Picture
productImage = rc_fotos_perfil.Field("Foto").PictureValue
ImageWell1.image=productImage

Muchisimas gracias

Ahora solo me falta para que quede perfecto, saber como reescalo la imagen de la base de datos al imagewell, ya que ste control no tiene ajustar la imagen al control como el image de visual basic. No entiendo como no tiene eso, hecho en falta muchas cosas de vb6, y ste siendo mas moderno no me explico como no las tiene.

Si sabes de alguna manera sencilla de como hacer para que me salga la foto completa en el imagewell pues ya hasta te invito a una cerveza cuando vengas a Granada jajaja. Porque he mirado algo pero ando muy perdido y lo poco que he visto no es para un imagewell y ni me entero tampoco.

Un saludo y disculpa tantas preguntas, soy demasiado novato.

Si, es algo común buscar “lo mismo que…” en otra plataforma/IDE/programa, bien, debe entender q xojo viene de MacOS y allí hacen las cosas un poco distinto a Windows, hay mucho soporte para declares a Mac, así q es fácil encontrar “lo mismo que…”, en fín, para escalar la imágen pruebe:

[code]…
Dim p As Picture= SomePicture // sample
Dim pScaled As New Picture(ImageWeell1.Width, ImageWeell1.Height, 32)

pScaled.GRaphics.DrawPicture p, 0, 0, ImageWeell1.width, ImageWeell1.height, 0, 0, p.width, p.height

ImageWeell1.Image= pScaled
[/code]

Maravilloso, me funciono a la primera y perfecto!!. Solo que pusiste imageweel, en vez de imagewell, jeje. Yo programo para windows, y me vine a xojo para poder compilar las mimas aplicaciones para Mac, porque los tienen en la empresa.

Por eso intento no hacer nada que use apis o algo especial de osx, sino que pueda ser compatible con las 2 plataformas.

Me has ayudado mucho, de verdad, muchas gracias. Seguro que mas temprano que tarde volvere a preguntar alguna duda por aqui. Gracias