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 en cascade


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut suppression en cascade
    Hello tout le monde !

    Je rencontre un soucis que je ne comprends pas.

    Dans mes analyses, lorsque je crée des liaisons entre fichier, je fais bien attention à sélectionner les bonnes options qui vont bien, de manière à pouvoir effectuer des suppression en cascade :

    Nom : Sans titre.png
Affichages : 203
Taille : 9,2 Ko

    sur le serveur HFSQL :

    Nom : Sans titre.png
Affichages : 200
Taille : 5,5 Ko


    Si j'utilise la propriété MaLiaison..RègleSuppression, j'ai bien en réponse "hIntégritéCascade" (constante 2022)


    Mais impossible de le faire fonctionner !!

    J'ai essayé avec :

    - HLitRecherchePremier() sur la première table, suivit d'un HSupprime() (avec les option de vérification de l'intégrité)
    - via une requête de suppression (toujours sur la première table)

    Mais rien y fait !
    Seul l'enregistrement dans la table "parent" est supprimé, les données "enfant" qui héritent ne le sont pas !
    Bien-sûr les index correspondent bien.

    Quelqu'un à une idée ?

    Parce que là je sèche
    Dans mon exemple il y a 2 tables, mais en réalité il y en a beaucoup plus...
    Et pour supprimer un enregistrement, ça devient galère...

    Merci pour votre aide !!

  2. #2
    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
    As-tu testé si tout ça marche quand tu as la configuration simple : seulement 2 fichiers ?

    Si ça ne marche pas avec 2 fichiers, c'est que tu coches pas ce qu'il faut où il faut ...
    Mais si ça marche sur 2 fichiers, et pas au-delà, ça veut peut-être (????) dire que le principe des cascades, ce serait limité à 1 niveau ???

    Personnellement, je n'aime pas supprimer des lignes. Je ne jette jamais rien.
    Je préfère un flag 'Ligne-supprimée' , ou une colonne de type Date : 'Date de fin de validité'.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    je vais tester ça demain, avec un nouveau projet tout simple,
    et te dirais ce que ça donne...

  4. #4
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 805
    Points : 5 253
    Points
    5 253
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Cela provient aussi peut être d'une autre contrainte sur la table "Fille" qui interdit la suppression.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  5. #5
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    @Voroltinquo : je ne pense pas, je vérifierai quand même...

  6. #6
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    oh ben zut, ça marche !!!
    Et sur 3 tables en cascades !!

    J'ai mis exactement les mêmes paramètres ???

  7. #7
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Voici mon essai :

    Nom : Sans titre.png
Affichages : 157
Taille : 12,4 Ko

    avec les contraintes :

    Nom : Sans titre.png
Affichages : 175
Taille : 8,0 Ko

    et donc ça fonctionne très bien !

    Mais je ne comprends ce qui peut clocher dans mon autre projet...
    ça c'est problématique...

  8. #8
    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
    Ca ressemble à un bug côté HFSQL
    Peut-être que l'ordre dans lequel tu crées les contraintes a une importance.

    Si HFSQL regarde toutes les instructions de cascade, dans l'ordre de création ... ça peut expliquer ton problème.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  9. #9
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Alors je viens d'essayer autre chose :

    J'ai créé un nouveau projet,
    dans lequel j'ai ajouté une connexion HFSQL sur l'analyse en question.

    Et bien là ça fonctionne très bien ?!
    La suppression en cascade semble bien se comporter !!

    va comprendre...


    Et d'ailleurs j'ai du coup un soucis (logique vu mes paramètres) :

    Nom : Sans titre.png
Affichages : 152
Taille : 10,0 Ko

    J'interdis dans une liaison une suppression.
    ça m'embête de l'interdire.
    Je pourrais supprimer l'enregistrement parent tout en laissant l'enfant avec l'ID du parent, même ci-celui-ci n'existe plus.

    MAIS :

    Je trouve ça moche.
    Dans les options de la liaison, on peut le faire :

    Nom : Sans titre.png
Affichages : 149
Taille : 12,7 Ko

    Il y a aussi cette option :

    Nom : Sans titre.png
Affichages : 144
Taille : 5,2 Ko

    Mais que cela signifie, il prend un ID au pif parmi les existant ?

    Quelle serait la méthode "propre" ?

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    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 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Pour moi garder les lignes de la table enfant avec un id "orphelin" revient à dézinguer l'intégrité de la base… Donc c'est moche.
    Donc cette option n'est (de mon point de vue) même pas envisageable, puisqu'elle va à l'encontre de l'objectif des règles d'intégrité.

    Concernant le dernier cas, la valeur affectée à la colonne des lignes "orpheline" est (si HFSQL fait comme SqlServeur) la valeur par défaut de la colonne rubrique, comme définie dans la description de la table du fichier.

    En fait il existe à ma connaissance 4 options dans la clause ON DELETE:
    1. CASCADE
    2. RESTRICT
    3. SET NULL
    4. SET DEFAULT

    Pour ma part je n'utilise que les deux premières, mais pour la dernière on peut créer un enregistrement "poubelle", vers lequel vont pointer les lignes dont l'enregistrement parent est supprimé,

    Exemple concret: avec le RGPD, je suis susceptible de supprimer une fiche client.
    Pour éviter les null dans les idclients, je vais créer un "client anonyme", et toutes les clés étrangères IdClient de toutes les tables auront comme valeur par défaut l'Id de cette ligne, et la contrainte sera ON DELETE SET DEFAULT.

    Ainsi quand je vais supprimer une fiche client, tous les documents, tous les historiques, toutes les stats vont pointer vers ce client anonyme, sans avoir à le faire à la mano partout dans le code.
    Et je n'ai pas de null qui se baladent, ce qui va simplifier les requêtes concernées.

    Tatayo.

  11. #11
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    @tatayo, c'est très clair, merci.

    Mais il me semble pas avoir la possibilité de définir l'enregistrement "poubelle".
    Je vois nul part le "ON DELETE SET DEFAUT"...

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    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 197
    Points : 12 772
    Points
    12 772
    Par défaut
    IL s'agit de la dernière option que tu présentes dans ton mail.
    La liste que j'ai donné correspond au standard SQL, il faut voir comment PcSoft les a "renommés".

    Tatayo.

  13. #13
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Ok mais pas moyen de définir l'enregistrement "défaut" avec cette option...

  14. #14
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 805
    Points : 5 253
    Points
    5 253
    Billets dans le blog
    1
    Par défaut
    Il suffit, dans la description de ta FK d'affecter une valeur par défaut. NULL est une bonne valeur. Il faut toutefois prendre soin de cocher NULL supporté dans la description de ta table.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  15. #15
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    ahhhh ok !!

    Il prendra la valeur par défaut définit dans la description de la rubrique dans le fichier FIC !!

    Je comprends !!

    nickel !

    merci !

  16. #16
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 805
    Points : 5 253
    Points
    5 253
    Billets dans le blog
    1
    Par défaut
    Par ailleurs, en C/S, c'est le serveur qui prend en charge les contraintes d'intégrité. Il ne les "connaît" qu'une fois la table créée via HCréation ou HCréationSiinexistant.
    Cela explique peut être pourquoi tu avais tes problèmes de suppression en cascade.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  17. #17
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Il ne les "connaît" qu'une fois la table créée via HCréation ou HCréationSiinexistant.
    Normalement, toutes les tables sont crées sur le serveur HFSQL car elles sont toutes utilisées...

  18. #18
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 805
    Points : 5 253
    Points
    5 253
    Billets dans le blog
    1
    Par défaut
    Elles sont créées ou elles existent. Si ce n'est pas le serveur qui a fait le boulot (e.g. import de la structure) il ne prend pas en compte les contraintes.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

Discussions similaires

  1. Suppression en cascade
    Par music03 dans le forum Installation
    Réponses: 1
    Dernier message: 29/07/2005, 20h47
  2. suppression en cascade dans formulaire et sous-formulaire
    Par tooneygirl dans le forum Access
    Réponses: 7
    Dernier message: 20/06/2005, 14h17
  3. Requetes de suppression en cascade
    Par log2n dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 20/05/2005, 10h07
  4. Suppression en cascade
    Par log2n dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/05/2005, 20h33
  5. [debutant]suppression en cascade
    Par christophebmx dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 03/05/2005, 09h51

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