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 :

Supprimer des lignes d'une table sous condition [WD17]


Sujet :

WinDev

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 123
    Points : 44
    Points
    44
    Par défaut Supprimer des lignes d'une table sous condition
    Bonjour,

    Debutante sous windev, je cherche à supprimer des lignes d'une table sous condition.
    Je m'explique j'ai une table qui se remplie par requete (2ere colonne) ensuite j'utilise le resultat d'une colonne pour en creer une 3 eme ( au moment de la creation il est necessaire d'avoir toutes mes lignes pour créer cette 3eme colonne) puis je voudrais supprimer des lignes de cette table mais à la condition que la somme de la 2eme colonne soit egale à zero. Et là j'y arrive mais il m'en supprime une sur deux

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Z=TableOccurrence(TABLE_HistoDet)
    POUR I= 1 A Z
    SI I>Z ALORS RETOUR	
    SI 	TABLE_HistoDet[I][2]..Valeur = 0 ALORS
    	TableSupprime(TABLE_HistoDet,I)
    	Z=TableOccurrence(TABLE_HistoDet) // Astuce que j'ai trouvé pour pas planter car le nombre de lignes de ma table diminue
    	FIN
     
    FIN

    J'espere avoir été claire et je vous remarcie d'avance

  2. #2
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    C'est le principe de "si je double le premier à quelle place je suis?"

    Je m'explique.
    Tu es sur la ligne 2, tu la supprime puis tu passe à la ligne 3.
    Résultat la ligne 3 avant la suppression est devenue la ligne 2 donc quand tu passe à la ligne d'après c'est comme si tu passais à la ligne 4 avant suppression.

    Bonne réflexion et bonne lecture.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Points : 841
    Points
    841
    Par défaut
    Bonjour
    Tu pourrais essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     pour toute ligne de TABLE_HistoDet
      si TABLE_HistoDet.col_2=0 alors tablesupprime(TABLE_HistoDet,TABLE_HistoDet[TABLE_HistoDet])
    fin
    Gancau

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour,

    Je ne vais pas paraphraser sylvain : je me suis déjà fait avoir sur ce coup-là (le coup du tableau, pas le coup du sylvain). Je te laisse méditer son délicat propos.

    Mon intervention est simple ton code : SI I>Z ALORS RETOUR est inutile. La condition ne sera jamais remplie car le pour i... l'interdit.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 123
    Points : 44
    Points
    44
    Par défaut
    Merci pour vos reponses

    gancau merci mais le code ne foctionne pas et je n'ai pas assez de niveau pour solutionner toute seule le probleme.

    Et sinon après reflexion guidée par vos commentaire j'ai ce code qui marche nickel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Z=TableOccurrence(TABLE_HistoDet)
     
    POUR I= 1 A Z
     
    SI TABLE_HistoDet[I][2]..Valeur = 0 ALORS
    TableSupprime(TABLE_HistoDet,I)
    Z=TableOccurrence(TABLE_HistoDet) 
    I = I-1
     
    FIN
     
    FIN
    MERCI

  6. #6
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Bonjour,

    Que ton code fonctionne est une chose, qu'il soit lisible en est une autre.

    Il faut que tu penses aux autres personnes qui liront ton code. Tu vas me dire, "oui mais c'est seulement pour moi", mais il faut prendre l'habitude de rendre un code lisible car un jour tu ne seras pas seule sur un projet.

    Le code de gancau est une bonne piste, il ne fonctionne peut être pas directement mais essaye de le rendre fonctionnelle ( en utilisant la doc de pcsoft), ca peut t'être utile plus tard.

    Nhaps
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  7. #7
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    ce n'est pas très propre de tripoter la borne finale dans la boucle. Dans ton cas, il semble que cela fonctionne, pas sûr que ça soit le cas dans un autre langage.

    Pire : on ne modifie jamais l'indice de la boucle !!!

    Et si tu commences par la fin ?
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 276
    Points : 739
    Points
    739
    Par défaut
    Bonjour,

    Pour les parcours avec suppression, j'utilise toujours la syntaxe avec "DEPUIS FIN" (ou PAS -1 pour une boucle POUR).
    Ça évite de toucher à l'indice de parcours en cours de boucle et à la borne (comme le dit Frenchsting, pas bon de tripoter ces éléments )

    Code 1 avec le POUR original et PAS -1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Z=TableOccurrence(TABLE_HistoDet)
     
    POUR I= Z A 1 PAS -1
     
    SI TABLE_HistoDet[I][2]..Valeur = 0 ALORS
    TableSupprime(TABLE_HistoDet,I)
    FIN
     
    FIN
    Code 2 avec un POUR TOUTE LIGNE et DEPUISFIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    POUR TOUTE LIGNE i de TABLE_HistoDet DEPUISFIN
     
    SI TABLE_HistoDet[i][2]..Valeur = 0 ALORS
    TableSupprime(TABLE_HistoDet,i)
    FIN
     
    FIN
    Cordialement

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

Discussions similaires

  1. supprimer des lignes d'une table
    Par Papy214 dans le forum jQuery
    Réponses: 3
    Dernier message: 31/08/2010, 14h48
  2. Supprimer des lignes dans une table
    Par ToniConti dans le forum Pentaho
    Réponses: 5
    Dernier message: 03/08/2010, 23h09
  3. Réponses: 8
    Dernier message: 24/01/2010, 21h11
  4. Réponses: 1
    Dernier message: 15/09/2008, 10h43
  5. [VBA] Supprimer des lignes dans une table
    Par shadockgreg dans le forum Access
    Réponses: 6
    Dernier message: 22/11/2006, 09h58

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