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 :

TableSupprime ne supprime pas? [WD20]


Sujet :

WinDev

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 283
    Points : 263
    Points
    263
    Par défaut TableSupprime ne supprime pas?
    Bonjour,


    j'ai une table en saisie sur combo dans ma premier colonne qui me liste l'inventaire d'Acomba, lorsque que je sélectionne une ligne de ma combo, je charge les composantes (produits) associé à ce produit. Pas de problème ici.

    Lorsque je modifie la même ligne, par exemple pour changer de produits. Je veux supprimer toutes les lignes dont les composantes ont été charger pour le produit précédent.


    EDIT : Pour les visuels,

    Nom : Sans titre.png
Affichages : 999
Taille : 12,9 Ko

    J'utilise ce code

    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
     
    //SORTIE DE COL_NuméroProduit
     
    //Est-ce qu'on modifie une ligne déjà crée?
    SI COL_DateHeure <> "" ALORS
    	//On modifie une ligne et on supprime les vieux composantes si trouvé
     
    	Cardpos est une chaîne = COL_Cardpos
     
     
    	POUR TOUT LIGNE DE TABLE_Produit
     
    		x est un entier = TABLE_Produit..Valeur
     
    		SI COL_Cardpos = Cardpos ET COL_Composante = Vrai ALORS
    			TableSupprime(TABLE_Produit,x)
     
    		FIN
    	FIN
     
    FIN

    J'ai essayer aussi avec les codes de l'aides

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableSupprime(TABLE_Produit,TableSelect(TABLE_Produit, x))

    <Indice> : Entier optionnel

    Indice de la ligne à supprimer.
    Si ce paramètre n'est pas précisé, la ou les lignes sélectionnées sont supprimées. Si ce paramètre n'est pas précisé et si aucune ligne n'est sélectionnée, la fonction TableSupprime n'a aucun effet.
    Je lui met pourtant un indice. Avec les points d'arrêt,je parcours chacune des lignes trouvés avec l'indice qui incrémente. Pourtant, après un RETOUR juste après la boucle, mes lignes sont toujours là, je ne comprend vraiment pas ce qui se passe.


    J'ai également essayer avec ce code, mes les occurrences était tous pas bon ou manquant.

    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
    	// Permet de lister toutes les occurrences d'une valeur recherchée.
    	Résultat1 est un entier
    	Résultat1 = TableCherche(COL_Cardpos,Cardpos,Vrai,1)
     
    	SI COL_Composante[Résultat1] = "Vrai" ALORS
    			TableSupprime(TABLE_Produit,TableSelect(TABLE_Produit, Résultat1)) //TableSupprime(TABLE_Produit,Résultat1)
    	FIN
     
    	TANTQUE Résultat1 <> -1
     
    		SI COL_Composante[Résultat1] = "Vrai" ALORS
    			TableSupprime(TABLE_Produit,TableSelect(TABLE_Produit, Résultat1)) //TableSupprime(TABLE_Produit,Résultat1)
    		FIN
    		Trace(Résultat1)
    		Résultat1 = TableCherche(COL_Cardpos,Cardpos,Vrai,Résultat1+1)
    	FIN
    Les occurrences devant être de 2 a 15, j’obtiens les occurrences de 1 à 9 ???


    *J'ai également utilsé un TableAffiche pour voir et sans résultat, je sèche! Quelqu'un aurait une idée?


    Merci

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Salut GAB

    Il s'agit d'une table mémoire?

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 283
    Points : 263
    Points
    263
    Par défaut
    Non, il sagit bien d'une table normal. Aucune liaison, aucun remplissage.

  4. #4
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Bonjour


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x est un entier = TABLE_Produit..Valeur
    En faisant un debug pas à pas, que vaut x ?
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 283
    Points : 263
    Points
    263
    Par défaut
    Citation Envoyé par dsr57 Voir le message
    Bonjour


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x est un entier = TABLE_Produit..Valeur
    En faisant un debug pas à pas, que vaut x ?

    Test avec les mêmes produits que l'image plus haut :


    Nom : Sans titre.png
Affichages : 900
Taille : 7,7 Ko

  6. #6
    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 441
    Points
    2 441
    Par défaut
    Citation Envoyé par gabcouture Voir le message
    Non, il sagit bien d'une table normal. Aucune liaison, aucun remplissage.
    Bonsoir gabcouture,

    La table "normale", cela n'existe pas selon la nomenclature de Windev.
    Vous devriez aller (re)lire l'aide sur le champ Table.

    Bon, ce n'est pas une table hiérarchique, mais il reste encore la table mémoire, la table sur source, la table fichier à accès direct et la table fichier chargée en mémoire.

    La question de zouzoukha venait du fait que le problème que vous rencontrez pourrait éventuellement dépendre du type de table que vous utilisez.

    Donc, si vous faites l'effort de lecture suggéré, vous pourrez répondre précisément à sa question et peut-être cela aidera-t-il zouzoukha à vous aider.

    Bonne lecture et bon travail

    Hemgé

  7. #7
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 283
    Points : 263
    Points
    263
    Par défaut
    Citation Envoyé par Hemgé Voir le message
    Bonsoir gabcouture,

    La table "normale", cela n'existe pas selon la nomenclature de Windev.
    Vous devriez aller (re)lire l'aide sur le champ Table.
    J'identifiais le terme normal au champ graphique crée par défaut dans l'éditeur de fenêtre. C'est bien une table mémoire.

  8. #8
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    Bonjour

    Pas mal de petites choses qui conduisent à un parcours hératique...
    Principale erreur : ne pas utiliser un parcours descendant des indices quand on supprime des lignes !

    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
     
    // 1- pas de déclaration dans les boucles
    x est un entier
    // 2- parcours de la table
    Lig est un entier
    I est un entier
     
    //Est-ce qu'on modifie une ligne déjà crée?
    SI COL_DateHeure <> "" ALORS
    	//On modifie une ligne et on supprime les vieux composantes si trouvé
     
    	Cardpos est une chaîne = COL_Cardpos
     
    	// Parcours à la remontée (pour ne pas perdre la position quand on supprime la ligne)
    	Lig = TABLE_Produit..occurrence
     
    	Pour i = Lig _A_ 1 PAS -1
     		SI COL_Cardpos[i] = Cardpos ET COL_Composante[i] = Vrai ALORS
    			TableSupprime(TABLE_Produit,i)
     
    		FIN
    	FIN
     FIN

  9. #9
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 283
    Points : 263
    Points
    263
    Par défaut
    Salut R&B,

    je viens de tester ton code. Dans une teste pas à pas, je respecte bien les conditions de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SI COL_Cardpos[i] = Cardpos ET COL_Composante[i] = Vrai ALORS
    mais impossible d'entrer dans le ALORS, je sort directement après le TableSupprime(), j'ai mit un point d’arrêt exclusivement sur le TableSupprime() et aucun arrêt détecté (Les conditions sont biens exactes).

  10. #10
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 283
    Points : 263
    Points
    263
    Par défaut
    Bonjour,


    Bizarrement, ça fonctionne avec cette structure ;

    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
    SI COL_DateHeure <> "" ALORS
    		//On modifie une ligne et on supprime les vieux composantes si trouvé
     
    		Cardpos est une chaîne = COL_Cardpos
     
    		// Parcours à la remontée (pour ne pas perdre la position quand on supprime la ligne)
    		Lig = TABLE_Produit..Occurrence
     
    		POUR i = Lig _A_ 1 PAS -1
    			SI COL_Cardpos[i] = Cardpos ALORS
    				SI COL_Composante[i] = "1" ALORS
    				TableSupprime(TABLE_Produit,i)
    				FIN
    			FIN
    		FIN
    FIN

    Peut-être le ET qui causait problèmes? J'irais tester un autre fois. Maintenant que sa marche, je laisse tout en place.


    Merci pour vos réponses!

  11. #11
    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 441
    Points
    2 441
    Par défaut
    Citation Envoyé par gabcouture Voir le message
    Maintenant que sa marche, je laisse tout en place.
    Bonjour,

    Alors [Résolu] ou pas [Résolu] ?

    Au passage, vous avez modifié DEUX choses : le ET et la comparaison à la chaîne "1" au lieu de la constante Vrai.
    Peut-être Windev fait-il "sa conversion automatique" de "1" vers 1 ? Il serait intéressant de connaître la définition de la colonne en cause : booléen (a priori), chaîne ou entier ?

    Hemgé

  12. #12
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 283
    Points : 263
    Points
    263
    Par défaut
    Bonjour,

    Alors [Résolu] ou pas [Résolu] ?
    bien sur le post est résolu, je reste ouvert aux idées de code, car je trouve cette erreur quand même bizarre.

    Au passage, vous avez modifié DEUX choses : le ET et la comparaison à la chaîne "1" au lieu de la constante Vrai.
    Peut-être Windev fait-il "sa conversion automatique" de "1" vers 1 ? Il serait intéressant de connaître la définition de la colonne en cause : booléen (a priori), chaîne ou entier ?

    Ma table, comporte 8 colonne, COL_Numéro, COL_Description, COL_Quantité, COL_Prix,COL_Vendeur,COL_Composante(*)(colonne en cause),COL_CardPos(*),COL_DateHeure(*).

    * = Colonne Invisible

    Ma colonne "COL_Composante" est invisible de type chaine sans masque.

    Lors de l'ajout d'une ligne ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableModifieLigne(TABLE_Produit,nPos,sNumber,sNom,DefaultQty,xPrix,sVendeur,Vrai,nCardPosParent,DateHeureSys())

    il serait intéressent à tester, en effet! Proposez vos modification et je testerais.

    Bonsoir.

  13. #13
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Si ta colonne col_composant est de type chaîne, alors tu as tout intérêt à la comparer à une autre chaîne. Comparer une chaîne avec un booléen... c'est un très bon moyen de se planter.
    L'autre conseil que je donnerais, c'est d'utiliser _ET_ au lieu de ET.
    Ceci étant, je ne vois pas pourquoi l'essai précédent plantait.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  14. #14
    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 441
    Points
    2 441
    Par défaut
    Citation Envoyé par gabcouture Voir le message
    bien sur le post est résolu,
    C'était juste une manière de vous rappeler de clôturer la discussion.


    Citation Envoyé par gabcouture Voir le message
    Ma table, comporte 8 colonne, COL_Numéro, COL_Description, COL_Quantité, COL_Prix,COL_Vendeur,COL_Composante(*)(colonne en cause),COL_CardPos(*),COL_DateHeure(*).

    * = Colonne Invisible

    Ma colonne "COL_Composante" est invisible de type chaine sans masque.
    Ici, j'ai quand même quelques problèmes :
    votre colonne "Composante" réputée invisible ci-dessus - était affichée dans le visuel du premier message. A-t-elle été rendue visible pour les besoins de la cause, ou bien certaines modifications ont-elles été apportées depuis lors ?
    votre colonne "Composante" affichait "Vrai" ou "Faux" dans le visuel, ce qui n'est pas conforme a ce que vous décrivez faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableModifieLigne(TABLE_Produit,nPos,sNumber,sNom,DefaultQty,xPrix,sVendeur,Vrai,nCardPosParent,DateHeureSys())
    Si vous affectez la constante Vrai à une colonne définie comme chaîne sans masque, la constante Vrai injecte sa valeur "numérique", soit 1 dans la colonne et la conversion de type de Windev affiche une chaîne "1", mais ni "Vrai", ni "Faux". Il y a donc une discordance entre ce que vous nous avez renseigné initialement et ce que vous écrivez maintenant.

    C'est sur cela que je voulais attirer votre attention lorsque vous écriviez que, puisqu'en l'évitant vous n'aviez plus de souci, c'était peut-être le ET qui posait problème.
    Peut-être le ET qui causait problèmes?
    Non seulement vous avez supprimé le ET, mais vous êtes passé de Vrai à "1".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SI COL_Cardpos = Cardpos ET COL_Composante = Vrai ALORS
    //est devenu 
    SI COL_Cardpos[i] = Cardpos ALORS
    	SI COL_Composante[i] = "1" ALORS
    Donc, cette seconde modification doit également être envisagée comme une cause possible du changement de comportement du code.

  15. #15
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 283
    Points : 263
    Points
    263
    Par défaut
    Bonjour Hemgé,


    Ici, j'ai quand même quelques problèmes :
    votre colonne "Composante" réputée invisible ci-dessus - était affichée dans le visuel du premier message. A-t-elle été rendue visible pour les besoins de la cause, ou bien certaines modifications ont-elles été apportées depuis lors ?
    En effet la colonne à été rendu visible pour le post.

    votre colonne "Composante" affichait "Vrai" ou "Faux" dans le visuel, ce qui n'est pas conforme a ce que vous décrivez faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableModifieLigne(TABLE_Produit,nPos,sNumber,sNom,DefaultQty,xPrix,sVendeur,Vrai,nCardPosParent,DateHeureSys())
    Si vous affectez la constante Vrai à une colonne définie comme chaîne sans masque, la constante Vrai injecte sa valeur "numérique", soit 1 dans la colonne et la conversion de type de Windev affiche une chaîne "1", mais ni "Vrai", ni "Faux". Il y a donc une discordance entre ce que vous nous avez renseigné initialement et ce que vous écrivez maintenant.

    Après réflexion, ma ligne aurait dû ressembler à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TableModifieLigne(TABLE_Produit,nPos,sNumber,sNom,DefaultQty,xPrix,sVendeur,"Vrai",nCardPosParent,DateHeureSys())
    Je viens de tester avec le type booléen et la conversion automatique passe, en effet, en 1 et 0. Il est donc évident que c’était inscrit en chaine à la base. C'est mon erreur!


    Lors de mes observation dans le débogueur, j'obtenais mon COL_Composante = Vrai et ma condition = Vrai. Je ne voyais pas la distinction chaine/bool et c'est pourquoi les conditions n'étais pas respectés.

    Je remplace le tout par des bools et je n'y touche plus!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SI COL_Cardpos[i] = Cardpos ET COL_Composante[i] = Vrai ALORS
     
    TableModifieLigne(TABLE_Produit,nPos,sNumber,sNom,DefaultQty,xPrix,sVendeur,Vrai,nCardPosParent,DateHeureSys())
    Merci à tous pour votre temps et vos réponse!

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

Discussions similaires

  1. [PHP-JS] bouton reset ne supprimant pas des champs avec value
    Par SegmentationFault dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2006, 14h52
  2. [Cookies] Cookie qui ne se supprime pas
    Par navis84 dans le forum Langage
    Réponses: 3
    Dernier message: 06/07/2006, 15h01
  3. ibdatset.delete ne supprime pas l'enregistrement
    Par blackbird_dream dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/06/2006, 22h49
  4. RMAN / DELETE OBSOLETE ne supprime pas les fichiers
    Par segphault dans le forum Recovery Manager
    Réponses: 3
    Dernier message: 12/04/2006, 09h48
  5. Un bouton supprimer qui ne supprime pas... help!
    Par SpyesX dans le forum Access
    Réponses: 16
    Dernier message: 20/10/2005, 01h42

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