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

Langage SQL Discussion :

MoveUp/MoveDown d'une ligne dans une base de données


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 434
    Points : 108
    Points
    108
    Par défaut MoveUp/MoveDown d'une ligne dans une base de données
    Bonjour,

    Dans une application, je remplis une TreeView pour alimenter une DB. Jusque là tout est OK.

    J'ai deux fonctions MoveUp et MoveDown qui me permettent de monter ou descendre l'item sélectionner dans ma Treeview. Je voudrais qu'en même temps je MoveUp ou MoveDown dans ma TreeView, ça le fasse dans ma base de données.

    Pour information ma base de données à trois colonnes: 2 colonnes basic et 1 colonne rowid

    Je ne sais pas exactement quelle commande utiliser? Est-il possible de bouger une ligne en fonction de l'autoincrement?

    Merci par avance pour vos retour.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    Il faut ajouter une colonne qui contiendra l'ordre relatif de la ligne.

  3. #3
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 434
    Points : 108
    Points
    108
    Par défaut
    AH.... Je ne souhaitai justement pas passer par cette solution là

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    pourquoi
    Que représente la colonne rowid ? est-ce la clef primaire ?

  5. #5
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 434
    Points : 108
    Points
    108
    Par défaut
    Oui, elle représente la clé primaire.

    Pour être plus précis, je stocke dans ma TreeView une liste de production donc les lignes doivent être modifiables, supprimables, et déplaçables dans la liste...

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Supernatural Voir le message
    Est-il possible de bouger une ligne en fonction de l'autoincrement?
    Surtout pas ! l'autoincrément est un identifiant technique, sans signification fonctionnelle, qui ne doit JAMAIS être utilisé comme critère de rangement chronologique !

    La bdd stocke une nomenclature genre composant / composé ?

  7. #7
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 434
    Points : 108
    Points
    108
    Par défaut
    Alors comment dois-je faire si on ne dois pas utiliser une clef primaire? J'en ai besoin pour savoir quelle ligne je dois modifier, déplacer, etc... Si on ne peut pas déplacer par exemple la ligne avec la clef primaire 6 devant la ligne avec la clef primaire 3, que faire?

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Je n'ai pas dit qu'il ne fallait pas de PK, j'ai dit que si la PK était de type "auto_incrément" il ne fallait surtout pas l'utiliser comme critère temporel.

    Les identifiants attribués par le SGBD ne sont pas obligatoirement distribués selon un ordre chronologique, surtout si les accès concurrents sont nombreux.
    L'identifiant 500 peut tout à fait avoir été ajouté après l'identifiant 510

  9. #9
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 434
    Points : 108
    Points
    108
    Par défaut
    Ah ok, car je ne l'utilise pas, je veux juste déplacer les lignes dans la DB mais je ne sais pas quelle fonction utiliser voilà

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Oui mais "déplacer des lignes dans la DB" ne veut rien dire : dans une BDD relationnelle, contrairement à une BDD hiérarchique, il n'y a pas d'ordre de rangement.
    Vous n'avez pas répondu à ma question sur la nature du contenu, est-ce une nomenclature arborescente de type parent/enfant ou composant/composé ?
    Si c'est bien le cas, la position relative dans l'arborescence se calcule via une requête reflexive

  11. #11
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 434
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Vous n'avez pas répondu à ma question sur la nature du contenu, est-ce une nomenclature arborescente de type parent/enfant ou composant/composé ?
    Si c'est bien le cas, la position relative dans l'arborescence se calcule via une requête reflexive
    Je n'ai pas compris votre question.

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    La question est de savoir à quoi sert cette BDD, avec quelques exemples de contenu éventuellement

  13. #13
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 434
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    La question est de savoir à quoi sert cette BDD, avec quelques exemples de contenu éventuellement
    Ah ok, en fait comme je l'ai expliqué un peu plus haut, je rempli une Treeview pour définir un plan de production (référence à produire et la quantité) rien de compliquer jusque là.

    Pour des raison de flexibilité, je dois être en mesure de pouvoir modifier les données, les supprimer ou même de déplacer certains items si mon plan de production évolue.

    Faire tout cela dans ma Treeview est ok, mais je voudrais qu'en parallèle je modifie ma DB pour me retrouver en temps réel avec la même image de ma TreeView dans ma DB.

    Les données sont du style Colonne référence: '0123321123-00' Quantité:'100'

  14. #14
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 144
    Points : 194
    Points
    194
    Par défaut
    Bonjour

    Citation Envoyé par aieeeuuuuu Voir le message
    bonjour,

    Il faut ajouter une colonne qui contiendra l'ordre relatif de la ligne.
    Et pourtant c'est la meilleur solution, où rajouté une table avec ton ID de la première et un champ ordre, à mon avis tu seras obligé de passer par là.

  15. #15
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    OK donc rien à voir avec une nomenclature et en ce cas je rejoins la réponse de aieeeuuuuu, à savoir : ajouter une colonne pour préciser l'ordre

  16. #16
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    OK donc rien à voir avec une nomenclature et en ce cas je rejoins la réponse de aieeeuuuuu, à savoir : ajouter une colonne pour préciser l'ordre
    Par contre, je te conseille grandement de gérer le changement d'ordre par procédure stockée ou trigger.
    Ceci permettra :
    - De gérer plus facilement la concurrence d'accès
    - D'avoir une transaction implicite et pouvoir tout rollbacker en cas d'anomalie
    - D'avoir un code réutilisable si tu dois gérer ces changement d'ordre à plusieurs endroit et/ou depuis plusieurs logiciels différents
    On ne jouit bien que de ce qu’on partage.

  17. #17
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 434
    Points : 108
    Points
    108
    Par défaut
    Ok, donc j'ai créé ma colonne supplémentaire.

    Maintenant comment dois-je faire dans le principe?

    Je fais un MoveUp dans ma liste (je passe de la position 5 à la position 4), j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curseur.execute("UPDATE "+SELECTED_LINE+" SET RELATIVE_ORDER...
    RELATIVE_ORDER étant la colonne dédiée à l'ordre.

    Je pense qu'il que je passe par un , mais je galère un chouya

  18. #18
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    il faut modifier l'ordre dans la nouvelle colonne pour au moins deux lignes dans le cas le plus simple (inversion de deux lignes seulement) ;
    Reste à savoir comment vous allez initialiser cette colonne

  19. #19
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 434
    Points : 108
    Points
    108
    Par défaut
    Au final, je ne comprends toujours pas pourquoi on ne peut pas travailler avec la colonne clef primaire?

    Si je lui dis tu prends les valeurs de la ligne ID 3 que tu remplaces par celles de la ligne 2 et inversement... Ce que l'on peut appeler 'SWAP' je ne suis pas obligé de passer par une colonne supplémentaire... non?

  20. #20
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 144
    Points : 194
    Points
    194
    Par défaut
    Bonjour,

    On ne modifie jamais une clé primaire, surtout si elle est clé étrangère d'une autre table.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment rajouter une ligne dans une base de données ?
    Par pttangediabolik dans le forum Débuter
    Réponses: 2
    Dernier message: 09/05/2008, 16h06
  2. Supression d'une ligne dans une base de données
    Par abbd dans le forum Windows Forms
    Réponses: 11
    Dernier message: 21/02/2008, 17h51
  3. ajoute d'une ligne dans une base de donnes
    Par anisj1m dans le forum JDBC
    Réponses: 5
    Dernier message: 19/03/2007, 20h35
  4. Réponses: 9
    Dernier message: 04/12/2005, 19h57
  5. [MySQL] Supprimer une ligne afficher dans une base de donnée
    Par julienchpt dans le forum PHP & Base de données
    Réponses: 31
    Dernier message: 14/10/2005, 16h45

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