Save images dans Sqlite

Bonjour à tous et je vous souhaite une très Bonne Année.

Comme je le signale dans le titre j’ai un problème pour sauvegarder des images dans ma DB Sqlite.
J’ai parcouru différents sites pour me familiariser avec la méthode mais je n’arrive pas à saisir le cheminement. Jusqu’à présent je n’ai toujours stocker que des informations de tout types sauf les images.
Je “patauge” un peu beaucoup.

J’ai une version Xojo de 2016.
Y aurais-t-il une problème lié à la version ?

Merci

Xojo 2016 is a bit old. Can you post your code?

il faut stocker dans un BLOB ou VARCHAR, et avant convertir l’image en base64
et bien sur la décoder une fois relue de la base avant de l’afficher

Je ne pense pas, avec 2015r1 cela fonctionne très bien. Le vrai problème est que le language a évolué et les instructions pour 2015-2019 ne sont disponibles que dans ces versions (avec un Mac ARM, je n’y ai pas accès…).

De mémoire, il y a un Type Picture.

Montre ton code, pour voir si on peut t’aider.

j’ai essayé l’image en Base64

J’ai d’abord fait un test simple sans passer par la base de données, j’arrive bien à coder et decoder une base64, çà c’est compris.

lorsque je passe par la DB cà bloque sur le type de la colonne je pense

Dans ma base de donnée le type est mis à BLOB sur la colonne concernée.
voilà mon code

		'Copie de l'ecran sauvegardé dans le presse-papiers
		
		Dim S as String=chr(34)
		Dim c As Clipboard
		
		// création  new instance du presse-papiers
		c = New Clipboard
		Dim myPicture As Picture
		// picture is available
		If c.PictureAvailable Then
				myPicture = c.Picture 
		End If
		// close du clipboard
		c.Close
		
		'Connexion suivant choix de Nom de Database dans un popupMenu
		App.MConnectDBPME PM_Database.Text
		
		if App.mDB.Connect then
				'Essai encodage 64 (OK)
				dim Res as string=MImage_Code_String(myPicture)
				'Enregistrement
				Dim row As new DatabaseRecord
				row.Column("Nom")="N1"
				row.Column("ImageClipBoard")=Res
				App.mDB.InsertRecord("Images",row)
				
				'Essai Decodage 64
				Dim Data_Image as String
				dim LigneSQL as string="SELECT * FROM Images WHERE Nom = "+S+"N1"+S
				dim rs as RecordSet
				'----- jusque là c'est bon
				
				Data_Image=rs.Field("ImageClipBoard").StringValue  '<--- là çà ne colle plus
				dim p as picture=MImage_Decode_Picture(Data_Image)
				
				If App.mDB.Error Then
						 MsgBox("DB Error: " + App.mDB.ErrorMessage)
				End If
				
		end if

		Funtion MImage_Code_String(img) as string
		//Returns a base64 encoded version of the picture’s data.
		If img=Nil Then
				Return ""
		End If
		Return EncodeBase64(img.GetData(Picture.FormatJPEG, Picture.QualityMedium),0)
        End function

Funtion MImage_Decode_Picture(data_Img) as Picture		
// Convert a base64 encoded string back to a picture
		Dim p As picture
		If data_Img="" Then
				Return Nil
		End If
		p=picture.FromData(DecodeBase64(data_Img))
		Return p
  End function
		

Voilà où j’en suis

Sorry.
Je viens de m’apercevoir que je n’avais pas cherché (rs) dans la base de données :

				rs=App.mDB.SQLSelect(LigneSQL)

Après Modification, j’arrive bien à reformer l’image.
.
Donc c’est bon.

Merci à vous tous

j’allais dire qu’il manque le selectSQL effectivement !

Pour information,
Vous m’avez été très utile, j’ai stocké tous mes clichés correspondant à une “Aide” à la saisie pour un programme dans ma DB, ça marche admirablement et c’est instantané.
Merci.