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 :

HerreurIntégrité (Champ table)


Sujet :

WinDev

  1. #1
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut HerreurIntégrité (Champ table)
    Bonjour,

    J'ai regardé les différents mode de gestion des erreurs d'intégrité dans "WD Détections erreurs". Ils sont intéressants, mais aucun ne se fait au travers d'un champ table en mode suppression... On Peut voir sur "WD Détections erreurs, dans la première fenêtre", qu'ils ont tenté de le faire sans aller jusqu'au bout. DOMMAGE

    Quelqu'un aurait il vu un code complet dans les exemples et forums pour traiter ce problème de gestion d'intégrité ?

    En fait, je souhaite supprimer une ligne appelée "Orchestre" d'un champ table sur laquelle une intégrité est placée normalement. Je ne dois donc pas pouvoir supprimer cet "Orchestre" tant qu'il y a des "Instruments".

    Dans le principe, je voudrais pouvoir gérer cette erreur d'intégrité en affichant un message simple "Avant de supprimer cet ORCHESTRE..." et revenir après ce message, sur la ligne présélectionnée.

    Là, Je retourne au début du champ table et perd le bénéfice de la précédante sélection.

    Voici le code :
    Sur Initalisation de SUPPRIMER :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HSurErreur("*", hErrIntégrité, "")
    Sur Clic SUPPRIMER :
    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
    // Une ligne est-elle sélectionnée ?
    SI TableSelect(TABLE_ORCHESTRE) = -1 ALORS RETOUR
     
    //1 : &Supprimer
    //2 : &Ne pas supprimer
    SELON Dialogue("Êtes-vous sûr de vouloir supprimer cet ORCHESTRE ?")
     
    	CAS 1 // &Supprimer
     
    		// Suppression de l'enregistrement ORCHESTRE à partir de la table
    		TableSupprime(TABLE_ORCHESTRE)
     
    		// Contrôle d'intégrité ORCHESTRE/INSTRUMENTS
    		SI HErreurIntégrité() ALORS
    			Avertissement("Avant de supprimer cet ORCHESTRE,","","supprimez tous les INSTRUMENTS affectés à celui-ci ! ")	
    			RETOUR		
    		FIN
     
    		// Si suppression effective alors repositionnement sur un enregistrement initial
    		TableAffiche(TABLE_ORCHESTRE, taCourantPremier)
     
    	CAS 2 // &Ne pas supprimer
     
    FIN
    La patience est d'or, l'aide est inestimable ...

  2. #2
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 995
    Points
    1 995
    Par défaut
    Hello,
    Vous avez plusieurs solutions, soit au niveau de l'analyse dans la liaison, soit dans le code
    Au niveau de l'analyse et de la relation d'approbation, dire que si Orchestre est supprimer alors on supprime aussi tous les instruments qui sont dans orchestre (plus d'erreur d'intégrité).
    Au niveau du code, faire une boucle tant que htrouve

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    hrecherche(instruments, idorchestre, orchestre.idorchestre) 
    si htrouve(instruments) alors
         hlitrecherche(instruments, idorchestre, orchestre.idorchestre) 
         tantque htrouve(instruments)
             // on supprime l'enreg instrument de orchestre
             hsupprime(instruments)
             // lecture enreg suivant
             hlitsuivant(instruments)
         // fin du tantque htrouve
         fin
    // fin du si htrouve
    fin
    Voilà comment je vois la chose, a vous lire sur le reste
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Salut,

    Il faut que tu enregistres la position dans la table avec HSauvePosition, puis le retour à la ligne avec HRetourPosition.

    Entre les deux tu peux faire ton traitement.

    Tu peux aussi utiliser la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableSauvePositionEtSélection()
    A+

  4. #4
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    Bonjour et merci à tous pour votre participation.

    basam95 :

    La fonction suivante s'intègre bien dans le code et ne génère pas d'anomalie. Le retour à la position est efficace.
    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
    // Une ligne est-elle sélectionnée ?
    SI TableSelect(TABLE_ORCHESTRE) = -1 ALORS RETOUR
     
    // Si anomalie, assure le retour à la position de ligne initiale
    SauveTable est une chaîne
    SauveTable = TableSauvePositionEtSélection(TABLE_ORCHESTRE)
     
    //1 : &Supprimer
    //2 : &Ne pas supprimer
    SELON Dialogue("Êtes-vous sûr de vouloir supprimer cet INSTRUMENT ?")
     
    	CAS 1 // &Supprimer
     
    		// Suppression de l'enregistrement ORCHESTRE à partir de la table
    		TableSupprime(TABLE_ORCHESTRE)
     
    		// Contrôle d'intégrité ORCHESTRE/INSTRUMENTS
    		SI HErreurIntégrité() ALORS
    			Avertissement("Avant de supprimer cet ORCHESTRE,","","supprimez tous les INSTRUMENTS affectés à celui-ci ! ")	
    			TableRestaurePositionEtSélection(TABLE_ORCHESTRE, SauveTable)
    			RETOUR		
    		FIN
     
    		// Si suppression effective alors repositionnement sur un enregistrement initial
    		TableAffiche(TABLE_ORCHESTRE, taCourantPremier)
     
    	CAS 2 // &Ne pas supprimer
     
    FIN
    EDM-TAHITI

    L'option de suppression des instruments de la table orchestre est effectivement une possibilité que je n'ai pas retenue pour l'instant car elle me parait trop destructrice en terme de finalité (si erreur de manip de l'utilisateur !)

    à tous ceux qui me liront :
    Le code indiqué dans mon 1er message semble fonctionnel (HSurErreur("*", hErrIntégrité, "")) à l'exception prête que je ne peux reproduire son fonctionnement sur une autre table. Je ne comprends pas pourquoi !

    QUESTION: Faut il inhiber ou réinitialiser ces fonctions HSurErreur... HErreurIntégrité sachant que le fonctionnement est le même que dans l'exemple présenté ?

    En tout cas merci encore.
    La patience est d'or, l'aide est inestimable ...

Discussions similaires

  1. Problème avec le champ table
    Par soad dans le forum WinDev
    Réponses: 4
    Dernier message: 03/08/2006, 14h59
  2. Contrôler la valeur d'un champ (Table)
    Par Cyphen dans le forum Access
    Réponses: 4
    Dernier message: 27/06/2006, 12h07
  3. Accéder type champ table dans requête
    Par dyree dans le forum Access
    Réponses: 7
    Dernier message: 10/04/2006, 17h04
  4. [VB6] Ajouter numero à champ table qui est en numautomatique
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 31/01/2006, 11h14
  5. Enregister doc dans champ table mysql
    Par kakashi embedded dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 16/01/2006, 19h32

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