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

VB.NET Discussion :

Conflit à la suppression d'un champ dans la BDD [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 14
    Par défaut Conflit à la suppression d'un champ dans la BDD
    Bonsoir developpez.com,

    J'ai un soucis au niveau d'une requête SQL "DELETE"

    J'ai une base de donnée avec des tables:
    TMatos: référencement des matériels
    TPannes: référencement des pannes associées aux matériels
    Ttechnicien: référencement des techniciens s'occupant des pannes

    Et donc la suppression d'un matériel plante si une panne y est associée, suppression d'une panne plante si un technicien y est associé.

    Je comprend d'où vient le problème, on ne peut supprimer un matériel avec une panne associé puisque ça créerait une erreur dans la table panne et idem pour la suppression d'une panne.

    Seulement je ne trouve pas la solution pour vérifier si par exemple une panne est associée à un matériel :/

    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
            strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sourcebdd()
            Conn = New OleDbConnection()
     
            Conn.ConnectionString = strCon
     
            Conn.Open()
     
            'Choisi quelle requête utilisée suivant ce que l'utilisateur a choisi dans les combobox.
            If CbxTables.Text = "TMatos" Then
     
                strSql = "DELETE FROM " & CbxTables.Text & " WHERE NomMatos='" & CbxChamp.Text & "'"
     
            ElseIf CbxTables.Text = "TFournisseurs" Then
     
                strSql = "DELETE FROM " & CbxTables.Text & " WHERE NomFournisseur'" & CbxChamp.Text & "'"
     
            ElseIf CbxTables.Text = "TPannes" Then
     
                strSql = "DELETE FROM " & CbxTables.Text & " WHERE DescriptionPanne='" & CbxChamp.Text & "'"
     
            End If
     
     
            'MsgBox(strSql)
     
            Comm = New OleDbCommand(strSql)
     
            Comm.Connection() = Conn
            Comm.ExecuteNonQuery()
     
            Conn.Close()
    Si vous avez une solution ou un début de solution ça m'aiderai, merci beaucoup.

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Bonsoir,

    Cela ressemble à un problème d'intégrité référentielle.
    Comment sont paramétrées vos relations entre les tables?

  3. #3
    Membre averti Avatar de csik78
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 30
    Par défaut
    A lecture rapide ça a l'air d'être comme tu le signales un problème de dépendance.

    Il y a une relation entre les entités de ta base, tu ne pourras pas supprimer une donnée sans en supprimer d'autre. Il ne serait pas correct dans une panne de faire référence à un matériel qui n'existe plus.

    Dans ce cas là, il y a une méthode du "DELETE CASCADE", à mes souvenirs, on choisit l'option de la suppression en cascade à la création de la table cependant, il est peut être possible de le réaliser une fois les tables crées. Je t'invite à regarder de ce côté ci, sinon il faudra supprimer les pannes associés au matériel au préalable, avant de supprimer le matériel.

    Je suis un débutant également, il est préférable d'attendre l'avis d'une personne plus fiable.

    Bon courage !

    Petit édit : Pour savoir si une panne est associé à un matériel, tu peux faire quelques choses comme ceci, si ils sont liés par une clé étrangère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT idPanne, nomPanne
    FROM PANNE P, MATERIEL M
    WHERE P.IdMateriel = M.IdMateriel
    AND nomMateriel = 'Ordinateur'
    En espérant ne pas répondre à côté..

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 14
    Par défaut
    Merci pour vos réponse

    Rainui: Voici mes tables



    csik78: Je vais de suite tester tes propositions, je donnerais les résultats demain merci.

    Bonne soirée

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Bonsoir,

    J'ai testé rapidement. Il semblerais que votre problème vienne de la configuration de vos relations entre vos tables.

    Pour pouvoir supprimer en cascade, il faut lever le verrou de la relation.
    Dans la fenêtre de config de la relation cochez la case "Effacer en cascade les enregistrements correspondants".

    C'est à utiliser avec modération

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 14
    Par défaut
    Bonjour,

    Merci Rainui c'est parfait !

    C'est à utiliser avec modération
    Comment ça ?

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    C'est juste qu'il faut bien réfléchir avant de faire une suppression en casquade.

    Juste un exemple :
    Dans mon métier, une preuve de réparation doit être conservée pendant 10 APRES la réforme d'une machine. Imagine que l'on efface une machine, on ne saurait plus quel technicien a effectué la réparation, à quelle date, ce qu'il a fait ...

    Si par la suite tu souhaites tirer des statistique sur ton matériel, comme la MTBF, il te faut un maximum de données.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 14
    Par défaut
    Mhm, d'accord je comprend.

    En tout cas merci à vous pour vos explications et aussi à csik78 qui a essayé de me dépanner

    Bonne journée

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

Discussions similaires

  1. suppression d'un champ dans une liste
    Par the_beginner dans le forum C
    Réponses: 1
    Dernier message: 16/05/2011, 01h32
  2. Interdire la suppression d'une ligne dans une BDD
    Par griese dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 30/06/2006, 10h32
  3. insertion d'un champs dans une bdd access
    Par pepper18 dans le forum SGBD
    Réponses: 1
    Dernier message: 26/05/2006, 19h47
  4. Suppression d'un champs dans un etat si le champs vide
    Par franck06 dans le forum Access
    Réponses: 6
    Dernier message: 10/04/2006, 15h24
  5. Suppression d'un champ d'une bdd
    Par Kerod dans le forum C++Builder
    Réponses: 4
    Dernier message: 27/02/2006, 22h19

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