Erreur exception lors de recherche par Adresse MAC

programmeur69 Messages postés 7 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 16 juin 2009 - 10 juin 2009 à 20:14
programmeur69 Messages postés 7 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 16 juin 2009 - 16 juin 2009 à 10:51
Bonjour


j'ai pour mon projet de seconde année créé une application qui sert à gérer une BDD access. J'avais trouvé un source qui correspondais à ce que je recherchais ici.


Tout marche, sauf, quand je souhaite faire une recherche à partir de l'adresse mac !


Et là, j'ai n message d'erreur que j'ai moi même écrit en suivant un
exemple ( genre "contacter le développeur si le souci persiste").


Il m'arrive aussi ce genre d'erreur quand je fait plusieur ajout, modification, ou suppression dans la foulée.


Voici le code source:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
 
 
namespace TestBDDCruas
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
 
 
#region variable pour la connection a la base de donnée
//déclaration de la connection
private OleDbConnection Conn = new OleDbConnection();
 
//déclaration du chemin de l'éxécutable
privatestring BDDPath = Application.ExecutablePath;
 
//déclaration du chemin de la connection de la base de donnée
privatestring ConnString;
#endregion
 
#region variables Connection pour ComboClass et listclass
//déclaration du dataset
private DataSet DtsClass = new DataSet();
 
//déclaration de la datatable
private DataTable DttClass = new DataTable();
 
//déclaration de la requete sql pour le comboclass
privatestring SqlClass = "SELECT * FROM Switchs";
#endregion
 
#region variables connection pour la datagrid et recherche
//déclaration du dataset
private DataSet DtsGrid = new DataSet();
 
//déclaration du datatable
private DataTable DttGrid = new DataTable();
 
//déclaration de la requete sql
privatestring SqlGrid = "SELECT * FROM Switchs";
 
//déclaration de la requete sql
privatestring SqlSearch;
 
//déclaration du commande builder
private OleDbCommandBuilder CmdGrid = new OleDbCommandBuilder();
 
//déclaration du datarow
private DataRow DtrGrid;
#endregion
 
#region variables
//Import de la class Variable
ClassVariable CsV = new ClassVariable();
#endregion
 
 
//-------------------------------------------------------------------------
 
