bonjour,
comment enregistrer une image dans une base access et la recharger après?
apparament il faudrait passer par du binaire mais je ne comprend pas trop le truc
merci
bonjour,
comment enregistrer une image dans une base access et la recharger après?
apparament il faudrait passer par du binaire mais je ne comprend pas trop le truc
merci
après il faut avoir un champ dans la table de type tableau d'octets (je ne sais pas si ca existe sous access (ca l'est sur sql serveur en tout cas)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Public Function ImageToByteTab(ByVal image As System.Drawing.Image) As Byte() Try Dim m As New System.IO.MemoryStream image.Save(m, System.Drawing.Imaging.ImageFormat.Png) Return m.GetBuffer Catch ex As Exception Return Nothing End Try End Function Public Function ByteTabToImage(ByVal Bytes() As Byte) As System.Drawing.Image Try Return System.Drawing.Image.FromStream(New System.IO.MemoryStream(Bytes)) Catch ex As Exception Return Nothing End Try End Function
Dans access, il n'y a pas de champs "BLOB". Il existe un champs pour les textes de grandes tailles, mais son utilisation avec du binaire n'est pas garantie. (de plus il est indexable, ce qui est largement sous optimal).
Sinon, il y a les champs OLE qui doivent pouvoir être utilisés pour cet usage.
dans le pire des cas, changer les octets en caractères via asc() et ca fonctionnera dans un champ texte
et pour des petites images style jpeg ou png ca devrai rentrer
????
Asc est une fonction qui renvoie le code asc d'un caractère.
Si je traduis bien tu veux suggérer plutôt l'inverse de ce que tu dis : changer le binaire en texte, par exemple avec un truc du style :
Et relire en reconstituant les byte à partir des codes ascii stockés entre deux "_" .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 byte[] buffImage; // Charger buffUImage ici //.... StringBuilder imageInChar = new StringBuilder(); foreach(byte b in buffImage) { imageInChar.Append("_"); imageInChar.Append(b); } String valueToWrite = imageInChar.ToString(); // ecrire dans la BD ici // .....
C'est possible, quoique très lent (et très très crade).
c'est vrai que ca doit pas etre ce qu'il y a de plus rapide ...
et donc il n'y a pas de champs binaires sous access ?
Ce qui y ressemble le plus sont les champs OLE. Mais je n'en sais pas plus, Access n'a jamais été ma tasse de thé et j'ai toujours refusé de l'utiliser comme base sous-jacente à une application (sauf une fois à l'époque de VB-6).
De toute maniére avec une base de données aussi peu performante, je n'essaierais même pas de stocker les images dedans; à sa place je générerais des fichiers dans un répertoire avec un pointeur sur le nom, lui même stocké dans un champ de la base (d'ailleurs Oracle a une implémentation pour ce type de stockage - fichier + lien - pour les gros objets, même si il est capable de les stocker directement).
Maintenant, ça dépend de ce que fait son appli aussi : notamment si c'est pour stocker des images destinées à la modification, je n'envisagerais même pas le stockage ne base; si c'est en consultation uniquement, pourquoi pas, même si, encore une fois, avec Access je ne le ferais pas.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager