Extraire une image d'une base de données access

lirmo Messages postés 31 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 30 mars 2011 - 19 mars 2009 à 18:07
lirmo Messages postés 31 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 30 mars 2011 - 20 mars 2009 à 15:28
Bonjour,
J'aimerai connaitre la commande pour afficher une image extraite d'une base de données Access dans une picture box
Merci

6 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
20 mars 2009 à 12:41
Tout dépend comment est stockée l'image :
Si cest un blob (tableau de byte) il suffit de mettre le contenu dans un memory stream, puis de faire un image.fromStream
Si cest un champ d'image attachée de access 2007, cest un peu lourd :
int imageStartPos = BitConverter.ToInt32(attachementData, 0); 
byte[] result = new byte[attachementData.Length - imageStartPos];
Array.Copy(attachementData, imageStartPos, result, 0, result.Length);
puis ensuite mettre le contenu du tableau dans le memory stream et image.fromstream
0
lirmo Messages postés 31 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 30 mars 2011
20 mars 2009 à 12:59
merci je vais essayer
0
lirmo Messages postés 31 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 30 mars 2011
20 mars 2009 à 13:18
je viens de débuter avec la gestion de base de données. Je n'ai pas réussi à mettre en oeuvre tes conseil.
j'ai fait ça:

 string ReqDrapeau = "Select pays.drapeau from pays where pays.nom='" + cbPays.SelectedItem.ToString() + "'";
            OleDbCommand drapeau = new OleDbCommand(ReqDrapeau, BDAA);

            OleDbDataReader drTestAccessImage = drapeau.ExecuteReader(CommandBehavior.CloseConnection);

            int imageStartPos = BitConverter.ToInt32(drapeau, 0);
            byte[] result = new byte[drapeau.Lenght - imageStartPos];
            Array.Copy(drapeau, imageStartPos, result, 0, result.Length);

            MemoryStream mstImage = new MemoryStream((Byte[])(drapeau["drapeau"]));
            lblDrapeau.Image = Image.FromStream(mstImage);

Quels ont les problèmes, je pense en avoir plusieur!!

Merci de m'accorder de votre temps
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
20 mars 2009 à 14:23
Quelle est l'erreur? Quel est le type du champ dans la database? Si cest bien du access2007 avec un champ image, jai oublié de préciser que la requete devait etre un peu particulière : il faudrait mettre "select drapeau.FileData from pays where blablabla".
Ensuite, tu devrait regarder la doc pour manipuler la db. Drapeau est la commande. Ensuite tu dois lire la valeur dans ton datareader pour avoir le retour de ton select
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lirmo Messages postés 31 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 30 mars 2011
20 mars 2009 à 14:44
j'ai essayer en binaire. J'arrive à enregistrer mes photo en binaire, mais pas à les ressortir! J'ai fait cette fonction

 string ReqDrapeau = "Select drapeau from pays where pays.nom='" + cbPays.SelectedItem.ToString() + "'";
            OleDbCommand drapeau = new OleDbCommand(ReqDrapeau, BDAA);
            OleDbDataReader drTestAccessImage = drapeau.ExecuteReader(CommandBehavior.CloseConnection);
            MemoryStream mstImage = new MemoryStream((Byte[])(drTestAccessImage["drapeau"]));
            lblDrapeau.Image = Image.FromStream(mstImage);

le probleme vient de la ligne
MemoryStream mstImage = new MemoryStream((Byte[])(drTestAccessImage["drapeau"]));

erreur: aucune donné n'existe pour la ligne/Colonne.
 Je ne comprend pas!!!
0
lirmo Messages postés 31 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 30 mars 2011
20 mars 2009 à 15:28
j'ai rajouté un if /else
 
string ReqDrapeau = "SELECT Pays.Drapeau, Pays.Nom FROM Pays where pays.nom='" +   cbPays.SelectedItem.ToString() + "'";

                OleDbCommand drapeau = new OleDbCommand(ReqDrapeau, BDAA);

                OleDbDataReader drTestAccessImage = drapeau.ExecuteReader(CommandBehavior.CloseConnection);
                // Au moins une image ?

                if (drTestAccessImage.Read())
                {
                    MemoryStream mstImage = new MemoryStream((Byte[])(drTestAccessImage["Drapeau"]));
                    pbPays.Image = Image.FromStream(mstImage); maintenant le prob est ici
                    drTestAccessImage.Close();
                }
                else
                {
                    pbPays.Text = "Pas d'image en base";
                   
                    pbPays.Image = null;
                   
                }
0
Rejoignez-nous