privatevoid Form1_Load(object sender, EventArgs e)
{
// TODO*: cette ligne de code charge les données dans la table 'cruasDataSet.Switchs'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
this.switchsTableAdapter.Fill(this.cruasDataSet.Switchs);
#region Construction de la connection
//Arangement du chemin de la prise de la base de donnée
this.BDDPath = this.BDDPath.Substring(0, this.BDDPath.LastIndexOf("\"));
 
//on crée le chemin de la connection a la base de donnée
this.ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + this.BDDPath + "\\Cruas.mdb";
 
//on crée la connection a la base de donnée
this.Conn.ConnectionString = this.ConnString;
#endregion
 
//on ouvre la connection
this.Conn.Open();
 
//---------------------------------------------------------------------------
 
 
#region comboLieu, listLieu; comboModele et listModele;
//déclaration du data adapter pour le combobox
OleDbDataAdapter Dta = new OleDbDataAdapter(this.SqlClass, this.Conn);
 
//on leve l'exception
try
{
//on rempli la dataset avec la table
Dta.Fill(this.DtsClass, "Switchs");
}
catch(Exception)
{
//affichage de l'érreur
MessageBox.Show("Une Erreur est survenue, si cela persiste veuillez contacter au plus vite le développeur ");
 
//on ferme la connection
this.Conn.Close();
 
//on ferme la fenêtre
this.Close();
 
//on quitte l'application
Application.Exit();
}

 
#endregion
 
//-----------------------------------------------------------------------
 
#region datagridview
//déclaration du data adapteur pour le datagridview
OleDbDataAdapter DtaGrid = new OleDbDataAdapter(this.SqlGrid, this.Conn);
 
//on leve l'exception
try
{
DtaGrid.Fill(this.DtsGrid, "Switchs");
}
catch(Exception)
{
//affichage de l'érreur
MessageBox.Show("Une Erreur est survenue, si cela persiste veuillez contacter au plus vite le programmeur");
 
//on ferme la connection
this.Conn.Close();
 
//on quitte l'application
Application.Exit();
}
 
//On rempli la liste avec le dataset
this.DttGrid = this.DtsGrid.Tables["Switchs"];
 
//on affiche la liste dans le datagridview
this.Dtg.DataSource = this.DttGrid;
 
//On stylise la datagridview
this.StyleDtg();
#endregion
 
//Rafraichissement de la fenetre
this.Show();
 
//On ferme la connection
this.Conn.Close();
 
}

#region buttons
privatevoid ButtonSave_Click(object sender, EventArgs e)
{
//On vérifie que tout les champs sont remplisif(this.TxtNumeroPI.Text null || this.TxtNumeroPI.Text null || this.comboModele.Text == null || this.comboLieu.Text == null)
{
MessageBox.Show("Veuillez remplir tout les champs");
}
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["Switchs"].NewRow();
 
//remplissage des champs
this.DtrGrid["N°"] = this.DtsGrid.Tables["Switchs"].Rows.Count + 1;
this.DtrGrid["NumeroPI"] = this.CsV.NumeroPI;
this.DtrGrid["AdresseMAC"] = this.CsV.AdresseMAC;
this.DtrGrid["Modele"] = this.CsV.Modele;
this.DtrGrid["Lieu"] = this.CsV.Lieu;
 
 
//ajout de la ligne à la table
this.DtsGrid.Tables["Switchs"].Rows.Add( DtrGrid );
 
//on met tout dans la base de donnée
this.CmdGrid = new OleDbCommandBuilder ( Dta );
Dta.UpdateCommand = CmdGrid.GetUpdateCommand();
Dta.Update( DtsGrid , "Switchs");
 
this.TxtNumeroPI.Text = null;
this.TxtAdresseMAC.Text = null;
this.comboModele.Text = null;
this.comboLieu.Text = null;
}
}

privatevoid buttonModif_Click(object sender, EventArgs e)
{
if(this.CsV.Ligne < this.DtsGrid.Tables["Switchs"].Rows.Count)
{
if(this.CsV.Ligne >= 0)
{
//on charge les données dans les variables
this.CsV.NumeroPI = this.DtsGrid.Tables["Switchs"].Rows[this.CsV.Ligne]["NumeroPI"].ToString();
this.CsV.AdresseMAC = this.DtsGrid.Tables["Switchs"].Rows[this.CsV.Ligne]["AdresseMAC"].ToString();
this.CsV.Modele = this.DtsGrid.Tables["Switchs"].Rows[this.CsV.Ligne]["Modele"].ToString();
this.CsV.Lieu = this.DtsGrid.Tables["Switchs"].Rows[this.CsV.Ligne]["Lieu"].ToString();
 
//on met les données des variables dans les textbox
this.TxtNumeroPI.Text = this.CsV.NumeroPI;
this.TxtAdresseMAC.Text = this.CsV.AdresseMAC;
this.comboModele.Text = this.CsV.Modele;
this.comboLieu.Text = this.CsV.Lieu;
}
else
{
MessageBox.Show("Il n'y a pas d'enregistrements");
}
}
}

privatevoid buttonUpdateModif_Click(object sender, EventArgs e)
{
//déclaration du data adapter
OleDbDataAdapter Dta = new OleDbDataAdapter (this.SqlGrid , this.Conn);
 
//on leve l'exception
try
{
//on prend la ligne en cour
this.DtrGrid = this.DtsGrid.Tables["Switchs"].Rows[this.CsV.Ligne];
}
catch( IndexOutOfRangeException )
{
this.CsV.Ligne = 0;
}
 
//on vérifie que les txtbox ne sont pas videsif( TxtNumeroPI.Text null || TxtAdresseMAC.Text null)
{
this.CsV.Ligne = 0;
}
else
{
//on rempli les champs
this.DtrGrid["NumeroPI"] = this.CsV.NumeroPI;
this.DtrGrid["AdresseMAC"] = this.CsV.AdresseMAC;
this.DtrGrid["Modele"] = this.CsV.Modele;
this.DtrGrid["Lieu"] = this.CsV.Lieu;
}
 
//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 , "Switchs");
}
catch(DBConcurrencyException /*DBCEx*/)
{
MessageBox.Show("Vous ne pouvez pas modifier quelque chose que vous venez de sauvegarder, veuillez redémarer l'application et recommencer");
}
TxtNumeroPI.Text = null;
TxtAdresseMAC.Text = null;
comboModele.Text = null;
comboLieu.Text = null;
}
 
