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

Modélisation Discussion :

Difficulté de créer une table réflexive [AC-2010]


Sujet :

Modélisation

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 43
    Points : 22
    Points
    22
    Par défaut Difficulté de créer une table réflexive
    Bonsoir
    Je veux réaliser une base de données pour gérer un projet de consommation d'eau potable dans une Association , et je suis débutant dans Access ,voici mon problème:
    La base contient la table "Adhérant" et "Adhérant membre dans le bureau" c'est à dire qu'il a un rôle a jouer (une propriété de plus que "Adhérant", et "Adhérant salarié" le salaire est une autre propriété de plus que le premier et le second. la question comment faire pour modeler ça dans Access.
    Merci d'avance.Nom : Amane.jpg
Affichages : 739
Taille : 132,6 Ko

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Les tables réflexives même si très élégantes ne sont pas toujours faciles à vivre et à exploiter.

    Est-ce que une personne peut avoir plusieurs rôles ? Être salariés plusieurs fois ? Est-ce qu'elle peut avoir un rôle et être salariée ?

    Si non le plus simple est de n'avoir qu'une seule table des adhérents avec TOUS les champs dont tu as besoin et un champ CodeTypeAdherent où le code est quelque chose comme ADHERENT, ADHERENT_AVEC_ROLE, ADHERENT_SALARIE.

    Après au niveau des écrans de saisie (formulaires) tu vas cacher ou afficher les champs en fonction du type.

    Note qu'il faudrait pour être strict, créer une table des types d'adhérent.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Expert confirmé Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Points : 4 299
    Points
    4 299
    Par défaut
    Salut,

    J'aime bien l'idée d'une seule table.

    Après si les rôles sont simplement :
    "membres du bureau" ou pas
    "Salariés" ou pas,
    Tu as plus vite fait de faire un champ Oui/Non. Et là les risque d'erreurs sont limités. ET tu peux, si tu veux bien faire les choses) faire un test après mise à jour pour afficher le champ "Salaire", par exemple.

    Si une personne peut avoir plusieurs rôles. Là, il te faudrait 3 tables :
    Adhérents (avec la liste des personnes)
    Rôles (avec la liste des rôles)
    Fonctions (qui permet de savoir quelle personne exerce quel rôle) on y trouverai, au minimum, La clé primaire des adhérents et des rôles.
    Jérôme

    " Je pense donc je suis. Tu es donc j'apprends ". (GCM)

    Si ce message vous à aidé, merci de cliquer sur . Si ce message est résolu, cliquez sur .

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Les tables réflexives même si très élégantes ne sont pas toujours faciles à vivre et à exploiter.

    Est-ce que une personne peut avoir plusieurs rôles ? Être salariés plusieurs fois ? Est-ce qu'elle peut avoir un rôle et être salariée ?

    Si non le plus simple est de n'avoir qu'une seule table des adhérents avec TOUS les champs dont tu as besoin et un champ CodeTypeAdherent où le code est quelque chose comme ADHERENT, ADHERENT_AVEC_ROLE, ADHERENT_SALARIE.

    Après au niveau des écrans de saisie (formulaires) tu vas cacher ou afficher les champs en fonction du type.

    Note qu'il faudrait pour être strict, créer une table des types d'adhérent.

    A+
    Merci beaucoup pour votre éclaircissement du problème.
    Pour les questions:
    Est-ce que une personne peut avoir plusieurs rôles ? Oui mais par date comme une propriété portée.
    Être salariés plusieurs fois ? Probable mais pas évident.
    Est-ce qu'elle peut avoir un rôle et être salariée ? Non , puisque le statut de base dit que les membres du bureau sont tous des bénévolats.
    Pour être tout à fait clair (ça aide beaucoup à répondre), les adhérents sont des personne sans aucun rôle dans la gestion de l'association. les membres du bureau sont des adhérents plus le rôle de:
    1. Un-e- président-e- ;
    2. Un-e- ou plusieurs vice-président-e-s ;
    3. Un-e- secrétaire et, s'il y a lieu, un-e- secrétaire adjoint-e- ;
    4. Un-e- trésorier-e-, et, si besoin est, un-e- trésorier-e- adjoint-e-.

    les salariés sont des adhérent plus une autre fonction:
    1. un pompiste ;
    2. un gardien ;
    3. un technicien.

    Voila j’espère que je sois un peu clair et merci pour la réponse.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par jerome.vaussenat Voir le message
    Salut,

    J'aime bien l'idée d'une seule table.

    Après si les rôles sont simplement :
    "membres du bureau" ou pas
    "Salariés" ou pas,
    Tu as plus vite fait de faire un champ Oui/Non. Et là les risque d'erreurs sont limités. ET tu peux, si tu veux bien faire les choses) faire un test après mise à jour pour afficher le champ "Salaire", par exemple.

    Si une personne peut avoir plusieurs rôles. Là, il te faudrait 3 tables :
    Adhérents (avec la liste des personnes)
    Rôles (avec la liste des rôles)
    Fonctions (qui permet de savoir quelle personne exerce quel rôle) on y trouverai, au minimum, La clé primaire des adhérents et des rôles.
    Merci beaucoup pour votre éclaircissement du problème.
    J'ai essayé déjà dans Windev d'ajouter un champs boolean(vrai ou faux) et dans le formulaire il m'affiche les champs désirés, ça marche nickel mais j'ai pas pu aller jusqu'au bout a cause d'autre complexités.
    et dans access le code VBA me pose encore problème pour afficher des champs selon l'état du champs "oui" ou "non".
    En tout cas merci encore.
    A+

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour mes réponses sous la citation.

    Citation Envoyé par lhouknifis Voir le message
    Merci beaucoup pour votre éclaircissement du problème.
    Pour les questions:
    Est-ce que une personne peut avoir plusieurs rôles ? Oui mais par date comme une propriété portée.
    Être salariés plusieurs fois ? Probable mais pas évident.
    Est-ce qu'elle peut avoir un rôle et être salariée ? Non , puisque le statut de base dit que les membres du bureau sont tous des bénévolats.
    Pour être tout à fait clair (ça aide beaucoup à répondre), les adhérents sont des personne sans aucun rôle dans la gestion de l'association. les membres du bureau sont des adhérents plus le rôle de:
    1. Un-e- président-e- ;
    2. Un-e- ou plusieurs vice-président-e-s ;
    3. Un-e- secrétaire et, s'il y a lieu, un-e- secrétaire adjoint-e- ;
    4. Un-e- trésorier-e-, et, si besoin est, un-e- trésorier-e- adjoint-e-.

    les salariés sont des adhérent plus une autre fonction:
    1. un pompiste ;
    2. un gardien ;
    3. un technicien.

    Voila j’espère que je sois un peu clair et merci pour la réponse.
    Personnellement j'irai avec une seule table pour tous.

    tblAdherent
    CodeType
    Infos qui concerne tout le monde.
    Role 'pour les membre du bureau
    DateRole 'pour les membre du bureau
    Emplois 'Pour les salariés

    Éventuellement avec une table des rôles et une table des emplois.

    Sinon j'opterai, si tu veux garder un historique des rôles et des emplois, pour :

    tblAdherent
    ClefAdherent
    Infos qui concerne tout le monde

    tblRole
    ClefRole

    tblRoleAdherent
    ClefRoleAdherent
    ClefAdherent
    ClefRole
    DateDebutRole
    DateFinRole

    tblEmploi
    ClefEmploi

    tblEmploiAdherent
    ClefEmploiAdherent
    ClefAdherent
    ClefEmploi
    DateDebutEmploi
    DateFinEmploi

    Les DateDebut et DateFin ne sont pas obligatoires mais cela facilite la sélection des données actives pour une date. Il est très facile de faire [MaDateVoulu] between [DateDebut] and [DateFin] que de trouver les dates qui encadre cette même date dans la table interrogée.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Bonjour mes réponses sous la citation.



    Personnellement j'irai avec une seule table pour tous.

    tblAdherent
    CodeType
    Infos qui concerne tout le monde.
    Role 'pour les membre du bureau
    DateRole 'pour les membre du bureau
    Emplois 'Pour les salariés

    Éventuellement avec une table des rôles et une table des emplois.

    Sinon j'opterai, si tu veux garder un historique des rôles et des emplois, pour :

    tblAdherent
    ClefAdherent
    Infos qui concerne tout le monde

    tblRole
    ClefRole

    tblRoleAdherent
    ClefRoleAdherent
    ClefAdherent
    ClefRole
    DateDebutRole
    DateFinRole

    tblEmploi
    ClefEmploi

    tblEmploiAdherent
    ClefEmploiAdherent
    ClefAdherent
    ClefEmploi
    DateDebutEmploi
    DateFinEmploi

    Les DateDebut et DateFin ne sont pas obligatoires mais cela facilite la sélection des données actives pour une date. Il est très facile de faire [MaDateVoulu] between [DateDebut] and [DateFin] que de trouver les dates qui encadre cette même date dans la table interrogée.

    A+
    Merci encore mille fois c'est clair et bien détaillé.
    A trés bientôt.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    u as plus vite fait de faire un champ Oui/Non. Et là les risque d'erreurs sont limités. ET tu peux, si tu veux bien faire les choses) faire un test après mise à jour pour afficher le champ "Salaire", par exemple.
    Enfin j'ai choisi de créer une seule table, peux tu m'expliquer quelle code vba pour faire le test.
    J'ai fais un formulaire pour nourrir la table tblAdherent. je veux mettre du code sur les deux champs checkbox Membre et Salarié, ainsi s'il sont cochés les champs rôle et salaire seront activés sinon rester grisés.
    merci pur ta patience.

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour, je t'invite à utiliser une liste déroulante où l'utilisateur choisira le type d'adhérent (Adhérent, Membre, Salarie), ce sera plus facile à programmer est à utiliser.

    Le code est relativement simple, il ressemble à :

    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
    30
    31
    private sub GereType()
        select case CodeType
            case "ADHERENT"
               'On va cacher tous les champs qui concerne les membres et les salariés
               Me.UnChampMembre.Visible=false
               Me.UnAutreChampMembre.Visible=false
     
               Me.UnChampSalarie.Visible=false
               Me.UnAutreChampSalarie.Visible=false
     
           case "MEMBRE"
               'On va afficher les champs qui concernent les membres et cacher ceux pour les salariés
               Me.UnChampMembre.Visible=True
               Me.UnAutreChampMembre.Visible=True
     
               Me.UnChampSalarie.Visible=false
               Me.UnAutreChampSalarie.Visible=false
     
           case "SALARIE"
               'On va afficher les champs qui concernent les salariés et cacher ceux pour les membres
               Me.UnChampMembre.Visible=False
               Me.UnAutreChampMembre.Visible=False
     
               Me.UnChampSalarie.Visible=True
               Me.UnAutreChampSalarie.Visible=True
     
           case esle
               call err.raise(5, ,error$(5) & " -Type non géré.") 'Signale qu'on s'est trompé dans la programmation. Ne devrait jamais se produire en production.
     
       end select 
    end sub
    sur l'événement sur actviation (on current)

    sur l'événement après MAJ de CodeType

    Si tu tiens aux cases à cocher, sache que leur utilisation va compliquer la programmation et la conception du formulaire.
    Laisse un message dans ce sens si tu les veux absolument.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    Bonsoir,
    merci pour la réponse. Je vais essayer ce code. mais je dois d'abord chercher des tutos et lire des astuces pour savoir comment insérer le code et ou le coller.

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Il suffit de le coller "dans" le formulaire.

    1. Tu ouvres le formulaire en mode conception.
    2. Tu va en haut à droite du ruban et tu clique sur Afficher le code (ou voir le code).
    3. Dans l'éditeur de code tu copie la procédure GereType.
    4. Tu reviens dans le formulaire.
    5. Tu choisi l'événement Sur Activation du formulaire et tu choisi "Procédure événementielle" et tu clique sur le trois petits pont à droite.
      1. Tu es de nouveau dans l'éditeur de code.
      2. Entre le début et la fin de la procédue tu tapes :
      3. À répéter pour le contrôle [CodeType] et son événement MAJ..


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    Bonjour,
    Je suis désolé, j'ai pas pu arriver, j'ai passé toute la nuit à suivre tes conseils pas à pas,mais chaque fois qu j’exécute le code je reçois 2 ou 3 messages d'erreurs selon le nombre des "block" de code .
    Nom : erreur1.jpg
Affichages : 391
Taille : 202,0 Ko

    Nom : erreur3.png
Affichages : 501
Taille : 201,9 Ko

    et voici mon code
    Nom : code1.jpg
Affichages : 407
Taille : 194,4 Ko
    et...
    Nom : code.jpg
Affichages : 415
Taille : 181,9 Ko

    merci pour ta patience et A+
    Images attachées Images attachées  

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour et désolé que tu y ai passé la nuit.

    Là il n'y aucune indication d'où vient le problème.

    Il faudrait que tu ailles dans le code du formulaire et que tu ouvres le menu Débogage et que tu choisisses Compiler.

    Il se peut que cela signale une erreur.

    Sinon, il va falloir mettre un point d'arrêt au début de la procédure (en cliquant dans la marge à gauche, cela va mettre un gros point marron).
    Après tu te sers du formulaire et Access va s'arrêter là où est le point.
    En appuyant sur la touche [F8] tu vas pouvoir avancer dans le code une instruction à la fois (on appelle cela du pas-à-pas).
    Tu devrais pouvoir voir à quel moment exactement le programme génère une erreur.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2008
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Bonjour et désolé que tu y ai passé la nuit.

    Là il n'y aucune indication d'où vient le problème.

    Il faudrait que tu ailles dans le code du formulaire et que tu ouvres le menu Débogage et que tu choisisses Compiler.

    Il se peut que cela signale une erreur.

    Sinon, il va falloir mettre un point d'arrêt au début de la procédure (en cliquant dans la marge à gauche, cela va mettre un gros point marron).
    Après tu te sers du formulaire et Access va s'arrêter là où est le point.
    En appuyant sur la touche [F8] tu vas pouvoir avancer dans le code une instruction à la fois (on appelle cela du pas-à-pas).
    Tu devrais pouvoir voir à quel moment exactement le programme génère une erreur.

    A+
    Bonsoir,
    C'est vraiment étrange ce monde de l'informatique:
    Hier j'ai cherché une solution à cette problématique des erreurs affiche au dessus, j'ai trouvé mal de personnes qui ont le même incident, j'ai essayé toutes les suggestions en vain parmi celles-ci changer la langue Unicode du clavier, remplacer un composantsystem32 ,rien ne marche.
    Ce matin j'ai lu ton message, quand je clique dans outils de débogage, je choisis pas à pas ou F8, j'entendais le son "tran", le système refuse de répondre; comme le ou tu tape sur le clavier sans le curseur.
    puis je me suis dit, tiens je vais refaire le formulaire manuellement sans l'assistant, j'ai créer un formulaire vierge et j'ai posé le contrôleur "liste déroulante" etc etc...quand je suis arrivé au code, je reste coincé.
    Finalement j'ai supprimé le formulaire et je l'ai crée à nouveau,inséré le code et l'ai modifié, et miracle: ça marche nickel!!

    Désolé pour ce long commentaire, et merci encore.

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

Discussions similaires

  1. [MySQL] créer une table pour une relation réflexive
    Par PeaceMind dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/08/2012, 23h28
  2. créer une table de folder
    Par bibifinal dans le forum MFC
    Réponses: 2
    Dernier message: 25/02/2005, 14h24
  3. Créer une table en VBA ?
    Par nicburger dans le forum Access
    Réponses: 11
    Dernier message: 16/02/2005, 15h15
  4. Réponses: 17
    Dernier message: 03/12/2004, 14h33
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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