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 :

Créer une architecture généalogique.


Sujet :

Modélisation

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Créer une architecture généalogique.
    Bonjour à vous tous,

    J'ai un petit problème que je n'arrive pas à résoudre toute seule, malgré toute l'aide que j'ai trouvé sur votre super forum.

    Je lus que vous acceptez les questions des novices (sans risquer de se faire lyncher), alors si vous pouvez m'aider voici mon petit problème.

    Je suis éleveur amateur de rongeur, j'ai créé une table (rongeur) regroupant :

    - le nom de l'animal
    - sa date de naissance
    - son sexe
    - son père
    - sa mère
    - ses grand-parents
    - ses ar grand-parents
    etc ..

    d'autre part, j'ai crée un formulaire avec plusieurs onglets qui regroupe toutes ses informations.

    Cependant j'ai un problème pour regrouper la généalogie
    J'aimerais que lorsque j'indique le nom de son père ou de sa père, le reste de la généalogie n'incrémente automatiquement en dur dans la table si celui ci existe, sans être obligé de tout retapé et s'il n'existe pas je rentre manuellement la généalogie !

    J'ai bien essayé une requête qui appelle plusieurs fois la table (rongeur) .... mais ça ne fonctionne pas ! car je ne peux pas faire de modif.

    Ah j'ai oublié de vous dire, je suis blonde, alors soyez clair dans vos explications sinon je risque de vous demandez 50 fois la même question

    Merci à vous !

  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
    Salut, la référence à la blondeur laisse suposer que tu es au Québec :-), où restes-tu ? Moi c'est à Montréal.

    à part cela, la solution traditinnelle pour gérer la généalogie est la suivante :

    Table Animal
    ClefAnimal (AutoNum)
    Nom
    DateNaissance
    ClefAnimalPere (Long Integer)
    ClefAnimalMere (Long Integer)

    Ensuite tu vas dans ta fenêtre des relations tu ajoute la table Animale 3 fois !

    Puis tu établi une relation entre Animal.ClefAnimalPere et Animal1.ClefAnimal puis entre Animal.ClefAnimalMere et Animal2.ClefAnimal, cela pour s'assurer que tes petits n'ont que des pêres et des mêres qui sont déjà dans ta liste d'animaux.

    À la saisie, tu ne feras que choisir le père et la mère. Si ils n'ont pas de père ou de mère tu ne mets simplement rien.

    On va expliquer à Access comment reconstituer l'arbre des ascendants.

    Attention accroches toi parce que c'est un peu compliqué et il va falloir faire un peu de 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    public function LireAscendantMale(prmClefAnimal as variant) as string
       'Pour l'animal passer en paramêtre, donne le nom de son père, son grand père, etc...
       dim result as string
     
       'trouve la clef de l'animal père
       dim clefPere as variant
       clefPere=Dfirst("Animal","ClefAnimalPere","[ClefAnimal]=" & prmClefprmClefAnimalPere)
       CalculerAscendantMale(clefPere, result)
       LireAscendantMale=result
     
    end function
     
    private sub CalculerAscendantMale(prmClefAnimalPere as variant, byRef prmListeAcsendantMale as string)
       'Attention cette procédure modifie prmListeAscendantMale
       'Donne la liste des ascendants
     
       if isNull(prmClefAnimalPere) then
         'Il n'y a plus de pere connu
         'on peut arreter la recherche ici
         exit sub
       end if
     
       'trouve le nom du père
       dim nomPere as string
       nomPere=nz(Dfirst("Animal","Nom","[ClefAnimal]=" & prmClefprmClefAnimalPere),"") 
     
       'Ajoute le père à la liste des ascendants
       if prmListeAcsendantMale <> "" then
         'Si il y a déjà des ascendants, ajoute une séparation
         prmListeAcsendantMale= "\" & prmListeAcsendantMale 
       end if
     
       prmListeAcsendantMale=nomPere &  prmListeAcsendantMale 
     
       'Trouve le père du père
       dim clefAnimalGrandPere as variant
       clefAnimalGrandPere=Dfirst("Animal","ClefAnimalPere","[ClefAnimal]=" & prmClefprmClefAnimalPere)
     
       'Calcule les ascendants du grand père
       call CalculerAscendantMale(clefAnimalGrandPere, prmListeAcsendantMale)
     
    end sub
    Voilà, ceci est l'implantation d'un algorithme récursif (de parcourt d'arbre mathématique). C'est à dire une fonction qui s'appele elle-même jusqu'à ce qu'une condition particulière arrète la spirale infernale. Ici c'est quand le père n'est pas connu que le programme arrète ses recherches.

    Ce n'est pas la solution la plus optimisée, notament à cause du double DFirst(), mais c'est je pense assez facile à comprendre.

    Dans ton écran de saisie, il suffit de mettre un textBox avec comme valeur =LireAscendantMale([ClefAnimal]) pour que le programme affiche les ascendants.

    Pour des raisons de performance, je te suggère de faire un écran de saisie qui te permet de simplement saisir le père et la mère et un écran qui t'affiche la généalogie de tes bêtes.

    Les appels récursifs sont assez lourds et donc ralentissent pas mal l'affichage. Si c'est trop pénible tu peux aussi envisager de faire une requête de mise à jour qui calcul la généalogie et l'enregistre une fois pour toute dans la fiche de l'animal mais évidement si tu fais des modifications de père ou de mère, il faudra la relancer.

    Je te laisse le soin de faire le calcul pour les femelles, tu peux simplement dupliquer le code en changeant Pere par Mere mais ce n'est pas recommandé, un exercice interressant serait de faire en sorte de n'avoir qu'une seule procédure CalculerAscendant() et de passer le sexe en paramêtre par contre je garderai les deux fonction Lire séparé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.

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    bonsoir,
    J'ai un petit problème ...
    si vous souhaitez modéliser un arbre généalogique et que vous êtes novice je dirais que vous avez un GROS problème.

    Cependant j'ai un problème pour regrouper la généalogie
    J'aimerais que lorsque j'indique le nom de son père ou de sa père, le reste de la généalogie n'incrémente automatiquement en dur dans la table si celui ci existe, sans être obligé de tout retapé et s'il n'existe pas je rentre manuellement la généalogie !
    j'ai rien compris mais j'ai moi même quelques cheveux clairs.

    Je suis éleveur amateur de rongeur, j'ai créé une table (rongeur) regroupant :

    - le nom de l'animal
    - sa date de naissance
    - son sexe
    - son père
    - sa mère
    - ses grand-parents
    - ses ar grand-parents
    etc ..
    et puis un champ arr-arr-arr grandpère et arr-arr-...arr grandmère etc...

    Essayons de faire dans les règles de l'art et pointer les difficultés.

    Jevous propose un début de structure de table suivante:
    Rongeur(idrongeur,nom,idpère,idmère)
    où idpère et idmère sont des identifiants d'autres rongeurs. La table Rongeur en relation avec elle-même (association réflexive ou nomenclature je crois). Vous pouvez commencer à vous arracher vos cheveux blonds.

    Le meilleur arrive lorsque vous voulez remonter ou descendre une lignée. Pour trouver un "enfant" ou un parent il faut réaliser une jointure de la table Rongeur avec elle même. Point de salut sans maîtrise du langage SQL.
    Si vous voulez une représentation de l'arbre généalogique, point de salut aussi sans programmation de l'algorithme (me semble-t-il).

    bon ne vous "ronger" pas les sangs, rien n'est impossible. N'étant pas un amateur de ce genre d'exercices qui font mal à la tête il vous suffira de pousser un gros pour faire rappliquer les gentils contributeurs compétents du forum.

    bon courage

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    ah pardon marot-r, avais pas vu votre post.

    Salut, la référence à la blondeur laisse suposer que tu es au Québec
    non non même référence aussi en France

    j'ai parcouru votre code, effectivement c'est pas un "petit" problème.

    Le code a l'air "compact" et sans SQL .Dites-moi on pourrait faire quelque chose d'équivalent avec une requête SQL?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonsoir,
    bah, vous faites fort les gars. Vous tentez de créer des généalogies d'asexués.

    Non, je ne suis pas blond.

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    ah ouais bon d'accord, on pourrait peut être rajouter un table Couple(idrongeurmale,idrongeurfemelle) ou truc comme ça, en supposant que les rongeurs vivent en couple.

    on dira que c'était un oubli volontaire pour simplifier une modélisation suffisament complexe, toute façon j'y connais rien en rongeurs.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Heu..Non f-leb, je pense juste à ajouter un champ sexe dans la table.
    Parce que avant le père, la mère il faut voir...le mâle, la femelle.
    C'était juste une mauvaise blague. Vous avez, marot et toi oublié le champ sexe dans vos propositions.

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    ajouter un champ sexe dans la table
    remarque tout à fait pertinente ça m'avait bêtement échappé mais je comprend aussi l'humour ilank (je ne suis pas blond non plus) je voulais faire remarquer qu'on POURRAIT ajouter une table couple(idrongeurmale,idrongeurfemelle).

    d'autre part sous access il faut dupliquer les tables pour faire ce genre d'asso réflexive, pas très optimisé tout ça. Quelqu'un sait comment les autres sgbdr s'en sortent avec ça, on est toujours obligé de dupliquer ?

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bon, je vais lire tout ça et essayer de mettre ça en place .... c'est pas gagné !

    Je pense que vous avez 2 jours de répis avant que je revienne vous voir avec mes questions à 2 francs

    Merci pour votre aide

  10. #10
    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
    Citation Envoyé par f-leb Voir le message
    d'autre part sous access il faut dupliquer les tables pour faire ce genre d'asso réflexive, pas très optimisé tout ça.
    Je ne comprends pas ta remarque pour la duplication de table, c'est seulement sa représentation dans la fenêtre des relations qui est dupliquée, on n'a jamais qu'une seule table physique animal dans ce modèle.

    Certains SGBD permettent de représenter les relations réflexives en mettant une flèche de la table vers elle même.

    Pour le sexe tu as raison, mais cela ne change pas l'algo.

    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.

  11. #11
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    Je ne comprends pas ta remarque pour la duplication de table, c'est seulement sa représentation dans la fenêtre des relations qui est dupliquée, on n'a jamais qu'une seule table physique animal dans ce modèle.
    c'est moi qui n'avait rien compris quand on parlait de "copie" j'imaginais bêtement à une copie physique de la table.
    J'ai encore appris quelque chose aujourd'hui donc merci beaucoup.

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bon, il m'a pas fallu 2 jours ....

    Merci Marot_r

    J'ai fait exactement comme dans votre modèle pour mieux comprendre comment ça s'organise ... j'ai recrée une table pour faire les essais ... mais j'ai un problème avec le code ... ou je me suis trompée quelques part : http://fichier.chinchillapassion.com/essai1.jpg

    J'ai créée une Table animal :
    ClefAnimal : numero auto
    Nom : texte
    Sexe : F ou M
    ClefAnimalPere : texte ????
    ClesAnimalMere : texte ????

    Ensuite dans relation j'ai appelé 2 fois la table Animal et fait les relations (normales) comme indiqué.

    j'ai crée un formulaire avec un champ nom, ClefAnimal et un textebox et j'ai copier-coller votre code en cliquant sur "Visualiser le code"

    J'espère que jusqu'a la, j'ai suivis

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par f-leb Voir le message
    ah pardon marot-r, avais pas vu votre post.

    non non même référence aussi en France

    j'ai parcouru votre code, effectivement c'est pas un "petit" problème.

    Le code a l'air "compact" et sans SQL .Dites-moi on pourrait faire quelque chose d'équivalent avec une requête SQL?
    Exact pour les deux ... je suis du Sud de la France ... et effectivement j'ai sous-estimé le problème

  14. #14
    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
    J'ai mis cela :

    ClefAnimalPere (Long Integer)
    ClefAnimalMere (Long Integer)


    pour la description des champs de liaison car dans ta table, ce que tu stockes c'est le numéro d'animal, pas son nom. C'est grace à ce numéro que tu vas trouver le nom et plus généralement c'est en parcourant ces numéros que tu vas trouvre ton arbre généalogique.

    Quand à la sous estimation, l'énoncé est simple mais sa résolution dans une base relationnelle un peu moins.

    Pour le code je n'ai pas mis Call devant essaye avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call CalculerAscendantMale(clefPere, result)
    Comme je n'ai pas compiler ce code je peux m'être trompé ailleur et je vais faire un test ce soir à la maison, je viens de m'acheter l'office Pro alors il faut bien que je l'inaugure :-).

    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.

  15. #15
    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
    Le code est à mettre dans un module et pour afficher il faut mettre un textboc avec comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Source Controle = LireAscendantMale(ClefAnimal)
    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.

  16. #16
    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
    Désolé l'instal de Office m'a pris beaucoup plus de temps que prévu et ce soir je n'aurais pas le temps. Je regarde cela mercredi soir.

    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.

  17. #17
    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
    Bon alors mon code était méchament buggé, mes excuses les plus sincères.

    Voici le code corrigé et amélioré.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
     
    Option Compare Database
    Option Explicit:'S'assure que les variables sont déclarées avant d'être utilisées.
     
    'Ça c'est un peu 'overkilling' M et F sont des literraux assez évidents pour désigner les sexes mais c'est une pratique recommandée de mettre des constantes en lieux et place des literraux.
    ' De plus quand on lit SEXE_MALE il n'y a aucun doute qu'on se refère au sexe alors que "M" pourrait signifier "Modification" ou "Maternité" ou "Maman"
     
    Public Const SEXE_MALE As String = "M"
    Public Const SEXE_FEMELLE As String = "F"
     
    'Dans une requête on ne peut pas lire une constante mais on peut appeler une fonction publique.
    'Ceci permet d'accéder à la constante à partir d'une requête.
    'Attention ce procédé peut accroitre grandement le temps de calcul d'une requête.
     
    Public Function LireSexeMale() As String
        LireSexeMale = SEXE_MALE
    End Function
     
    Public Function LireSexeFemelle() As String
        LireSexeFemelle = SEXE_FEMELLE
    End Function
     
    Public Function LireAscendantMale(prmClefAnimal As Variant) As String
       'Pour l'animal passé en paramêtre, donne le nom de son père, son grand père, etc...
       Dim result As String
     
       'trouve la clef de l'animal père
       Dim clefPere As Variant
       clefPere = DFirst("ClefAnimalPere", "Animal", "[ClefAnimal]=" & prmClefAnimal)
       Call CalculerAscendant(clefPere, SEXE_MALE, result)
       LireAscendantMale = result
     
    End Function
     
    Public Function LireAscendantFemelle(prmClefAnimal As Variant) As String
       'Pour l'animal passé en paramêtre, donne le nom de sa mère, sa grand mère, etc...
       Dim result As String
     
       'trouve la clef de l'animal mère
       Dim clefMere As Variant
       clefMere = DFirst("ClefAnimalMere", "Animal", "[ClefAnimal]=" & prmClefAnimal)
       Call CalculerAscendant(clefMere, SEXE_FEMELLE, result)
       LireAscendantFemelle = result
     
    End Function
     
    Private Sub CalculerAscendant(prmClefAnimalParent As Variant, prmSexeLignee As String, ByRef prmListeAcsendant As String)
        'Attention cette procédure modifie prmListeAscendantMale
        'Donne la liste des ascendants
     
        If IsNull(prmClefAnimalParent) Then
            'Il n'y a plus de parent connu ou on ne sait pas de quel sexe il est
            'on peut arreter la recherche ici
            Exit Sub
        End If
     
        'trouve le nom du père
        Dim nomParent As String
     
        nomParent = Nz(DFirst("Nom", "Animal", "[ClefAnimal]=" & prmClefAnimalParent), "")
     
        'Ajoute le père à la liste des ascendants
        If prmListeAcsendant <> "" Then
          'Si il y a déjà des ascendants, ajoute une séparation
          prmListeAcsendant = "\" & prmListeAcsendant
        End If
     
        prmListeAcsendant = nomParent & prmListeAcsendant
     
        'Trouve le père du père
        Dim clefAnimalGrandParent As Variant
     
        Select Case prmSexeLignee
            Case SEXE_MALE
                clefAnimalGrandParent = DFirst("ClefAnimalPere", "Animal", "[ClefAnimal]=" & prmClefAnimalParent)
     
                'Calcule les ascendants du grand père
                Call CalculerAscendant(clefAnimalGrandParent, prmSexeLignee, prmListeAcsendant)
     
            Case SEXE_FEMELLE
                clefAnimalGrandParent = DFirst("ClefAnimalMere", "Animal", "[ClefAnimal]=" & prmClefAnimalParent)
     
                'Calcule les ascendants du grand père
                Call CalculerAscendant(clefAnimalGrandParent, prmSexeLignee, prmListeAcsendant)
     
            Case Else
                'Cas normalement impossible mais c'est une bonne habitude quand on utilise un Select case dont
                ' on sait par avance quelles seront toutes les réponses.
                ' Si on ajoute un code par la suite et qu'on oublie le Select case
                ' on va l'attraper à l'execution on aura pas de cas fourre tout.
                Error 5
     
        End Select
     
    End Sub
    J'ai fait une base de test mais je ne pas sur que la piece jointe est correcte car j'ai eu un gros message d'erreur à l'upload.

    Que les personnes interressées me donne leur email par message privé.

    A+
    Fichiers attachés Fichiers attachés
    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.

  18. #18
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 566
    Points : 2 525
    Points
    2 525
    Par défaut
    Bonjour à tous,

    une petite pierre à l'édifice (généalogique).

    Il existe une numérotation appelée "SOSA" qui permet de distinguer H / F et les générations.

    Pour info, je mets ici un lien qui explique très bien le principe :

    http://pagesperso-orange.fr/christop...osa_rappel.htm

    Curt
    Pas de demande par MP, sinon j'correctionne plus, j'dynamite, j'disperse, j'ventile !!!
    ---------------------------------------------------------------------
    Vous avez un talent insoupçonné... Faites-en profitez les autres. Un p'tit CLIC pour une grande cause.
    Et si vous faisiez un bon geste en 2024 ? Soyez utile, ça vous changera ! Moi, ça m’a changé !

Discussions similaires

  1. créer une architecture et un design
    Par didier camus dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 09/09/2014, 11h46
  2. Créer une architecture objet pour une appli
    Par thor76160 dans le forum NodeJS
    Réponses: 2
    Dernier message: 02/05/2013, 23h25
  3. [Réseau] Créer une connexion Internet
    Par Tranber dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 17/10/2002, 17h01
  4. Créer une fenêtre flottante qui ne peut avoir le focus
    Par BestofMac dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 10h46
  5. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20

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