[Urgent] Erreur en recherchant par adresse MAC

Erreur en recherchant par adresse MAC [Urgent] - C#/.NET managed - Programmation

Marsh Posté le 16-06-2009 à 21:09:16    

Bonjour,
 
je doit pour mardi prochain créé une application de gestion d'une base de données Access.
 
Toute l'application fonctionne, sauf la recherche par adresse mac où j'ai le message d'erreur prévu qui apparait.
 
Voici le code source
 

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Data.OleDb;
  9. namespace TestBDDCruas
  10. {
  11.     public partial class Form1 : Form
  12.     {
  13.         public Form1()
  14.         {
  15.             InitializeComponent();
  16.         }
  17.         #region variable pour la connection a la base de donnée
  18.         //déclaration de la connection
  19.         private OleDbConnection Conn = new OleDbConnection();
  20.         //déclaration du chemin de l'éxécutable
  21.         private string BDDPath = Application.ExecutablePath;
  22.         //déclaration du chemin de la connection de la base de donnée
  23.         private string ConnString;
  24.         #endregion
  25.         #region variables Connection pour ComboClass et listclass
  26.         //déclaration du dataset
  27.         private DataSet DtsClass = new DataSet();
  28.         //déclaration de la datatable
  29.         private DataTable DttClass = new DataTable();
  30.         //déclaration de la requete sql pour le comboclass
  31.         private string SqlClass = "SELECT * FROM Switchs";
  32.         #endregion
  33.         #region variables connection pour la datagrid et recherche
  34.         //déclaration du dataset
  35.         private DataSet DtsGrid = new DataSet();
  36.         //déclaration du datatable
  37.         private DataTable DttGrid = new DataTable();
  38.         //déclaration de la requete sql
  39.         private string SqlGrid = "SELECT * FROM Switchs";
  40.         //déclaration de la requete sql  
  41.         private string SqlSearch;
  42.         //déclaration du commande builder
  43.         private OleDbCommandBuilder CmdGrid = new OleDbCommandBuilder();
  44.         //déclaration du datarow
  45.         private DataRow DtrGrid;
  46.         #endregion
  47.         #region variables
  48.         //Import de la class Variable
  49.         ClassVariable CsV = new ClassVariable();
  50.         #endregion
  51. //-------------------------------------------------------------------------
  52.         private void Form1_Load(object sender, EventArgs e)
  53.         {
  54.             // 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.
  55.             this.switchsTableAdapter.Fill(this.cruasDataSet.Switchs);
  56.             #region Construction de la connection
  57.             //Arangement du chemin de la prise de la base de donnée
  58.             this.BDDPath = this.BDDPath.Substring(0, this.BDDPath.LastIndexOf("\\" ));
  59.             //on crée le chemin de la connection a la base de donnée
  60.             this.ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + this.BDDPath + "\\Cruas.mdb";
  61.             //on crée la connection a la base de donnée
  62.             this.Conn.ConnectionString = this.ConnString;
  63.             #endregion
  64.             //on ouvre la connection
  65.             this.Conn.Open();
  66. //---------------------------------------------------------------------------
  67.             #region comboLieu, listLieu; comboModele et listModele;
  68.             //déclaration du data adapter pour le combobox
  69.             OleDbDataAdapter Dta = new OleDbDataAdapter(this.SqlClass, this.Conn);
  70.             //on leve l'exception
  71.             try
  72.             {
  73.                 //on rempli la dataset avec la table
  74.                 Dta.Fill(this.DtsClass, "Switchs" );
  75.             }
  76.             catch (Exception)
  77.             {
  78.                 //affichage de l'érreur
  79.                 MessageBox.Show("Une Erreur est survenue, si cela persiste veuillez contacter au plus vite le développeur " );
  80.                 //on ferme la connection
  81.                 this.Conn.Close();
  82.                 //on ferme la fenêtre
  83.                 this.Close();
  84.                 //on quitte l'application
  85.                 Application.Exit();
  86.             }
  87.    
  88.             #endregion
  89. //-----------------------------------------------------------------------
  90.             #region datagridview
  91.             //déclaration du data adapteur pour le datagridview
  92.             OleDbDataAdapter DtaGrid = new OleDbDataAdapter(this.SqlGrid, this.Conn);
  93.             //on leve l'exception
  94.             try
  95.             {
  96.                 DtaGrid.Fill(this.DtsGrid, "Switchs" );
  97.             }
  98.             catch (Exception)
  99.             {
  100.                 //affichage de l'érreur
  101.                 MessageBox.Show("Une Erreur est survenue, si cela persiste veuillez contacter au plus vite le programmeur" );
  102.                 //on ferme la connection
  103.                 this.Conn.Close();
  104.                 //on quitte l'application
  105.                 Application.Exit();
  106.             }
  107.             //On rempli la liste avec le dataset     
  108.             this.DttGrid = this.DtsGrid.Tables["Switchs"];
  109.             //on affiche la liste dans le datagridview
  110.             this.Dtg.DataSource = this.DttGrid;
  111.             //On stylise la datagridview
  112.             this.StyleDtg();
  113.             #endregion
  114.             //Rafraichissement de la fenetre
  115.             this.Show();
  116.             //On ferme la connection
  117.             this.Conn.Close();
  118.         }
  119.                
  120.         #region buttons
  121.         private void ButtonSave_Click(object sender, EventArgs e)
  122.        {
  123.             //On vérifie que tout les champs sont remplis
  124.            if (this.TxtNumeroPI.Text == null || this.TxtNumeroPI.Text == null || this.comboModele.Text == null || this.comboLieu.Text == null)
  125.             {
  126.                 MessageBox.Show ( "Veuillez remplir tout les champs" );
  127.             }
  128.             else
  129.             {
  130.                 //déclaration du data adapter
  131.                 OleDbDataAdapter Dta = new OleDbDataAdapter ( this.SqlGrid , this.Conn );
  132.                 //création d'une nouvelle ligne
  133.                 this.DtrGrid = this.DtsGrid.Tables [ "Switchs" ].NewRow ();
  134.                 //remplissage des champs
  135.                 this.DtrGrid [ "N°" ] = this.DtsGrid.Tables [ "Switchs" ].Rows.Count + 1;
  136.                 this.DtrGrid [ "NumeroPI" ] = this.CsV.NumeroPI;
  137.                 this.DtrGrid [ "AdresseMAC" ] = this.CsV.AdresseMAC;
  138.                 this.DtrGrid [ "Modele" ] = this.CsV.Modele;
  139.                 this.DtrGrid ["Lieu"] = this.CsV.Lieu;
  140.                 //ajout de la ligne à la table
  141.                 this.DtsGrid.Tables [ "Switchs" ].Rows.Add ( DtrGrid );
  142.                 //on met tout dans la base de donnée
  143.                 this.CmdGrid = new OleDbCommandBuilder ( Dta );
  144.                 Dta.UpdateCommand = CmdGrid.GetUpdateCommand ();
  145.                 Dta.Update ( DtsGrid , "Switchs" );
  146.                 this.TxtNumeroPI.Text = null;
  147.                 this.TxtAdresseMAC.Text = null;
  148.                 this.comboModele.Text = null;
  149.                 this.comboLieu.Text = null;
  150.             }
  151.         }
  152.                  
  153.         private void buttonModif_Click(object sender, EventArgs e)
  154.         {
  155.             if (this.CsV.Ligne < this.DtsGrid.Tables["Switchs"].Rows.Count)
  156.             {
  157.                 if (this.CsV.Ligne >= 0)
  158.                 {
  159.                     //on charge les données dans les variables
  160.                     this.CsV.NumeroPI = this.DtsGrid.Tables["Switchs"].Rows[this.CsV.Ligne]["NumeroPI"].ToString();
  161.                     this.CsV.AdresseMAC = this.DtsGrid.Tables["Switchs"].Rows[this.CsV.Ligne]["AdresseMAC"].ToString();
  162.                     this.CsV.Modele = this.DtsGrid.Tables["Switchs"].Rows[this.CsV.Ligne]["Modele"].ToString();
  163.                     this.CsV.Lieu = this.DtsGrid.Tables["Switchs"].Rows[this.CsV.Ligne]["Lieu"].ToString();
  164.                     //on met les données des variables dans les textbox
  165.                     this.TxtNumeroPI.Text = this.CsV.NumeroPI;
  166.                     this.TxtAdresseMAC.Text = this.CsV.AdresseMAC;
  167.                     this.comboModele.Text = this.CsV.Modele;
  168.                     this.comboLieu.Text = this.CsV.Lieu;
  169.                 }
  170.                 else
  171.                 {
  172.                     MessageBox.Show("Il n'y a pas d'enregistrements" );
  173.                 }
  174.             }
  175.         }
  176.        
  177.         private void buttonUpdateModif_Click(object sender, EventArgs e)
  178.         {
  179.             //déclaration du data adapter
  180.             OleDbDataAdapter Dta = new OleDbDataAdapter ( this.SqlGrid , this.Conn );
  181.             //on leve l'exception
  182.             try
  183.             {
  184.                 //on prend la ligne en cour
  185.                 this.DtrGrid = this.DtsGrid.Tables [ "Switchs" ].Rows [ this.CsV.Ligne ];
  186.             }
  187.             catch ( IndexOutOfRangeException )
  188.             {
  189.                 this.CsV.Ligne = 0;
  190.             }
  191.             //on vérifie que les txtbox ne sont pas vides
  192.             if ( TxtNumeroPI.Text == null || TxtAdresseMAC.Text == null )
  193.             {
  194.                 this.CsV.Ligne = 0;
  195.             }
  196.             else
  197.             {
  198.                 //on rempli les champs
  199.                 this.DtrGrid [ "NumeroPI" ] = this.CsV.NumeroPI;
  200.                 this.DtrGrid [ "AdresseMAC" ] = this.CsV.AdresseMAC;
  201.                 this.DtrGrid [ "Modele" ] = this.CsV.Modele;
  202.                 this.DtrGrid ["Lieu"] = this.CsV.Lieu;
  203.             }
  204.             //on leve l'exception
  205.             try
  206.             {
  207.                 //on met tout dans la base de donnée
  208.                 this.CmdGrid = new OleDbCommandBuilder ( Dta );
  209.                 Dta.UpdateCommand = CmdGrid.GetUpdateCommand ();
  210.                 Dta.Update ( DtsGrid , "Switchs" );
  211.             }
  212.             catch (DBConcurrencyException /*DBCEx*/ )
  213.             {
  214.                 MessageBox.Show ( "Vous ne pouvez pas modifier quelque chose que vous venez de sauvegarder, veuillez redémarer l'application et recommencer" );
  215.             }
  216.             TxtNumeroPI.Text = null;
  217.             TxtAdresseMAC.Text = null;
  218.             comboModele.Text = null;
  219.             comboLieu.Text = null;
  220.         }
  221.         private void buttonAfter_Click(object sender, EventArgs e)
  222.          {
  223.             //on défini le nombre de lignes
  224.              this.CsV.NbSauvegarde = this.DtsGrid.Tables["Switchs"].Rows.Count;
  225.             //si il n'y a rien dans les textbox alors il faut aller a la premiere ligne
  226.              if (this.TxtNumeroPI.Text == null || this.TxtAdresseMAC.Text == null || this.comboModele.Text == null || this.comboLieu.Text == null)
  227.             {
  228.                 this.CsV.Ligne = 0;
  229.             }
  230.             else
  231.             {
  232.                 //on saute une ligne a chaques click
  233.                 this.CsV.Ligne = this.CsV.Ligne + 1;
  234.                 //on ne dépasse pas le dernier enregistrement
  235.                 if (this.CsV.Ligne > this.CsV.NbSauvegarde - 1)
  236.                 {
  237.                     this.CsV.Ligne = this.CsV.NbSauvegarde - 1;
  238.                 }
  239.             }
  240.             //on vérifi qu'il y a un enregistrement  
  241.             if ( this.CsV.Ligne < 0 )
  242.             {
  243.                 this.CsV.Ligne = 0;
  244.             }
  245.             else
  246.             {
  247.                 //on charge les données dans les variables
  248.                 this.CsV.NumeroPI = this.DttGrid.Rows [ this.CsV.Ligne ] [ "NumeroPI" ].ToString ();
  249.                 this.CsV.AdresseMAC = this.DttGrid.Rows [ this.CsV.Ligne ] [ "AdresseMAC" ].ToString ();
  250.                 this.CsV.Modele = this.DttGrid.Rows [ this.CsV.Ligne ] [ "modele" ].ToString ();
  251.                 this.CsV.Lieu = this.DttGrid.Rows[this.CsV.Ligne]["Lieu"].ToString();
  252.                 //on charge les données dans les textbox
  253.                 this.TxtNumeroPI.Text = this.CsV.NumeroPI;
  254.                 this.TxtAdresseMAC.Text = this.CsV.AdresseMAC;
  255.                 this.comboModele.Text = this.CsV.Modele;
  256.                 this.comboLieu.Text = this.CsV.Lieu;
  257.             }
  258.         }
  259.         private void buttonBefore_Click(object sender, EventArgs e)
  260.            {
  261.             //si il n'y a rien dans les textbox, alors il faut aller à la première ligne
  262.                if (this.TxtNumeroPI.Text == null || this.TxtAdresseMAC.Text == null || this.comboModele.Text == null || this.comboLieu.Text == null)
  263.             {
  264.                 this.CsV.Ligne = 0;
  265.             }
  266.             else
  267.             {
  268.                 // On saute une ligne a chaques click
  269.                 this.CsV.Ligne = this.CsV.Ligne - 1;
  270.             }
  271.             // On vérifie qu'il y à un enregistrement et,qu'on ne dépasse pas le premier enregistrement
  272.             if ( this.CsV.Ligne < 0 )
  273.             {
  274.                 this.CsV.Ligne = 0;
  275.             }
  276.             else
  277.             {
  278.                 //on charge les données dans les variables
  279.                 this.CsV.NumeroPI = this.DttGrid.Rows [ this.CsV.Ligne ] [ "NumeroPI" ].ToString ();
  280.                 this.CsV.AdresseMAC = this.DttGrid.Rows [ this.CsV.Ligne ] [ "AdresseMAC" ].ToString ();
  281.                 this.CsV.Modele = this.DttGrid.Rows [ this.CsV.Ligne ] [ "Modele" ].ToString ();
  282.                 this.CsV.Lieu = this.DttGrid.Rows[this.CsV.Ligne]["Lieu"].ToString();
  283.                 //On charge les données dans les textbox
  284.                 this.TxtNumeroPI.Text = this.CsV.NumeroPI;
  285.                 this.TxtAdresseMAC.Text = this.CsV.AdresseMAC;
  286.                 this.comboModele.Text = this.CsV.Modele;
  287.                 this.comboLieu.Text = this.CsV.Lieu;
  288.             }
  289.         }
  290.                
  291.         private void buttonDelete_Click(object sender, EventArgs e)
  292.         {
  293.             // Déclaration du data adapter
  294.             OleDbDataAdapter Dta = new OleDbDataAdapter(this.SqlGrid, this.Conn);
  295.             //on vérifi qu'il y a un enregistrement
  296.             if (this.CsV.Ligne < 0)
  297.             {
  298.                 this.CsV.Ligne = 0;
  299.             }
  300.             // On vérifie qu'il y à quelque chose dans les textbox
  301.             else if (this.TxtNumeroPI.Text == null || this.TxtAdresseMAC.Text == null)
  302.             {
  303.                 this.CsV.Ligne = 0;
  304.             }
  305.             else
  306.             {
  307.                 // On prend la ligne en cours et on la supprime
  308.                 this.DtsGrid.Tables["Switchs"].Rows[this.CsV.Ligne].Delete();
  309.             }
  310.             //on va a la ligne précédente
  311.             this.CsV.Ligne = this.CsV.Ligne - 1;
  312.             // On ne dépasse pas le dernier enregistrement
  313.             if (this.CsV.Ligne < 0)
  314.             {
  315.                 this.CsV.Ligne = 0;
  316.             }
  317.             // On lève l'exception
  318.             try
  319.             {
  320.                 // On met à jour la base de donnée
  321.                 this.CmdGrid = new OleDbCommandBuilder(Dta);
  322.                 Dta.UpdateCommand = CmdGrid.GetUpdateCommand();
  323.                 Dta.Update(DtsGrid, "Switchs" );
  324.             }
  325.             catch (DBConcurrencyException)
  326.             {
  327.                 MessageBox.Show("Vous ne pouvez pas modifier quelque chose que vous venez de sauvegarder, veuillez redémarer l'application et recommencer" );
  328.             }
  329.             // On suprime les données dans les textbox
  330.             TxtNumeroPI.Text = "";
  331.             TxtAdresseMAC.Text = "";
  332.             comboModele.Text = "";
  333.             comboLieu.Text = "";
  334.         }
  335.            
  336.         private void buttonExit_Click(object sender, EventArgs e)
  337.         {
  338.             this.Conn.Close();
  339.             this.Close();
  340.             Application.Exit();
  341.         }
  342.         private void buttonsearch_Click(object sender, EventArgs e)
  343.         {
  344.             // On vide le dataset  
  345.             this.DtsGrid.Clear();
  346.             // On vérifie qu'il y à quelque chose dans la txtsearch
  347.             if (this.TxtSearch.Text == null)
  348.             {
  349.                 // On choisi la requete sql
  350.                 this.SqlSearch = this.SqlGrid;
  351.             }
  352.             else if (this.RadNumeroPI.Checked == true)
  353.             {
  354.                 // On choisi la requete sql
  355.                 this.SqlSearch = "SELECT Switchs.N°,Switchs.NumeroPI, Switchs.AdresseMAC, Switchs.Modele, Switchs.Lieu FROM Switchs WHERE (Switchs.NumeroPI LIKE '%" + this.CsV.Recherche + "%')";
  356.             }
  357.             else if (this.radAdresseMAC.Checked == true)
  358.             {
  359.                 // On choisi la requete sql
  360.                 this.SqlSearch = "SELECT Contact.N°,Switchs.NumeroPI,Switchs.AdresseMAC, Switchs.Modele, Switchs.Lieu FROM Switchs WHERE (Switchs.AdresseMAC LIKE '%" + this.CsV.Recherche + "%')";
  361.             }
  362.             else if (this.radModele.Checked == true)
  363.             {
  364.                 // On choisi la requete sql
  365.                 this.SqlSearch = "SELECT Switchs.N°,Switchs.NumeroPI, Switchs.AdresseMAC, Switchs.Modele, Switchs.Lieu FROM Switchs WHERE (Switchs.Modele LIKE '%" + this.CsV.Recherche + "%')";
  366.             }
  367.             else if (this.radLieu.Checked == true)
  368.             {
  369.                 // On choisi la requete sql
  370.                 this.SqlSearch = "SELECT Switchs.N°,Switchs.NumeroPI, Switchs.AdresseMAC, Switchs.Modele, Switchs.Lieu FROM Switchs WHERE (Switchs.Lieu LIKE '%" + this.CsV.Recherche + "%')";
  371.             }
  372.             else if (this.radTout.Checked == true)
  373.             {
  374.                 // On choisi la requete sql
  375.                 this.SqlSearch = "SELECT Switchs.N°,Switchs.NumeroPI, Switchs.AdresseMAC, Switchs.Modele, Switchs.Lieu FROM Switchs" ;
  376.             }
  377.             else if (this.RadNumeroPI.Checked == false && this.radAdresseMAC.Checked == false && this.radModele.Checked == false)
  378.             {
  379.                 // On choisi la requete sql
  380.                 this.SqlSearch = this.SqlGrid;
  381.                 // On met un message d'alerte
  382.                 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);
  383.             }
  384.             else
  385.             {
  386.                 //on choisi la requete sql
  387.                 this.SqlSearch = this.SqlGrid;
  388.             }
  389.             //on ouvre la connection
  390.             this.Conn.Open();
  391.             //déclaration du data adapter
  392.             OleDbDataAdapter Dta = new OleDbDataAdapter(this.SqlSearch, this.Conn);
  393.             //on leve l'exception
  394.             try
  395.             {
  396.                 // On rempli le dataset avec la table
  397.                 Dta.Fill(this.DtsGrid, "Switchs" );
  398.             }
  399.             catch (Exception)
  400.             {
  401.                 //affichage de l'erreur
  402.                 MessageBox.Show("Une Erreur est survenue, si cela persiste veuillez contacter au plus vite le programmeur" );
  403.                 //on ferme la connection
  404.                 this.Conn.Close();
  405.                 //on ferme la fenêtre
  406.                 //this.Close();
  407.                 //on quitte l'application
  408.                 Application.Exit();
  409.             }
  410.             //on rempli la liste du datagridview avec le dataset
  411.             this.DttGrid = this.DtsGrid.Tables["Switchs"];
  412.             //on affiche la liste du datagridview dans le datagridview
  413.             this.Dtg.DataSource = this.DttGrid;
  414.             //on stylise la datagridview
  415.             this.StyleDtg();
  416.             //rafraichissement de la fenetre
  417.             //this.Show();
  418.             //on ferme la connection
  419.             this.Conn.Close();
  420.             //on vide la TxtSearch pour commencer une nouvelle recherche
  421.             this.TxtSearch.Text = null;
  422.         }
  423.         #endregion
  424.                      
  425.         #region Fonctions
  426.         private void StyleDtg()
  427.         {
  428.             this.Dtg.ColumnHeadersDefaultCellStyle.Font = new Font("Tahoma", 9, FontStyle.Bold, GraphicsUnit.Point);
  429.             this.Dtg.ColumnHeadersDefaultCellStyle.BackColor = SystemColors.ControlDark;
  430.             this.Dtg.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
  431.             this.Dtg.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
  432.             this.Dtg.DefaultCellStyle.Font = new Font("Tahoma", 8, FontStyle.Regular, GraphicsUnit.Point);
  433.             this.Dtg.DefaultCellStyle.BackColor = Color.Empty;
  434.             this.Dtg.AlternatingRowsDefaultCellStyle.BackColor = SystemColors.ControlLight;
  435.             this.Dtg.CellBorderStyle = DataGridViewCellBorderStyle.Single;
  436.             this.Dtg.GridColor = SystemColors.ControlDarkDark;
  437.             Dtg.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
  438.         }
  439.         #endregion 
  440.         #region TextBox
  441.         //TxtNom_TextChanged
  442.         private void TxtNumeroPI_TextChanged(object sender, EventArgs e)
  443.         {
  444.             this.CsV.NumeroPI = this.TxtNumeroPI.Text;
  445.         }
  446.         //TxtAdresseMAC_TextChanged
  447.         private void TxtAdresseMAC_TextChanged(object sender, EventArgs e)
  448.         {
  449.             this.CsV.AdresseMAC = this.TxtAdresseMAC.Text;
  450.         }
  451.         // comboModele_SelectedIndexChanged
  452.         private void comboModele_SelectedIndexChanged(object sender, EventArgs e)
  453.         {
  454.             this.CsV.Modele = this.comboModele.Text;
  455.         }
  456.         private void comboLieu_SelectedIndexChanged(object sender, EventArgs e)
  457.         {
  458.             this.CsV.Lieu = this.comboLieu.Text;
  459.         }
  460.         private void TxtSearch_TextChanged(object sender, EventArgs e)
  461.         {
  462.             this.CsV.Recherche = this.TxtSearch.Text;
  463.         }
  464.         #endregion
  465.     }
  466. }


 
 
Merci

Reply

Marsh Posté le 16-06-2009 à 21:09:16   

Reply

Marsh Posté le 17-06-2009 à 11:06:44    

Surtout, quand je vois que c'est même pas des requêtes paramétrée, moi je vote, et je dis "change d'études".

 

(pis je vois pas le rapport avec le titre... le fait que ce soit une adresse mac que tu cherches, ça n'a rien à voir avec le problème. le problème, c'est juste que tu sais pas écrire une requête sql, tu rechercherais une recette de potée auvergnate, tu aurais le même problème)


Message édité par MagicBuzz le 17-06-2009 à 11:07:50
Reply

Marsh Posté le 17-06-2009 à 11:09:19    

indice : "contact" est un préfixe de table qui n'a rien à faire dans une requête qui ne fait une recherche que sur "switchs"

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed