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 :

suppression de lignes dans 2 tables [WD17]


Sujet :

WinDev

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 75
    Par défaut suppression de lignes dans 2 tables
    Bonjour à tous,
    mieux vaut une image, plutôt qu'un long discours.
    j'ai deux tables remplie par programmation dans la première une date de prestation, et dans la deuxième le détail de cette même prestation
    j'aimerai que lorsque l'on clique sur le bouton supprimer, cela supprime la ligne dans la première table et les lignes de détail dans la deuxième table.
    je sèche si quelqu'un pouvait me mettre sur la voie.
    Merci.
    Images attachées Images attachées  

  2. #2
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Il faut parcourir la deuxième table en partant de la fin, tester l'id et supprimer les lignes dont l'id correspond par TableSupprime

    L'important est de partir de la fin de la table, sinon les lignes supprimées décalent les lignes suivantes.

    C'est une réponse très générique ne sachant par si la table est lié à un fichier ou pas.

    Par contre, comme j'ai tendance à le répéter trop souvent, un bout de code qui pose problème est bien plus explicite que juste une demande d'aide. Plus la question est précise, circonstanciée et argumentée, plus adaptée sera la réponse ^^

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 75
    Par défaut
    tu as raison DelphiManiac voici le bout de code:
    i est un entier = 1

    POUR TOUT LIGNE DE TABLE_Prestation_Decomposer
    SI TABLE_Prestation_Decomposer.COL_ID[i] = TABLE_Prestation.COL_ID[i] ALORS
    //1 : Supprimer
    //2 : Annuler
    SELON Dialogue("Etes vous sur de vouloir supprimer cette ligne ?")
    // Supprimer
    CAS 1
    TableSupprime(TABLE_Prestation,i)
    TableSupprime(TABLE_Prestation_Decomposer,i)
    // Annuler
    CAS 2

    FIN
    FIN
    FIN

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 34
    Par défaut
    Moi j'aurais fait comme cela
    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
    i est un entier = 1    // n° ligne dans TABLE_Prestation
    //1 : Supprimer
    //2 : Annuler
    SELON Dialogue("Etes vous sur de vouloir supprimer cette ligne ?")
    // Supprimer
    CAS 1
    POUR n=TABLE_Prestation_Decomposer..occurrence _A_ 1 PAS -1
      SI TABLE_Prestation_Decomposer.COL_ID[n] = TABLE_Prestation.COL_ID[i] ALORS
        TableSupprime(TABLE_Prestation_Decomposer,n)
      FIN
      TableSupprime(TABLE_Prestation,i)
    // Annuler
    CAS 2
     
    FIN

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 75
    Par défaut
    Merci pour ton aide.
    je viens de testé ton code, cela fonctionne lorsqu'il n'y a qu'un ligne a supprimer dans la table(2), mais lorsqu'il y en a plusieurs j'ai cette erreur:

    Erreur à la ligne 9 du traitement Clic sur BTN_Supprimer1.
    La liste est vide.
    Aucun indice n'est valide pour le champ TABLE_Prestation.
    (Indice spécifié : 1).

    ----- Informations techniques -----

    Projet : SLS

    Appel WL :
    Traitement de 'Clic sur BTN_Supprimer1' (FEN_Prestation.BTN_Supprimer1), ligne 9, thread 0

    Que s'est-il passé ?
    La liste est vide.
    Aucun indice n'est valide pour le champ TABLE_Prestation.
    (Indice spécifié : 1).

    Code erreur : 10060
    Niveau : erreur fatale (EL_FATAL)

    Dump de l'erreur du module 'wd170obj.dll' (17.0.381.12).
    Identifiant des informations détaillées (.err) : 10060
    Informations supplémentaires :
    EIT_PILEWL :
    Clic sur BTN_Supprimer1 (FEN_Prestation.BTN_Supprimer1), ligne 9
    EIT_DATEHEURE : 24/07/2012 08:53:01

    Assistance

    -Vérifiez que la liste/combo utilisée est non vide avant d'appeler la fonction en question.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 34
    Par défaut
    J'ai recopié la 1ere ligne de ton code J'ai supposé que c'était la ligne à supprimer. Bien évidemment, il est plus judicieux de mettre par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i est un entier = tableselect(TABLE_Prestation)
    SI i = -1 ALORS RETOUR

  7. #7
    Membre émérite
    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
    Par défaut
    Bonjour,
    l'erreur que tu constates vient peut être de l'endroit où tu as placé le fin du pour...

    dans le code de
    thblandeau
    il faut ajouter un fin

    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
     i est un entier = 1    // n° ligne dans TABLE_Prestation
    //1 : Supprimer
    //2 : Annuler
    SELON Dialogue("Etes vous sur de vouloir supprimer cette ligne ?")
    // Supprimer
    CAS 1
      POUR n=TABLE_Prestation_Decomposer..occurrence _A_ 1 PAS -1
        SI TABLE_Prestation_Decomposer.COL_ID[n] = TABLE_Prestation.COL_ID[i] ALORS
          TableSupprime(TABLE_Prestation_Decomposer,n)
        FIN
      FIN
      TableSupprime(TABLE_Prestation,i)
    // Annuler
    CAS 2
    FIN
    Et evidemment tu peux tester la valeur de ton select
    Bon dev
    Gancau

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 34
    Par défaut
    Au temps pour moi, c'est une erreur de recopie.

    Normalement, le test SI en ligne 8 est sur une seule ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SI TABLE_Prestation_Decomposer.COL_ID[n] = TABLE_Prestation.COL_ID[i] ALORS TableSupprime(TABLE_Prestation_Decomposer,n)
    D'où l'erreur du FIN qui devrait se retrouver en ligne 10

    Le code final est donc celui ci:
    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
    i est un entier = tableselect(TABLE_Prestation)
    SI i = -1 ALORS RETOUR
     
    //1 : Supprimer
    //2 : Annuler
    SELON Dialogue("Etes vous sur de vouloir supprimer cette ligne ?")
    // Supprimer
    CAS 1
      POUR n=TABLE_Prestation_Decomposer..occurrence _A_ 1 PAS -1
        SI TABLE_Prestation_Decomposer.COL_ID[n] = TABLE_Prestation.COL_ID[i] ALORS TableSupprime(TABLE_Prestation_Decomposer,n)
      FIN
      TableSupprime(TABLE_Prestation,i)
    // Annuler
    CAS 2
     
    FIN

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 75
    Par défaut
    merci pour votre aide mais j'ai une erreur:

    aucune syntaxe de dialogue ne correspond....

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 75
    Par défaut
    en supprimant la fonction dialogue
    i est un entier = TableSelect(TABLE_Prestation)
    SI i = -1 ALORS RETOUR

    POUR n=TABLE_Prestation_Decomposer..Occurrence _A_ 1 PAS -1
    SI TABLE_Prestation_Decomposer.COL_ID[n] = TABLE_Prestation.COL_ID[i] ALORS TableSupprime(TABLE_Prestation_Decomposer,n)
    FIN

    TableSupprime(TABLE_Prestation,i)
    cela fonctionne très bien

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 75
    Par défaut
    j'aurais aimer améliorer encore la chose, lorsque l'on sélectionne une ligne de la table 1 cela sélectionne toutes les ligne de la table 2 qui si rapporte.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 34
    Par défaut
    Essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    i est un entier = TableSelect(TABLE_Prestation)
    SI i = -1 ALORS RETOUR
     
    POUR n=1 _A_ TABLE_Prestation_Decomposer..Occurrence
    SI TABLE_Prestation_Decomposer.COL_ID[n] = TABLE_Prestation.COL_ID[i] ALORS TableSelectPlus(TABLE_Prestation_Decomposer,n)
    FIN

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 75
    Par défaut
    un petit probleme:
    ex:
    si dans la table 1 je selectionne le 23/07/2012 cela me selectionne bien les lignes qui si rapporte dans la table 2, mais ensuite lorsque je selectionne une autre date ex: 24/07/2012 cela me selectionne les lignes qui se rapporte au 24/07/2012 et celle du 23/07/2012.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 34
    Par défaut
    Il suffit de rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableSelectMoins(TABLE_Prestation_Decomposer)
    avant la boucle POUR

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 75
    Par défaut
    cela fonctionne nickel merci encore à tous surtout à toi thblandeau

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

Discussions similaires

  1. Suppression de lignes dans table via formulaire
    Par Pithonnette dans le forum IHM
    Réponses: 5
    Dernier message: 25/06/2008, 09h30
  2. [MySQL] Suppression de lignes dans une table
    Par lince102 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/01/2008, 13h34
  3. Réponses: 2
    Dernier message: 26/01/2007, 15h28
  4. Suppression de ligne dans plusieurs table
    Par chris60 dans le forum Oracle
    Réponses: 6
    Dernier message: 27/04/2006, 17h46
  5. Ajout/Suppression dynamique des lignes dans une table
    Par codexomega dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/08/2005, 18h50

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