Maiku
Messages postés190Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention 4 juillet 2007
-
25 oct. 2005 à 11:58
Maiku
Messages postés190Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention 4 juillet 2007
-
25 oct. 2005 à 20:22
Bonjour
Je developpe actuellement un logiciel de cuisine, en relation avec une base de donnee access dont le modèle logique conceptuel est le suivante :
Recettes(CodeRecette,NomRecette,Details)
Ingrédients(RefI,NomI)
Composer(CodeRecette,RefI)
Famille(RefF,NomF)
J'essaye actuellement d'ajouter une recette, ainsi que les ingredients qui la concerne,avec le code suivant :
En cliquant sur un Bouton Valider, je recupere dans un tableau ArrayList, la liste des ingrédients concernés par la recette, que l'utilisateur a selectionné :
if(this.IngredientA.Count==0)
{
i=0;
foreach (int index in this.ListIngredient.SelectedIndices)
foreach(int index in this.ListIngredient.SelectedIndices)
{
ligne = ListIngredient.Items[index].ToString();
this.IngredientA.Add(ligne);
i=i+1;
}
}
foreach(string valeur in this.IngredientA)
{
MessageBox.Show(""+valeur);
}
En cliquant sur le bouton Ajouter , j'ajoute la recette dans la table recette, et tant qu'il y a des ingredients dans l'arraylist j'ajoute le coderecette et le refi de l'ingredient dans la table composer :
MessageBox.Show("Vous ne pouvez ajouter une recette sans avoir précisé les ingrédients qui le compose","Attention",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
else
{ lecteur = bd.Connection("Select NomRecette From Recettes " + " where NomRecette='"+this.NomR.Text+"'");
if(lecteur.HasRows==false)
{
try
{
string Details = this.DetailsA.Text;
string Nom = this.NomR.Text.Replace("'","''");
lecteur = bd.Connection("Select Count(*) From Recettes ");
string ligne = OneResult(lecteur);
int nb = int.Parse(ligne);
nb = nb + 1;
bd.Connection("INSERT INTO Recettes(CodeRecette,NomRecette,Details) " + " VALUES('"+nb+"','"+Nom+"','"+Details.Replace("'","''")+"') ");
foreach(string ingredient in this.IngredientA)
{
lecteur2=bd.Connection("Select RefI From Ingrédients " + " where NomI='"+ingredient+"'");
string ligne2 = OneResult(lecteur2);
int codei = int.Parse(ligne2);
MessageBox.Show(""+codei);
bd.Connection("INSERT INTO Composer(CodeRecette,RefI) " + " VALUES('"+nb+"','"+codei+"') ");
}
MessageBox.Show("Recette ajoutée avec success","Opération Réussie",MessageBoxButtons.OK,MessageBoxIcon.Information);
DialogResult reponse = MessageBox.Show("Voulez vous Ajouter une Autre Recette?","Nouvelle Recette ?",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if(reponse == DialogResult.Yes)
{
this.NomR.Text="";
this.DetailsA.Text="";
this.ListIngredient.Items.Clear();
this.FamilleA.Text="";
}
else
{
this.Close();
}
}
catch(OleDbException ode)
{
MessageBox.Show(ode.ToString());
}
}
else
{
MessageBox.Show("Une Recette est Unique.Le Nom que vous avez choisi pour votre recette existe deja dans la base de donnée","Impossible d'Ajouter",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
Il me renvoie une erreure au niveau de mon foreach :
Une exception non gérée du type 'System.NullReferenceException' s'est produite dans system.data.dll
Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet.
Quelqu'un pourrait il me dire ce qui cloche dans mon code et comment le resoudre ?
Merci d'Avance
Maiku
Messages postés190Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention 4 juillet 2007 25 oct. 2005 à 14:33
Rebonjour
Alors OneResult est une fonction que j'utilise lorsque je suis certaine que ma requete ne me renvoie qu'un resultat sur une seule colonne, voici son code :
Si je n'utilise pas le String.Format c'est parce que je comprend plus facilement la concatenation que le String.Format plus loin {0} ,j'y comprend pas grand chose, alors je prefere une concatenation au moins je suis sur de comprendre parfaitement ce que je fais.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 25 oct. 2005 à 16:40
Bon deja, vu que c'est System.Data.Dll qui te renvoit l'erreur, je suis
persuadé que l'erreur se trouve dans ta classe ou tu fais toutes tes
operations de base de données.
Essaie de catcher l'exception NullReferenceException dans cette classe, pour tenter d'avoir + de précisions sur l'erreur.
Mx
Vous n’avez pas trouvé la réponse que vous recherchez ?
Maiku
Messages postés190Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention 4 juillet 2007 25 oct. 2005 à 17:26
Il me renvoie l'erreure suivante :
La Reference d'Objet n'est pas définie à une instance d'un objet.
Est ce que le fait que les tables Recettes et Composer soit vide peuvent être en cause ?
Car justement je veux remplir la base de données grâce au formulaire et pas en tapant le tout dans la base de données, donc ces deux tables sont vides pour le moment.