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

Requêtes et SQL. Discussion :

Mise à jour sur clés primaires


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Profil pro
    Consultant MOA
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 32
    Points
    32
    Par défaut Mise à jour sur clés primaires
    Bonjour,
    j'ai un petit problème avec une requête de mise à jour.
    Elle est toute simple, voilà la version SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE Client  
    SET Client.NumClient = [Nouveau numéro] 
    WHERE (((Client.NumClient)=[Ancien numéro]));
    NumClient est la clé primaire de Client, jusque-là tout va bien, enfin il me semble qu'on peut changer la valeur d'une clé tant qu'on introduit pas de doublons. Le problème, c'est que NumClient sert de clé primaire dans d'autres relations aussi (pas ma faute...). J'ai demandé à ce que les mises à jour soient faites en cascade, mais toute mise à jour est refusée. J'imagine que c'est parce que c'est la clé dans d'autres relations...

    Y a-t'il une solution à ça ?

  2. #2
    Membre confirmé Avatar de timoth
    Homme Profil pro
    Responsable Outils Digitaux
    Inscrit en
    Octobre 2005
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable Outils Digitaux

    Informations forums :
    Inscription : Octobre 2005
    Messages : 479
    Points : 474
    Points
    474
    Par défaut
    Bonjour,

    Je ne suis pas un expert dans ce domaine là mais tu ne devrais pas avoir de problemes pour faire ca. Il faut bien cependant modifier le champ dans la table dans laquelle l'info est "Clé primaire".

    La seule raison que je vois, c'est que tu aies un champ Numclient en numéro automatique. Si c'est le cas, il faut le changer le type de ton champ en Number.
    puis et puis et encore . Sinon sans oublier et

  3. #3
    Nouveau membre du Club
    Profil pro
    Consultant MOA
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Pas de numéro automatique, dans aucune table.
    Je tente de 2 façons : une fois en ne donnant l'instruction que pour une des tables, càd la requête plus haut, et une autre fois en spécifiant toutes les tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PARAMETERS ancien_numéro Long, nouveau_numéro Long;
    UPDATE Client, HistoPrel, HistoDup SET Client.NumClient = nouveau_numéro, HistoPrel.NumClient=nouveau_numéro, HistoDup.NumClient=nouveau_numéro
    WHERE (((Client.NumClient)=[ancien_numéro]) AND ((HistoPrel.NumClient)=[ancien_numéro]) AND ((HistoDup.NumClient)=[ancien_numéro]));
    et il me dit qu'il n'arrive pas à mettre à jour l'enregistrement pour cause de violation de clé - sachant que bien sûr, je n'essaie pas de mettre une nouvelle valeur qui est déjà présente ailleurs dans ma table.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Oui, mais la valeur que tu veux modifier est présent dans une autre table, donc il y'a une violation, tu ne peux faire de modifs que si tu n'as pas de correspondance dans une autre table.

    Starec

  5. #5
    Nouveau membre du Club
    Profil pro
    Consultant MOA
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Mais moi je voudrais qu'il mette à jour cette valeur dans toutes les tables avec lesquelles il y a une relation portant sur ce champ....Je suis même prête à le faire manuellement !
    C'est pas possible ?

  6. #6
    Membre confirmé Avatar de timoth
    Homme Profil pro
    Responsable Outils Digitaux
    Inscrit en
    Octobre 2005
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable Outils Digitaux

    Informations forums :
    Inscription : Octobre 2005
    Messages : 479
    Points : 474
    Points
    474
    Par défaut
    Non, ta deuxieme requete n'est pas bonne. Si tu as bien défini la mise a jour des champs en cascade, tu n'as pas besoin de modifier les infos dans tes tables annexes. C'est pourtant tout a fait possible !
    Fais-nous une copie d'écran de tes tables/relations pour qu'on y voit plus clair? Quel est exactement le message d'erreur qui s'affiche ?
    puis et puis et encore . Sinon sans oublier et

  7. #7
    Nouveau membre du Club
    Profil pro
    Consultant MOA
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Voici les tables impliquées : NumClient est présent dans toutes, et clé primaire dans 3 (Client, HistoPrel, HistoDup).


    [IMG][/IMG]

    Et le message d'erreur :

    [IMG][/IMG]

  8. #8
    Membre confirmé Avatar de timoth
    Homme Profil pro
    Responsable Outils Digitaux
    Inscrit en
    Octobre 2005
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable Outils Digitaux

    Informations forums :
    Inscription : Octobre 2005
    Messages : 479
    Points : 474
    Points
    474
    Par défaut
    C'est bizarre, dans tes relations, on a l'impression que tes numClient sont liés à une autre champ de ta table Client. C'est peut etre juste une illusion.

    J'avais pas pigé qu'il y avait des liens 1-1 (c'est tres bizarre, pourquoi pas intégrer ces champs là dans ta table Client directement ?)

    As-tu essayer de faire tourner ta requete sur HistoPrel ou Duplicata ?? Tu dois avoir un (ou des) champs de ces deux tables qui n'existent pas dans Client.
    En tout cas, je pense que le bordel vient de tes relations 1-1.
    puis et puis et encore . Sinon sans oublier et

  9. #9
    Nouveau membre du Club
    Profil pro
    Consultant MOA
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Les NumClient sont bien liés à NumClient, c'est juste que j'ai trafiqué l'imprEcran par flemme de le refaire
    (la clé de Client n'apparaissait pas).

    Quant aux liens 1-1, même si ça n'est pas logique, cette base n'est de toute façon pas normalisée et je ne peux rien y changer, trop grosse machinerie derrière. Dans le cas ici, je pense que c'est pour ne pas rendre la table Client encore plus grosse...

    J'ai tenté de lancer un update sur HistoPrel, pas plus de succès.
    Je n'ai pas précisé que je travaille sur des bases liées, je ne pense pas que ça joue, mais au cas où je répare cet oubli.
    Merci d'essayer de m'aider en tout cas

  10. #10
    Membre confirmé Avatar de timoth
    Homme Profil pro
    Responsable Outils Digitaux
    Inscrit en
    Octobre 2005
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable Outils Digitaux

    Informations forums :
    Inscription : Octobre 2005
    Messages : 479
    Points : 474
    Points
    474
    Par défaut
    Ce que je t'aurais bien conseillé, ça serait de tester ton code en enlevant une par une tes relations pour voir la ou ca merde et d'éventuellement mettre a jour la table incriminée séparément.
    Je n'ai pas beaucoup plus d'idées.
    puis et puis et encore . Sinon sans oublier et

  11. #11
    Nouveau membre du Club
    Profil pro
    Consultant MOA
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Oui mais on sait que ça merde à cause d'HistoPrel et HistoDup. Si on supprime les relations entre ces tables et Client, ça marche, mais on voudrait faire les mises à jour sans avoir à supprimer les relations puis les remettre....

  12. #12
    Membre confirmé Avatar de timoth
    Homme Profil pro
    Responsable Outils Digitaux
    Inscrit en
    Octobre 2005
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable Outils Digitaux

    Informations forums :
    Inscription : Octobre 2005
    Messages : 479
    Points : 474
    Points
    474
    Par défaut
    J'ai tenté de lancer un update sur HistoPrel, pas plus de succès.
    Tu as essayé aussi sur HistoDup ?

    Si tu enleves tes relations 1-1 et essaye de les remettre (de la table Client vers HistoPrel et HistoDup, pas de souci ???)

    Moi, je t'aurais bien conseillé de revenir a une seule et meme table. Avec une requete de sélection -> creation d'une nouvelle table, c'est vite fait et sur.
    puis et puis et encore . Sinon sans oublier et

  13. #13
    Nouveau membre du Club
    Profil pro
    Consultant MOA
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 32
    Points
    32
    Par défaut Presque résolution par voie détournée
    Voilà comment c'est géré, finalement : je code tout ça dans mon appli VB, en 3 étapes. D'abord on supprime les relations qui posent pb, ensuite on fait les modifs voulues, et puis on recrée les relations.
    Le but, c'était qu'il n'y ait rien à faire manuellement pour l'utilisateur, donc comme c'est codé, ça va, c'était la solution (suppression - recréation).
    Merci pour l'aide

  14. #14
    Membre confirmé Avatar de timoth
    Homme Profil pro
    Responsable Outils Digitaux
    Inscrit en
    Octobre 2005
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable Outils Digitaux

    Informations forums :
    Inscription : Octobre 2005
    Messages : 479
    Points : 474
    Points
    474
    Par défaut
    Ravi que tu aies trouvé une solution a ton probleme. N'oublie pas le tag
    Ca aide les administrateurs a mettre de l'ordre dans le forum.
    A bientot
    Timoth
    puis et puis et encore . Sinon sans oublier et

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je viens de regarder ta structure, il y'a un problème avec les tables Histo. Si j'ai bien vu tu as un champ par mois, cela veut dire que tu dois ajouter un champ à chaque mois.

    Une base doit évoluer en nombre d'enregistrements et non en nombre de champs. Ce n'est pas bon du tout.

    Starec

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/07/2007, 16h23
  2. [Requête/SQL]Faire une mise à jour sur une sélection
    Par Xe2007 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/04/2007, 17h03
  3. Réponses: 8
    Dernier message: 14/02/2007, 10h37
  4. requête VBA mise à jour et clé primaire
    Par kiki.gaby dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/01/2007, 18h00
  5. Réponses: 13
    Dernier message: 27/11/2006, 11h17

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