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

C# Discussion :

Probleme d'ajout d'une ligne dans une table


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Par défaut Probleme d'ajout d'une ligne dans une table
    je veut a jouter une ligne dans une table avec le paramètre insert mais ça me donne cette erreur ("Modifications non effectuées: risque de doublons dans champs index, clé primaire ou relation interdisant les doublons") sous access j'ai essayer de rajouter une ligne et j'ai pas eu de problème
    voici le code :
    code pour la table :

    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
     
            private void tableproduction_journaliere(object sender, EventArgs e)
            {
                if (datasetproduction.Tables["production_journaliere"] == null)
                {
                    production_journaliere.SelectCommand = new OleDbCommand();
                    production_journaliere.SelectCommand.Connection = Connectionproduction;
                    production_journaliere.SelectCommand.CommandText = "SELECT production_journaliere.*, production_journaliere.qte_realisee FROM production_journaliere WHERE (((production_journaliere.date_production)=Date()) AND ((production_journaliere.num_poste)='" + labelpost.Text.ToString() + "') AND ((production_journaliere.cleproduit)='" + labelreference.Text.ToString() + "'));";
                    production_journaliere.SelectCommand.CommandType = CommandType.Text;
                    production_journaliere.InsertCommand = new OleDbCommand();
                    production_journaliere.InsertCommand.Connection = Connectionproduction;
                    production_journaliere.InsertCommand.CommandText = "INSERT INTO production_journaliere (date_production,num_poste,cleproduit) VALUES (:date_production,:num_poste,:cleproduit)";
                    production_journaliere.InsertCommand.CommandType = CommandType.Text;
                    production_journaliere.InsertCommand.Parameters.Add(":date_production", OleDbType.DBDate,8);
                    production_journaliere.InsertCommand.Parameters.Add(":num_poste", OleDbType.LongVarChar,15);
                    production_journaliere.InsertCommand.Parameters.Add(":cleproduit", OleDbType.LongVarChar, 15);
                    Connectionproduction.Open();
                    production_journaliere.Fill(datasetproduction, "production_journaliere");
                    Connectionproduction.Close();
                    bindingproduction_journaliere.DataSource = datasetproduction;
                    bindingproduction_journaliere.DataMember = "production_journaliere";
                    gridopd.DataSource = datasetproduction;
                    gridopd.DataMember = "production_journaliere";
                }
                else
                {
                    datasetproduction.Tables["production_journaliere"].Clear();
                    production_journaliere.SelectCommand = new OleDbCommand();
                    production_journaliere.SelectCommand.Connection = Connectionproduction;
                    production_journaliere.SelectCommand.CommandText = "SELECT production_journaliere.*,production_journaliere.qte_realisee FROM production_journaliere WHERE (((production_journaliere.date_production)=Date()) AND ((production_journaliere.num_poste)='" + labelpost.Text.ToString() + "') AND ((production_journaliere.cleproduit)='" + labelreference.Text.ToString() + "'));";
                    production_journaliere.SelectCommand.CommandType = CommandType.Text;
                    production_journaliere.InsertCommand = new OleDbCommand();
                    production_journaliere.InsertCommand.Connection = Connectionproduction;
                    production_journaliere.InsertCommand.CommandText = "INSERT INTO production_journaliere (date_production,num_poste,cleproduit) VALUES (:date_production,:num_poste,:cleproduit)";
                    production_journaliere.InsertCommand.CommandType = CommandType.Text;
                    production_journaliere.InsertCommand.Parameters.Add(":date_production", OleDbType.DBDate);
                    production_journaliere.InsertCommand.Parameters.Add(":num_poste", OleDbType.LongVarChar, 15);
                    production_journaliere.InsertCommand.Parameters.Add(":cleproduit", OleDbType.LongVarChar, 15);
                    Connectionproduction.Open();
                    production_journaliere.Fill(datasetproduction, "production_journaliere");
                    Connectionproduction.Close();
                    bindingproduction_journaliere.DataSource = datasetproduction;
                    bindingproduction_journaliere.DataMember = "production_journaliere";
                    gridopd.DataSource = datasetproduction;
                    gridopd.DataMember = "production_journaliere";
                }
            }
    code pour l'ajout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    tableproduction_journaliere(sender, e);
                    if (datasetproduction.Tables["production_journaliere"].Rows.Count == 0)
                    {
                        MessageBox.Show(datasetproduction.Tables["production_journaliere"].Rows.Count.ToString());
                        production_journaliere.InsertCommand.Parameters[":date_production"].Value = DateTime.Today;
                        production_journaliere.InsertCommand.Parameters[":num_poste"].Value = labelpost.Text;
                        production_journaliere.InsertCommand.Parameters[":cleproduit"].Value = labelreference.Text;
                        DataRow Row1 = datasetproduction.Tables["production_journaliere"].NewRow();
                        Row1["date_production"] = DateTime.Today;
                        Row1["num_poste"] = labelpost.Text;
                        Row1["cleproduit"] = labelreference.Text;
                        datasetproduction.Tables["production_journaliere"].Rows.Add(Row1);
                        production_planifier.Update(datasetproduction.Tables["production_journaliere"]);
                    }
    remarque :
    1 - la table est vide
    2- j'ai un champs auto incrément.

    merci d'avance.

  2. #2
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Bonjour,

    tu as probablement un champ pour ta primary Key sous accès en Numero Auto. Je pense déjà avoir eu des soucis. Perso je gère mon index moi même.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Par défaut
    oui exactement ... comment contourné ce problème ?

  4. #4
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Ce que je faisais avec Access :

    Le champs de la clé en numérique.

    Et pour récupérer la valeur unique d'un nouvel enregistrement :

    select max(valcle) from table.

    et tu fais + 1 avant le insert.

    Maintenant il y a moyen peut-être de maintenir un compteur au sein de ton application, cela dépend ce que tu fais exactement mais c'est plus dangereux.

    (Méthode utilisée il y a plus de 3 ans je n'ai plus bossé avec access depuis donc peut-être des évolutions).
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Par défaut
    le problème c'est que j'ai pu ajouter des ligne dans une table similaire avec la même méthode mais la je sais pas pourquoi ça marche pas ?

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Un champ autoincrement ne doit pas être inclus dans la commande INSERT.

    On récupérera sa valeur après l'insert dans l'event Rowupdated du DataAdapter par une commande SELECT @@IDENTITY.

Discussions similaires

  1. Colorer une ligne dans une image d'une interface
    Par yasmine2013 dans le forum Interfaces Graphiques
    Réponses: 0
    Dernier message: 27/05/2012, 22h32
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  4. Réponses: 3
    Dernier message: 29/01/2008, 12h08
  5. Réponses: 5
    Dernier message: 27/09/2007, 13h39

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