privatevoid buttonAfter_Click(object sender, EventArgs e)
{
//on défini le nombre de lignes
this.CsV.NbSauvegarde = this.DtsGrid.Tables["Switchs"].Rows.Count;
 
//si il n'y a rien dans les textbox alors il faut aller a la premiere ligneif(this.TxtNumeroPI.Text null || this.TxtAdresseMAC.Text null || this.comboModele.Text == null || this.comboLieu.Text == null)
{
this.CsV.Ligne = 0;
}
else
{
//on saute une ligne a chaques click
this.CsV.Ligne = this.CsV.Ligne + 1;
 
//on ne dépasse pas le dernier enregistrement
if(this.CsV.Ligne > this.CsV.NbSauvegarde - 1)
{
this.CsV.Ligne = this.CsV.NbSauvegarde - 1;
}
}
 
//on vérifi qu'il y a un enregistrement
if(this.CsV.Ligne < 0)
{
this.CsV.Ligne = 0;
}
else
{
//on charge les données dans les variables
this.CsV.NumeroPI = this.DttGrid.Rows[this.CsV.Ligne]["NumeroPI"].ToString();
this.CsV.AdresseMAC = this.DttGrid.Rows[this.CsV.Ligne]["AdresseMAC"].ToString();
this.CsV.Modele = this.DttGrid.Rows[this.CsV.Ligne]["modele"].ToString();
this.CsV.Lieu = this.DttGrid.Rows[this.CsV.Ligne]["Lieu"].ToString();
 
//on charge les données dans les textbox
this.TxtNumeroPI.Text = this.CsV.NumeroPI;
this.TxtAdresseMAC.Text = this.CsV.AdresseMAC;
this.comboModele.Text = this.CsV.Modele;
this.comboLieu.Text = this.CsV.Lieu;
}
}
 
privatevoid buttonBefore_Click(object sender, EventArgs e)
{
//si il n'y a rien dans les textbox, alors il faut aller à la première ligneif(this.TxtNumeroPI.Text null || this.TxtAdresseMAC.Text null || this.comboModele.Text == null || this.comboLieu.Text == null)
{
this.CsV.Ligne = 0;
}
else
{
// On saute une ligne a chaques click
this.CsV.Ligne = this.CsV.Ligne - 1;
}
 
// On vérifie qu'il y à un enregistrement et,qu'on ne dépasse pas le premier enregistrement
if(this.CsV.Ligne < 0)
{
this.CsV.Ligne = 0;
}
else
{
//on charge les données dans les variables
this.CsV.NumeroPI = this.DttGrid.Rows[this.CsV.Ligne]["NumeroPI"].ToString();
this.CsV.AdresseMAC = this.DttGrid.Rows[this.CsV.Ligne]["AdresseMAC"].ToString();
this.CsV.Modele = this.DttGrid.Rows[this.CsV.Ligne]["Modele"].ToString();
this.CsV.Lieu = this.DttGrid.Rows[this.CsV.Ligne]["Lieu"].ToString();
 
//On charge les données dans les textbox
this.TxtNumeroPI.Text = this.CsV.NumeroPI;
this.TxtAdresseMAC.Text = this.CsV.AdresseMAC;
this.comboModele.Text = this.CsV.Modele;
this.comboLieu.Text = this.CsV.Lieu;
}
}

privatevoid buttonDelete_Click(object sender, EventArgs e)
{
// Déclaration du data adapter
OleDbDataAdapter Dta = new OleDbDataAdapter(this.SqlGrid, this.Conn);
 
//on vérifi qu'il y a un enregistrement
if(this.CsV.Ligne < 0)
{
this.CsV.Ligne = 0;
}
// On vérifie qu'il y à quelque chose dans les textboxelseif(this.TxtNumeroPI.Text null || this.TxtAdresseMAC.Text null)
{
this.CsV.Ligne = 0;
}
else
{
// On prend la ligne en cours et on la supprime
this.DtsGrid.Tables["Switchs"].Rows[this.CsV.Ligne].Delete();
}
 
//on va a la ligne précédente
this.CsV.Ligne = this.CsV.Ligne - 1;
 
// On ne dépasse pas le dernier enregistrement
if(this.CsV.Ligne < 0)
{
this.CsV.Ligne = 0;
}
 
// On lève l'exception
try
{
// On met à jour la base de donnée
this.CmdGrid = new OleDbCommandBuilder(Dta);
Dta.UpdateCommand = CmdGrid.GetUpdateCommand();
Dta.Update(DtsGrid, "Switchs");
}
catch(DBConcurrencyException)
{
MessageBox.Show("Vous ne pouvez pas modifier quelque chose que vous venez de sauvegarder, veuillez redémarer l'application et recommencer");
}
 
// On suprime les données dans les textbox
TxtNumeroPI.Text = "";
TxtAdresseMAC.Text = "";
comboModele.Text = "";
comboLieu.Text = "";
}

privatevoid buttonExit_Click(object sender, EventArgs e)
{
this.Conn.Close();
this.Close();
Application.Exit();
}
 
privatevoid buttonsearch_Click(object sender, EventArgs e)
{
// On vide le dataset
this.DtsGrid.Clear();
 
// On vérifie qu'il y à quelque chose dans la txtsearch
if(this.TxtSearch.Text == null)
{
// On choisi la requete sql
this.SqlSearch = this.SqlGrid;
}
elseif(this.RadNumeroPI.Checked == true)
{
// On choisi la requete sql
this.SqlSearch = "SELECT Switchs.N°,Switchs.NumeroPI, Switchs.AdresseMAC, Switchs.Modele, Switchs.Lieu FROM Switchs WHERE (Switchs.NumeroPI LIKE '%" + this.CsV.Recherche + "%')";
}
elseif(this.radAdresseMAC.Checked == true)
{
// On choisi la requete sql
this.SqlSearch = "SELECT Contact.N°,Switchs.NumeroPI,Switchs.AdresseMAC, Switchs.Modele, Switchs.Lieu FROM Switchs WHERE (Switchs.AdresseMAC LIKE '%" + this.CsV.Recherche + "%')";
}
 
elseif(this.radModele.Checked == true)
{
// On choisi la requete sql
this.SqlSearch = "SELECT Switchs.N°,Switchs.NumeroPI, Switchs.AdresseMAC, Switchs.Modele, Switchs.Lieu FROM Switchs WHERE (Switchs.Modele LIKE '%" + this.CsV.Recherche + "%')";
}
 
elseif(this.radLieu.Checked == true)
{
// On choisi la requete sql
this.SqlSearch = "SELECT Switchs.N°,Switchs.NumeroPI, Switchs.AdresseMAC, Switchs.Modele, Switchs.Lieu FROM Switchs WHERE (Switchs.Lieu LIKE '%" + this.CsV.Recherche + "%')";
}
 
elseif(this.radTout.Checked == true)
{
// On choisi la requete sql
this.SqlSearch = "SELECT Switchs.N°,Switchs.NumeroPI, Switchs.AdresseMAC, Switchs.Modele, Switchs.Lieu FROM Switchs" ;
}elseif(this.RadNumeroPI.Checked false && this.radAdresseMAC.Checked false && this.radModele.Checked == false)
{
// On choisi la requete sql
this.SqlSearch = this.SqlGrid;
 
// On met un message d'alerte
MessageBox.Show("Veuillez choisir un critère de sélection dans la base de donnée pour la recherche", "Un oublie", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
//on choisi la requete sql
this.SqlSearch = this.SqlGrid;
}
 
//on ouvre la connection
this.Conn.Open();
 
//déclaration du data adapter
OleDbDataAdapter Dta = new OleDbDataAdapter(this.SqlSearch, this.Conn);
 
//on leve l'exception
try
{
// On rempli le dataset avec la table
Dta.Fill(this.DtsGrid, "Switchs");
}
catch(Exception)
{
//affichage de l'erreur
MessageBox.Show("Une Erreur est survenue, si cela persiste veuillez contacter au plus vite le programmeur");
 
//on ferme la connection
this.Conn.Close();
 
//on ferme la fenêtre
this.Close();
 
//on quitte l'application
Application.Exit();
}
 
//on rempli la liste du datagridview avec le dataset
this.DttGrid = this.DtsGrid.Tables["Switchs"];
 
//on affiche la liste du datagridview dans le datagridview
this.Dtg.DataSource = this.DttGrid;
 
//on stylise la datagridview
this.StyleDtg();
 
//rafraichissement de la fenetre
this.Show();
 
//on ferme la connection
this.Conn.Close();
 
//on vide la TxtSearch pour commencer une nouvelle recherche
this.TxtSearch.Text = null;
}
#endregion

#region Fonctions
privatevoid StyleDtg()
{
this.Dtg.ColumnHeadersDefaultCellStyle.Font = new Font("Tahoma", 9, FontStyle.Bold, GraphicsUnit.Point);
this.Dtg.ColumnHeadersDefaultCellStyle.BackColor = SystemColors.ControlDark;
this.Dtg.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
this.Dtg.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
this.Dtg.DefaultCellStyle.Font = new Font("Tahoma", 8, FontStyle.Regular, GraphicsUnit.Point);
this.Dtg.DefaultCellStyle.BackColor = Color.Empty;
this.Dtg.AlternatingRowsDefaultCellStyle.BackColor = SystemColors.ControlLight;
this.Dtg.CellBorderStyle = DataGridViewCellBorderStyle.Single;
this.Dtg.GridColor = SystemColors.ControlDarkDark;
Dtg.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
}
#endregion
 
#region TextBox
 
//TxtNom_TextChanged
privatevoid TxtNumeroPI_TextChanged(object sender, EventArgs e)
{
this.CsV.NumeroPI = this.TxtNumeroPI.Text;
}
 
//TxtAdresseMAC_TextChanged
privatevoid TxtAdresseMAC_TextChanged(object sender, EventArgs e)
{
this.CsV.AdresseMAC = this.TxtAdresseMAC.Text;
}
 
// comboModele_SelectedIndexChanged
privatevoid comboModele_SelectedIndexChanged(object sender, EventArgs e)
{
this.CsV.Modele = this.comboModele.Text;
}
 
privatevoid comboLieu_SelectedIndexChanged(object sender, EventArgs e)
{
this.CsV.Lieu = this.comboLieu.Text;
}
 
privatevoid TxtSearch_TextChanged(object sender, EventArgs e)
{
this.CsV.Recherche = this.TxtSearch.Text;
}
 
#endregion
 
}
}
 
 

Le code source de la ClassVariable:
using System;
using System.Collections.Generic;
using System.Text;
 
namespace TestBDDCruas
{
class ClassVariable
{
#region variables
//variable de la TxtboxNuméroPI
privatestring _NumeroPI;
 
//variable de la TxtboxAdresseMAC
privatestring _AdresseMAC;
 
//variable de la ComboModèle
privatestring _Modele;
 
//variable de la ComboLieu
privatestring _Lieu;
 
//intégration pour obtenir la ligne de la base de donnée
privateint _Ligne = 0;
 
//intégration pour savoir le nombre de lignes au total
privateint _NbSauvegarde;
 
//intégration pour savoir le nombre de lignes au total
//private int _NbSauvegarde;
 
//variable de la TxTboxSearch
privatestring _Recherche;
#endregion
 
#region property
 
//--------------------------------------------------------------------------------
publicstring NumeroPI
{
get
{
returnthis._NumeroPI;
}
set
{
this._NumeroPI = value;
}
}
 
 
//--------------------------------------------------------------------------------
publicstring AdresseMAC
{
get
{
returnthis._AdresseMAC;
}
set
{
this._AdresseMAC = value;
}
}
 
 
//--------------------------------------------------------------------------------
publicstring Modele
{
get
{
returnthis._Modele;
}
set
{
this._Modele = value;
}
}
 
//-------------------------------------------------------------------------
publicstring Lieu
{
get
{
returnthis._Lieu;
}
set
{
this._Lieu = value;
}
}
 
 
//----------------------------------------------------------------------------
publicint NbSauvegarde
{
get
{
returnthis._NbSauvegarde;
}
set
{
this._NbSauvegarde = value;
}
}
 
 
//------------------------------------------------------------------------------
publicstring Recherche //Search
{
get
{
returnthis._Recherche;
}
set
{
this._Recherche = value;
}
}
 
publicint Ligne
{
get
{
returnthis._Ligne;
}
set
{
this._Ligne = value;
}
}
#endregion
}
}
 

Je précise bien que le projet est bien sur régénérer avant l'utilisation du mode debug.


Voici un aperçu de l'erreur engendré:
http://www.casimages.com/img.php?i=09061008171570107.jpg


Je précise aussi que je suis débutant en programmation.


Merci de votre aide

2 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
13 juin 2009 à 23:25
Bonsoir,
je ne sais pas si tu as reçu une réponse.

j'ai régardé rapidement ton erreur, et il me semble comprendre pourquoi.
dans ton code tu récuperes une exception que tu traites en fermant la form et en sortant:
ton code :
      //on ferme la fenêtre
      this.Close();
 
      //on quitte l'application
                Application.Exit();
   }
hors apres ce code il y a encore du code qui utilise le pointeur this, mais vue que la forme est fermée ça plante.
l'instruction Application.Exit() ne sort pas systématiquement du code, ça genere un evenement traité plus tard.

essaye d'ajouter un  return  apres l'instruction Application.Exit() ça devrait régler ton probleme.
C# is amazing, enjoy it!
0
programmeur69 Messages postés 7 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 16 juin 2009
16 juin 2009 à 10:51
Bonjour

Merci pour la réponse.
J'avais résolu ce problème via un autre forum.

Par contre un autre est apparut :(
La recherche par adresse mac s'effectue bien, mais n'affiche rien... .
Si quelqu'un pouvais m'aider... .

Merci

Soyer indulgent, je débute en programmation, et je n'ai pas encore les bonnes méthodes, mais je me suis promis d'y arriver
0
Rejoignez-nous