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

WinDev Discussion :

modifier toutes les rubriques après la suppression d'une rubrique juste avant [WD17]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 28
    Points : 24
    Points
    24
    Par défaut modifier toutes les rubriques après la suppression d'une rubrique juste avant
    Bonjours,
    J’ai un enregistrement Opération contient le rubrique numéro de l’opération j’ai affiché cet enregistrement dans une table et Je veux quand je supprime une opération depuis la table toutes les opérations après l’opération supprimé décale (je veux modifier uniquement les numéros des opérations)
    Exemple : par exemple j’ai dans la table d’Opération les opérations de numéro (le numéro est un clé unique) suivant : 1 , 2, 3, 4, 5, 6….
    Je veux quand je supprime l’opération numéro 2 toutes les opérations qui suit cette opération décale comme ça :
    1 , 2, 3, 4, 5, 6 (je supprime l’opération 2)->1,2, 3, 4, 5 (c-à-d après a partir de l’opération 2 je soustrait1 c-à-d : (3-1), (4-1), (5-1), (6-1) )
    1 , 2, 3, 4, 5, 6 (je supprime l’opération 1) -> 1,2, 3, 4, 5
    1 , 2, 3, 4, 5, 6 (je supprime l’opération 6) -> 1,2, 3, 4, 5
    Ma question est comment je peux faire ça dans windev j’ai essayé avec le code suivant ms ça ne marche plus quelqu’un peut me donner une idée svpppppp
    Le code que j’ai implémenté :
    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
     
    SI TableSelect(TABLE_Opérations) = -1 ALORS RETOUR
     
    //1 : &Supprimer
    //2 : &Ne pas supprimer
    SELON Dialogue("")
    	// &Supprimer
    	CAS 1
    		//je récupère le numéro de l'enregistrement en cours dans une table fichier.
    		RecNumEnr est un entier
    		RecNumEnr = TableNumEnr(TABLE_Opérations)
     
    		// requète pour récupérer le numéro de l'opération sélectionner dans la table
    		sText_NumOpREQ1 est une chaîne = ChaîneConstruit(" SELECT Opérations.Numéro FROM Opérations WHERE Opérations.IDOpérations= ( %1)", RecNumEnr)
    		sdNumOpREQ1 est une Source de Données
    		HEx_NumOpREQ1, sRecNumOp est une chaîne
    		HEx_NumOpREQ1=HExécuteRequêteSQL(sdNumOpREQ1, sText_NumOpREQ1)
    		sRecNumOp=Opérations.Numéro
    		//le numéro de l'opération sélectionner dans la table
    		nIntiger est un entier
    		nIntiger=sRecNumOp
     
    		// je Supprime l'enregistrement Opérations à partir de la table
    		TableSupprime(TABLE_Opérations)
     
    		// je soustrait 1 pour toutes les numéro des opérations qui suit l'opération supprimé
     
    		i est un entier
    		POUR i = RecNumEnr+1 _A_ HNbEnr(Opérations) -1
     
    			HLit(Opérations, i)
    			nIntiger=nIntiger -1
    			Opérations.Numéro=nIntiger
    			HModifie(Opérations)
    			TableAffiche(TABLE_Opérations, taCourantPremier)
    		FIN
    		//Info(ResNumEnr, "  " ,sRecNumOp)
     
    		// Positionnement sur l'enregistrement courant
     
     
    	// &Ne pas supprimer
    	CAS 2
     
     
    FIN

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 242
    Points : 12 874
    Points
    12 874
    Par défaut
    Bonjour,
    Si tu connais le numéro de l'opération supprimée, tu peux le faire avec une simple requête:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    update operation set num = num - 1 where num > X
    Où X représente le numéro de l'opération supprimée.

    Tatayo.

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    juste un petit bémol, pour faire cela il faut être sûr que ce numéro d'opération n'est pas utilisé ailleurs sinon tu auras des problèmes de références !
    Je ne suis jamais partant pour modifier la clef unique d'un enregistrement en base de données ...

    à bientôt,

    Nicolas

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2012
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 162
    Points : 308
    Points
    308
    Par défaut
    Bonjour,

    Moi je partirai sur une structure de l'opération définie comme suit: OPERATION (IDOperation, NumOperation, ...).
    La rubrique IDOperation sera une clé unique interne qui restera inchangé pour le cas où il y aura des tables liées au fichier OPERATION.
    Ensuite, la rubrique NumOperation sur laquelle on pourra appliquer le traitement notamment le code de tatayo.

    Citation Envoyé par tatayo Voir le message
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE Operation SET NumOperation= NumOperation - 1 WHERE NumOperation > X
    Où X représente le numéro de l'opération supprimée.
    Cordialement

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 451
    Points
    2 451
    Par défaut
    Bonjour,

    Quelle est l'utilité du numéro d'opération, sachant que ce numéro peut être attribué dynamiquement tant à l'affichage qu'à l'impression ?

    Dans le cas de la table,
    Comme java_j2ee conserve l'ordre initial, l'affichage selon IDopération (qui a été proposé à juste titre) respectera la séquence initiale, même après suppression.

    S'agissant d'une table fichier, la suppression de la ligne dans la table va être répercutée sur le fichier.
    Il suffit de demander le réaffichage de la table, à partir de la ligne de son choix (première ligne actuellement affichée ou la deuxième si on supprime la première, ou ...), en n'oubliant pas dans un TableAffiche sur une table fichier la constante tainit est implicitement utilisée.

    Tout dépend évidemment du but effectivement poursuivi.
    Mais s'il s'agit uniquement de numéroter un affichage, il vaut mieux y procéder dynamiquement.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2012
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 162
    Points : 308
    Points
    308
    Par défaut
    Citation Envoyé par Hemgé Voir le message
    Quelle est l'utilité du numéro d'opération, sachant que ce numéro peut être attribué dynamiquement tant à l'affichage qu'à l'impression ?
    Bonjour,

    je pars du principe que nous sommes en plein propositions de solutions. Et je précise que dans un contexte étendue i.e. si la table OPERATION est liée à d'autres tables de quelques manière que ce soit, il serait prudent d'avoir un numéro interne (IDOperation) inchangé et un autre (NumOperation) qui respecte les règles évoquées plus haut sur lequel on pourrait effectuer différents traitements.

    En espérant avoir été bien compris.

    Cordialement

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 451
    Points
    2 451
    Par défaut
    Citation Envoyé par PointCarreJo Voir le message

    En espérant avoir été bien compris.
    Ne vous faites aucun souci : il ne s'agissait pas d'une réaction à / critique de votre proposition, mais d'une réflexion générale.

    java_j2ee nous a fait part de son souci immédiat en matière de code, mais pas de la fonctionnalité recherchée, et il ne faut pas nécessairement prévoir plus.
    C'est à lui d'éventuellement clarifier la situation et c'était en quelque sorte une invite implicite à préciser ses besoins.

    Bonne fin de journée.

    Hemgé

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    slt prd pour le retard j'ai un prb de connexion je veux essayé les répences pardon encors

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    slt Hemgé PointCarreJo et tatayo
    comme il à dit PointCarreJo j'ai dans la table Opérations la rubrique IDOpération que j'au l'utilisé comme clé interne ne change pas et j'ai utilisé le Numéro de l'opération pour l'affichage de numéro de l'opération.
    j'ai modifier mon code par la requéte de Tatayo ms elle ne fonctionne pas
    voila:
    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
     
    // Une ligne est-elle sélectionnée ?
    SI TableSelect(TABLE_Opérations) = -1 ALORS RETOUR
     
    //1 : &Supprimer
    //2 : &Ne pas supprimer
    SELON Dialogue("")
    	// &Supprimer
    	CAS 1
    		//je récupère le numéro de l'enregistrement en cours dans une table fichier.
    		RecNumEnr est un entier
    		RecNumEnr = TableNumEnr(TABLE_Opérations)
     
    		// je Supprime l'enregistrement Opérations à partir de la table
    		TableSupprime(TABLE_Opérations) 
     
    		// requète pour récupérer le numéro de l'opération sélectionner dans la table
    		sText_NumOpREQ1 est une chaîne = ChaîneConstruit(" UPDATE Opérations SET  Opérations.Numéro= Opérations.Numéro - 1 WHERE Opérations.Numéro> (%1)",RecNumEnr)
    		sdNumOpREQ1 est une Source de Données
    		HEx_NumOpREQ1 est une chaîne
    		HEx_NumOpREQ1=HExécuteRequêteSQL(sdNumOpREQ1, sText_NumOpREQ1)
     
    		TableAffiche(TABLE_Opérations, taCourantPremier)
     
     
    	// &Ne pas supprimer
    	CAS 2
     
     
    FIN

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 242
    Points : 12 874
    Points
    12 874
    Par défaut
    Citation Envoyé par java_j2ee Voir le message
    j'ai modifier mon code par la requéte de Tatayo mais elle ne fonctionne pas.
    C'est à dire ? Elle ne fait rien ? Elle renvoie une erreur ?
    D'ailleurs hExecuteRequeteSql renvoie un booléen, et non une chaine.
    Il faudrait tester ce retour, et le cas échéant afficher le message d'erreur.

    Tatayo.

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2012
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 162
    Points : 308
    Points
    308
    Par défaut
    Bonjour,
    Je constate que vous prenez comme numéro "TableNumEnr(TABLE_Opérations)" qui est le numéro d'enregistrement en cours dans un fichier. Et cela ne correspond pas à la rubrique NumOperation. Ensuite dans la clause WHERE la parenthèse se trouve au mauvais endroit.

    Il faudrait plutôt écrire le code suivant:
    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
    // Une ligne est-elle sélectionnée ?
    SI (TableSelect(TABLE_Opérations) = -1) ALORS RETOUR
    
    //1 : &Supprimer
    //2 : &Ne pas supprimer
    SELON Dialogue("")
       // &Supprimer
       CAS 1
         //je récupère le numéro de l'enregistrement en cours dans une table fichier.
         RecNumEnr est un entier = TABLE_Opérations.NumOperation
    
         // je Supprime l'enregistrement Opérations à partir de la table
         TableSupprime(TABLE_Opérations)
    
         // requête pour récupérer le numéro de l'opération sélectionner dans la table
         sText_NumOpREQ1 est une chaîne = ChaîneConstruit(" UPDATE Opérations SET Opérations.Numéro= Opérations.Numéro - 1 WHERE (Opérations.Numéro> %1)",RecNumEnr)
         sdNumOpREQ1 est une Source de Données
         HEx_NumOpREQ1 est un booléen
         HEx_NumOpREQ1 = HExécuteRequêteSQL(sdNumOpREQ1, sText_NumOpREQ1)
    
         TableAffiche(TABLE_Opérations, taCourantPremier)
    
       // &Ne pas supprimer
       CAS 2
    
    FIN
    Cordialement

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    slt tous les participants a ma question
    j'ai utilisé vtr requete tatayo et j'ai reussi enfin par des petites modification.
    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
    // Une ligne est-elle sélectionnée ?
    SI TableSelect(TABLE_Opérations) = -1 ALORS RETOUR
     
    //1 : &Supprimer
    //2 : &Ne pas supprimer
    SELON Dialogue("")
    	// &Supprimer
    	CAS 1
    		//je récupère le numéro de l'enregistrement en cours dans une table fichier.
    		RecNumEnr est un entier
    		RecNumEnr = TableNumEnr(TABLE_Opérations)
     
    		// requète pour récupérer le numéro de l'opération sélectionner dans la table
    		sText_NumOpREQ1 est une chaîne = ChaîneConstruit(" SELECT Opérations.Numéro FROM Opérations WHERE Opérations.IDOpérations= ( %1)", RecNumEnr)
    		sdNumOpREQ1, sdNumOpREQ2 est une Source de Données
    		HEx_NumOpREQ1, sRecNumOp, sHEx_NumOpREQ2 est une chaîne
    		HEx_NumOpREQ1=HExécuteRequêteSQL(sdNumOpREQ1, sText_NumOpREQ1)
    		sRecNumOp=Opérations.Numéro
    		//le numéro de l'opération sélectionner dans la table
    		nIntiger est un entier
    		nIntiger=sRecNumOp
    		//info (nIntiger)
     
    		// je Supprime l'enregistrement Opérations à partir de la table
    		TableSupprime(TABLE_Opérations) 
     
    		// modifiation des numéros > de numéro supprimé
    		sText_NumOpREQ2 est une chaîne = ChaîneConstruit(" UPDATE Opérations SET  Numéro=Numéro -1  WHERE Numéro > (%1)",nIntiger)
    		sHEx_NumOpREQ2=HExécuteRequêteSQL(sdNumOpREQ2, sText_NumOpREQ2)
    		TableAffiche(TABLE_Opérations,  taDébut)
     
     
    	// &Ne pas supprimer
    	CAS 2
     
     
    FIN
    merciii bcp pour vos aides mrcccc rncors

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/09/2009, 18h32
  2. Modifier toutes les URL d'une page apres chargement.
    Par landsteph dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/08/2007, 21h11
  3. Modifier toutes les insertions d'un coup
    Par MaitrePylos dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 15/05/2006, 15h24
  4. [IB6] : Faire la mise à jour de tout les pc après un update
    Par tipiweb dans le forum Bases de données
    Réponses: 4
    Dernier message: 23/03/2006, 18h42
  5. Modifier tout les fichier comportant une chaine
    Par narmataru dans le forum Linux
    Réponses: 10
    Dernier message: 28/09/2004, 16h58

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