IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Problème insertion de données dans DB Access


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut Problème insertion de données dans DB Access
    Rebonjour à tous.

    Je sais qu'il y a un sujet similaire en ce moment même mais c'est pas vraiment la même chose au niveau du code donc je poste un autre topic...

    Donc, je souhaite, à l'aide de TextBox et d'un bouton, ajouter de nouvelles données dans une table de ma DB Access.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    ConnectToDB connect = new ConnectToDB();
     
    // Déclarations de variables utilisables sur tout le projet.
    public static string nomNotice = string.Empty;
    public static DateTime dateNotice;
    public static string nomReaNotice = string.Empty;
    public static string refNotice = string.Empty;
    public static int verNotice = 0;
     
    private void bt_add_notice_Click(object sender, EventArgs e)
    {
       if ((tb_nom_notice.Text == "") || (dtp_notice.Value == null) || (tb_nom_rea.Text == "") || (tb_version.Text == ""))
       {
           MessageBox.Show("Un champ est vide, veuillez le remplir.");
       }
       else
       {
          // Les variables reçoivent les données saisies.
          nomNotice = tb_nom_notice.Text;
          dateNotice = dtp_notice.Value;
          nomReaNotice = tb_nom_rea.Text;
          refNotice = tb_ref.Text;
          verNotice = Convert.ToInt32(tb_version.Text);
     
          connect.fctConnectDB();
          OleDbCommand addNewNotice = new OleDbCommand("Insert into Fiche (NomFiche, DateFiche, NomReaFiche, RefFiche, VerFiche) values(@nomNotice, @dateNotice, @nomRea, @refNotice, @verNotice)");
          addNewNotice.Connection = connect.ConnectionDB;
     
          // Création des paramètres de la requête.
          OleDbParameter paramNomNotice = addNewNotice.CreateParameter();
          paramNomNotice.ParameterName = "@nomNotice";
          paramNomNotice.OleDbType = OleDbType.VarChar;
          paramNomNotice.Direction = ParameterDirection.Input;
          paramNomNotice.Value = nomNotice;
     
          OleDbParameter paramDateNotice = addNewNotice.CreateParameter();
          paramDateNotice.ParameterName = "@dateNotice";
          paramDateNotice.OleDbType = OleDbType.Date;
          paramDateNotice.Direction = ParameterDirection.Input;
          paramDateNotice.Value = dateNotice;
     
          OleDbParameter paramNomRea = addNewNotice.CreateParameter();
          paramNomRea.ParameterName = "@nomRea";
          paramNomRea.OleDbType = OleDbType.VarChar;
          paramNomRea.Direction = ParameterDirection.Input;
          paramNomRea.Value = nomReaNotice;
     
          OleDbParameter paramRefNotice = addNewNotice.CreateParameter();
          paramRefNotice.ParameterName = "@refNotice";
          paramRefNotice.OleDbType = OleDbType.VarChar;
          paramRefNotice.Direction = ParameterDirection.Input;
          paramRefNotice.Value = refNotice;
     
          OleDbParameter paramVerNotice = addNewNotice.CreateParameter();
          paramVerNotice.ParameterName = "@refNotice";
          paramVerNotice.OleDbType = OleDbType.Integer;
          paramVerNotice.Direction = ParameterDirection.Input;
          paramVerNotice.Value = verNotice;
     
          addNewNotice.Parameters.Add(paramNomNotice);
          addNewNotice.Parameters.Add(paramDateNotice);
          addNewNotice.Parameters.Add(paramNomRea);
          addNewNotice.Parameters.Add(paramRefNotice);
          addNewNotice.Parameters.Add(paramVerNotice);
     
          connect.fctDisconnectDB();
       }
    }
    Le code de ma classe ConnectToDB au cas où...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class ConnectToDB
    {
       public System.Data.OleDb.OleDbConnection ConnectionDB;
       // Fonction de connexion à la DB.
       public void fctConnectDB()
       {
          ConnectionDB = new OleDbConnection();
          ConnectionDB.ConnectionString = "Provider=microsoft.jet.oledb.4.0;Data Source=NoticePoste_be.mdb";
          ConnectionDB.Open();
       }
     
       // Fonction de déconnexion à la DB.
       public void fctDisconnectDB()
       {
          ConnectionDB.Close();
          ConnectionDB.Dispose();
          ConnectionDB = null;
       }
    }
    Le souci c'est que l'enregistrement n'est pas créé et je n'ai aucun message d'erreur...
    Je me demandais si ça n'avait pas un rapport avec le fait que ma table Fiche a également un champ IdFiche qui est en numéro auto mais j'ai essayé de rajouter un param @idNotice qui prends pour valeur 3 (parce que je n'ai que 2 enregistrements dans la table fiche pour l'instant) mais ça n'a rien changé...

    Est-ce que quelqu'un pourrait m'aider SVP ?
    Par avance, merci.

    PS : skunkies si tu lis ce post, oui j'ai fait des requêtes paramétrées ! Y'a que les c*** qui changent pas d'avis

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    c'est très bien mais une fois la commande créée il faut l'exécuter avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myCommand.ExecuteNonQuery();

  3. #3
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut
    Euh t'es sur qu'on est obligé de mettre ça ? Nan parce que j'ai une autre requête sur un autre form et je ne mets pas cette méthode et ça marche très bien...
    Voici le code en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    private void bt_vérifier_Click(object sender, EventArgs e)
    {
       // Met la DataSource du DataGridView à null.
       dgv_nom_doc.DataSource = null;
       // Création d'une DataTable.
       DataTable dt_fiche = new DataTable();
     
       string nomFiche = tb_verif_nom_notice.Text;
       connect.fctConnectDB();
       OleDbCommand getNomFiche = new OleDbCommand("Select * from Fiche where NomFiche like '" + nomFiche + "'");
       getNomFiche.Connection = connect.ConnectionDB;
       OleDbDataAdapter da_fiche = new OleDbDataAdapter(getNomFiche); // Création d'un DataAdapter qui contient le résultat de la requête.
       da_fiche.Fill(dt_fiche);
       connect.fctDisconnectDB();
     
       // Création d'un BindingSource.
       BindingSource bs_fiche = new BindingSource();
       bs_fiche.DataSource = dt_fiche;
       // On affecte le nouveau BindingSource à la DataSource du DataGridView.
       dgv_nom_doc.DataSource = bs_fiche;
     
       bt_annuler_recherche.Visible = true;
    }
    Bon elle n'est pas encore paramétrée mais j'y mettrais à jour ^^

    Mais voilà et la requête s'exécute très bien sans pour autant rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getNomFiche.ExecuteNonQuery();
    Ceci dit j'ai pas voulu mourir con et j'ai essayé ce que tu m'as dit pour l'autre requêt (la Insert) et ça n'a rien changé...
    J'ai inséré la ligne que tu m'as dit juste avant la fonction de déconnexion.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    Desolé je n'ai pas le temps de me plonger dans ton code ,je te donne ce que j'ai fait dans le meme genre cela t'aidera.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // Connexion à la base de données
                        OleDbConnection cnxTestAccessImage = new OleDbConnection(connectionString);
                        cnxTestAccessImage.Open();
     
                        // Insere l'image dans la base
                        OleDbCommand cmdTestAccessImage = new OleDbCommand("INSERT INTO tblBATClients ([IDClient],[Image], [Commentaire]) VALUES (?,?, ?)", cnxTestAccessImage);
     
                        cmdTestAccessImage.Parameters.Add(new OleDbParameter("IDClient", System.Data.OleDb.OleDbType.VarWChar, 50,
                            ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, tBoxRaisonSociale.Text));
                        cmdTestAccessImage.Parameters.Add(new OleDbParameter("Image", OleDbType.VarBinary, bytImage.Length,
                            ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, bytImage));
                        cmdTestAccessImage.Parameters.Add(new OleDbParameter("Commentaire", System.Data.OleDb.OleDbType.VarWChar, 50,
                            ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, txtCommentaire.Text));
                        cmdTestAccessImage.ExecuteNonQuery();
                        cnxTestAccessImage.Close();
    je gere la connexion directement dans ma fonction

  5. #5
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut
    Ouais tu mets bien le ExecuteNonQuery() après la création des paramètres de ta requête, c'est ce que j'ai fait, mais l'enregistrement ne se fait pas

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    la forme de ma requete insert n'est pas la meme .
    j'ai des ? en temps que param toi tu as des @XXX

    Essaie de voir les differences.
    Bon courage

  7. #7
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut
    Si quelqu'un a le temps voici tout le code du bouton qui doit me créer l'enregistrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    ConnectToDB connect = new ConnectToDB();
     
    // Déclarations de variables utilisables sur tout le projet.
    public static string nomNotice = string.Empty;
    public static DateTime dateNotice;
    public static string nomReaNotice = string.Empty;
    public static string refNotice = string.Empty;
    public static int verNotice = 0;
     
    private void bt_add_notice_Click(object sender, EventArgs e)
    {
       if ((tb_nom_notice.Text == "") || (dtp_notice.Value == null) || (tb_nom_rea.Text == "") || (tb_version.Text == ""))
       {
           MessageBox.Show("Un champ est vide, veuillez le remplir.");
       }
       else
       {
          // Les variables reçoivent les données saisies.
          nomNotice = tb_nom_notice.Text;
          dateNotice = dtp_notice.Value;
          nomReaNotice = tb_nom_rea.Text;
          refNotice = tb_ref.Text;
          verNotice = Convert.ToInt32(tb_version.Text);
     
          connect.fctConnectDB();
          OleDbCommand addNewNotice = new OleDbCommand("Insert into Fiche (NomFiche, DateFiche, NomReaFiche, RefFiche, VerFiche) values(@nomNotice, @dateNotice, @nomRea, @refNotice, @verNotice)");
          addNewNotice.Connection = connect.ConnectionDB;
     
          // Création des paramètres de la requête.
          OleDbParameter paramNomNotice = addNewNotice.CreateParameter();
          paramNomNotice.ParameterName = "@nomNotice";
          paramNomNotice.OleDbType = OleDbType.VarChar;
          paramNomNotice.Direction = ParameterDirection.Input;
          paramNomNotice.Value = nomNotice;
     
          OleDbParameter paramDateNotice = addNewNotice.CreateParameter();
          paramDateNotice.ParameterName = "@dateNotice";
          paramDateNotice.OleDbType = OleDbType.Date;
          paramDateNotice.Direction = ParameterDirection.Input;
          paramDateNotice.Value = dateNotice;
     
          OleDbParameter paramNomRea = addNewNotice.CreateParameter();
          paramNomRea.ParameterName = "@nomRea";
          paramNomRea.OleDbType = OleDbType.VarChar;
          paramNomRea.Direction = ParameterDirection.Input;
          paramNomRea.Value = nomReaNotice;
     
          OleDbParameter paramRefNotice = addNewNotice.CreateParameter();
          paramRefNotice.ParameterName = "@refNotice";
          paramRefNotice.OleDbType = OleDbType.VarChar;
          paramRefNotice.Direction = ParameterDirection.Input;
          paramRefNotice.Value = refNotice;
     
          OleDbParameter paramVerNotice = addNewNotice.CreateParameter();
          paramVerNotice.ParameterName = "@refNotice";
          paramVerNotice.OleDbType = OleDbType.Integer;
          paramVerNotice.Direction = ParameterDirection.Input;
          paramVerNotice.Value = verNotice;
     
          addNewNotice.Parameters.Add(paramNomNotice);
          addNewNotice.Parameters.Add(paramDateNotice);
          addNewNotice.Parameters.Add(paramNomRea);
          addNewNotice.Parameters.Add(paramRefNotice);
          addNewNotice.Parameters.Add(paramVerNotice);
     
          addNewNotice.ExecuteNonQuery();
          connect.fctDisconnectDB();
       }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/07/2010, 23h43
  2. [MySQL] Problème insertion de données dans une table (via formulaire)
    Par bond70 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/04/2010, 16h48
  3. Problème INSERTION de données dans une bdd
    Par kiradeus dans le forum Django
    Réponses: 12
    Dernier message: 15/02/2010, 18h06
  4. [OpenOffice][Tableur] Problème insertion de donnes dans textfield ou numeric
    Par stargates dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 02/09/2008, 16h27
  5. [MySQL] Problème insertion de données dans table Mysql
    Par Malcolm78 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/10/2007, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo