Ajouter image Bdd ACCESS

Signaler
Messages postés
40
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
30 mai 2008
-
Messages postés
40
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
30 mai 2008
-
Bonjour,

je programme sous C#,

mon programme doit permettre d'ajouter une image dans une table, dans une Bdd,
et voici mon erreur: "La référence d'objet n'est pas définie à une instance d'un objet."

Mon code:

private
void btEnregistrIMG_Click(
object sender,
EventArgs e){

//On récupère les valeures des variables à modifier

this.CsV.Image = pbxImage.Image;

//on vérifie que tout les champs sont remplis

if (pbxImage.Image ==
null){

MessageBox.Show(
"Veuillez choisir une image au préalable");}

else{

//déclaration du data adapter

OleDbDataAdapter Dta =
new
OleDbDataAdapter(
this.SqlGrid,
this.Conn);

//création d'une nouvelle ligne

this.DtrGrid =
this.DtsGrid.Tables[
"PhotoContact"].NewRow();                   !!!!!C'est ici que se produit l'erreur !!!!

//Ajout de la ligne et remplissage des différents champs

this.DtrGrid[
"N°"] =
this.DtsGrid.Tables[
"PhotoContact"].Rows.Count + 1;

this.DtrGrid[
"Image"] = CsV.Image;

//ajout de la ligne à la table (affichage visuel)

this.DtsGrid.Tables[
"PhotoContact"].Rows.Add(DtrGrid);

//on leve l'exception

try{

//on met tout dans la base de donnée

this.CmdGrid =
new
OleDbCommandBuilder(Dta);Dta.UpdateCommand = CmdGrid.GetUpdateCommand();

Dta.Update(DtsGrid,

"TabDonneesContacts");}

//on gere l'exception en cas d'enregistrement raté.

catch (
DBConcurrencyException DBCEx){

MessageBox.Show(
"Impossible d'enregistrer le nouveau contact");} }

quelqu'un serait il en mesure de me dire ce qu'est cette erreur, je ne vois pas du tout

Merci de votre aide !

5 réponses

Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
3
Salut,

Eh bien, soit DtsGrid n'existe pas (vérifie qu'il est bien créé), soit DtsGrid.Table["PhotoContact"] n'existe pas...  !

Vérifie que le DataTable auquel tu veux accéder s'appelle bien "PhotoContact" ; ça peut être une erreur de frappe, au lieu de "PhotosContact" ou "PhotoContacts" ou un truc du genre...

Bonne journée,
A++

<hr width="100%" size="2" />Nurgle (Antoine) - MSP
Messages postés
40
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
30 mai 2008

Salut,

le onm de table est correct, le dtsgrid est bien déclarer,
je l'utilise dailleurs dans un autre bouton et il marche sans souci...

Je suis en train de penser a qq chose le datatable permet de se lier avec la Bdd, mais par contre dans mon datagrid view que j'utilise, j'affiche une autre table de la meme Bdd.

Serais-ce parce que je n'utilise pas la meme table?
Messages postés
40
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
30 mai 2008

HOP !!!!!!   Modif !!  Mais ça marche toujours pas ...
Apparemment, je n'utilisait pas la bonne méthode pour récupérer mon image!

D'après ce que j'ai trouvé, je dois utiliser un tableau de byte (Byte[] bytImage = mstImage.GetBuffer();)

Par contre j'ai le meme type d'erreur que lorsque j'oubli de renseigner une colonne,
soit qu'il y a un problème dans la requete INSERT TO...
Je n'ai que 2 colonne pourtant (N° et Image).
 
Des idées ???

code:

private
void btEnregistrIMG_Click(
object sender,
EventArgs e)
{

//on vérifie que tout les champs sont remplis
if (pbxImage.Image ==
null)
{

MessageBox.Show(
"Veuillez choisir une image au préalable");
}

else
{

// Tableau d'octets representant l'image au format jpeg
MemoryStream mstImage =
new
MemoryStream();
pbxImage.Image.Save(mstImage, System.Drawing.Imaging.
ImageFormat.Jpeg);

Byte[] bytImage = mstImage.GetBuffer();

//déclaration du data adapter
OleDbDataAdapter Dta =
new
OleDbDataAdapter(
this.SqlGrid,
this.Conn);

//création d'une nouvelle ligne
this.DtrGrid =
this.DtsGrid.Tables[
"TabDonneesContacts"].NewRow();

//Ajout de la ligne et remplissage des différents champs
this.DtrGrid[
"ID"] =
this.DtsGrid.Tables[
"TabDonneesContacts"].Rows.Count + 1;

this.DtrGrid[
"Image"] = bytImage;

//ajout de la ligne à la table (affichage visuel)
this.DtsGrid.Tables[
"TabDonneesContacts"].Rows.Add(DtrGrid);

//on leve l'exception
try
{

//on met tout dans la base de donnée
this.CmdGrid =
new
OleDbCommandBuilder(Dta);
Dta.UpdateCommand = CmdGrid.GetUpdateCommand();
Dta.Update(DtsGrid,
"TabDonneesContacts");                                                    !!!!on plante ici !!!!
}

//on gere l'exception en cas d'enregistrement raté.
catch (
DBConcurrencyException DBCEx)
{

MessageBox.Show(
"Impossible d'enregistrer la nouvelle image...");
}}
Messages postés
40
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
30 mai 2008

pour préciser , en fait tout ce que j'ai déclaré, je l'ai fait pour l'autre table.

la requete SqlGrid est réécrite pour la bonne table et le nom de table est changé, mais y a t il d'autres choses a voir? dois-je faire une autre ouverture de Bdd, mais cette fois ci avec la deuxieme table?
Messages postés
40
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
30 mai 2008

J'ai tout repris, mes dataset, datarow, datatable sont déclaré en double (pour mes 2 tables).

J'ai oublié de dire je crois que l'erreur retourné est erreur de syntaxe dans l'instruction INSERT INTO.

cette erreur m'est déja apparu lorsque j'essayer de faire une mise a jour de table sans avoir renseigner toutes les lignes.

Là j'en ai 2 et je renseigne les 2 mais est ce que mon type Byte utilisé est la bonne chose a utilisé pour enregistré une image?
Dans la base je met l'image dans un objet OLE...

Des idées ? des questions? j'ai que cette partie qui ne marche pas et la je suis en galère.

Merci de votre aide.