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

Accès aux données Discussion :

Problème avec Insert dans une table contenant deux clés


Sujet :

Accès aux données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Problème avec Insert dans une table contenant deux clés
    Bonsoir
    Sur VB.net quand j'essaie d'insérer des données récupérées, j'ai l'erreur suivante:
    Conflit entre l'instruction INSERT et la contrainte COLUMN FOREIGN KEY 'FK_traitement_ticket_panne'. Le conflit est survenu dans la base de données 'Gest_pannes', table 'ticket_panne', column 'num_tick'.
    L'instruction a été arrêtée.

    sachant que num_ticket est une colonne qui est autoincrémentable, et qui est une des clé primaires de ma table (l'autre étant le compte_technicien) ... cette erreur survient quand pour insérer j'omet de mentionner la valeur de num_ticket (comme j'ai fais aïlleurs vu que c'est autoincrémentable) !
    voici ma partie du 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
    Dim conn As New SqlConnection
            Dim strtraitement As String
     
            conn.ConnectionString = "workstation id='NOM-B0A1C0A3909';packet size=4096;integrated security=SSPI;data source='NOM-B0A1C0A3909';persist security info=False;initial catalog=Gest_pannes"
     
            strtraitement = "insert into traitement values ('" & datenow & "' , 'pris',  '" & technic & "' ) "
     
     
            conn.Open()
     
            Dim cmdtickpanne As New SqlCommand(strtraitement, conn)
     
            cmdtickpanne.ExecuteNonQuery()
     
            conn.Close()

  2. #2
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Lorsque tu fais un insert, il faut indiquer les colonnes que tu veux affecter.

    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
     
    strtraitement = _
        "insert traitement(Col1, Col2, Col3) values (@Col1 , @Col2, @Col3)"
     
    conn.Open()
     
    Dim cmdtickpanne As New SqlCommand(strtraitement, conn)
     
    cmdtickpanne.AddParameter("@Col1",datenow)
    cmdtickpanne.AddParameter("@Col2","pris")
    cmdtickpanne.AddParameter("@Col3",technic)
     
    cmdtickpanne.ExecuteNonQuery()
     
    conn.Close()
    Autre chose, penses à utiliser AddParameter, ça va te simplifier la vie.


    Kelpan

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    oui je l ai fais mais toujours l'erreur suivante:

    Conflit entre l'instruction INSERT et la contrainte COLUMN FOREIGN KEY 'FK_traitement_ticket_panne'. Le conflit est survenu dans la base de données 'Gest_pannes', table 'ticket_panne', column 'num_tick'.
    L'instruction a été arrêtée.

    pour le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    strtraitement = "insert into traitement (date_ouverture, resultat, compte_tech) values ('" & datenow & "' , 'pris',  '" & technic & "' ) "
     
     
            conn.Open()
     
            Dim cmdtickpanne As New SqlCommand(strtraitement, conn)
     
            cmdtickpanne.ExecuteNonQuery()
     
            conn.Close()

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    voici ma base de données


  5. #5
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Reformulons...

    La table traitement contient une colonne "num_ticket" qui est autoincrémentable et clé étrangère de l'identifiant de la table "ticket_panne" !!??
    C'est une incohérence...

    Tu as fait une confusion. Ce n'est pas parce que ta colonne est autoincrémentable dans "ticket_panne" qu'elle dit l'être aussi dans "traitement" pour pouvoir faire une liaison. Il faut juste que ta colonne soit de même type (en l'occurence integer).

    Maintenant le problème vient de ton MCT (modèle conceptuelle de traitement) (j'espère que je dis pas de conneries, ça fait tellement longtemps ...)

    Le problème est que tu essayes de créer un traitement pour une panne qui n'est pas identifiée.
    Pour créer ta ligne traitement, il te faut suivre les étapes suivantes :

    1. Créer ou se positionner sur un ticket de panne à traiter
    2. Récupérer l'identifiant du ticket de panne à traiter
    3. Ajouter une ligne de traitement en signalant le ticket de panne qui est traité

  6. #6
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Je confirme que Keplan a raison, c'est cela ton problème.

    Vous avez un problème bien connu qu'on appelle intégrité référentielle :

    Le ticket de la panne doit exiter dans la table ticket_panne avant d'inserer une ligne de traitement.

    Votre insert doit comporter la référence du ticket à traiter.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

Discussions similaires

  1. [Débutant] Souci insertion dans une table contenant 2 clés étrangères MySql/C#
    Par Mac Chouffe dans le forum C#
    Réponses: 15
    Dernier message: 17/06/2015, 16h29
  2. [MySQL-5.5] Problème d'insertion dans une table avec un fichier externe
    Par tabony dans le forum Requêtes
    Réponses: 0
    Dernier message: 26/11/2013, 12h55
  3. [MySQL] problème avec insert dans une table
    Par berti dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 04/07/2008, 15h30
  4. [Conception] Problème avec INSERT dans une TABLE
    Par dunbar dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 20/07/2006, 12h56
  5. Problème d'insertion dans une table MYSQL
    Par greg69 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/10/2005, 11h34

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