forum Ancestrologie

Ancestrologie - Le Programme => Ancestrologie - Rapports d'anomalies => Discussion démarrée par: Pierrot le 30 Décembre 2006 à 21:16:23

Titre: Fonction recherche des individus orphelins
Posté par: Pierrot le 30 Décembre 2006 à 21:16:23
Bonsoir,



Je viens de remarquer que lorsque je demande la liste des individus orphelins, celle-ci est vide, la fonction ne marche plus.



Je viens de créer un nouvel individu sans aucun lien pour tester, j'ai enregistré, j'ai même fermé Ancestrologie, après réouverture la liste est toujours vide.



Je ne sais pas depuis quand cela ne fonctionne plus.



Cordialement
Titre: Fonction recherche des individus orphelins
Posté par: DDdeBerdeux le 30 Décembre 2006 à 22:47:05
Bonsoir,

Ce sera rectifié dans la prochaine version de la base, mais je serai curieux, si quelqu'un a encore une version sous Firebird 1.5.3, qu'il nous dise si çà marchait...

A+

André
Titre: Fonction recherche des individus orphelins
Posté par: Facon le 30 Décembre 2006 à 22:56:18
Bonsoir André,

Sur ma relique V547 b4.043 FB 1.5.3, la fonction Liste des individus orphelins fonctionne, semble-t-il, correctement. J'ai une liste d'une soixantaine d'individus n'ayant aucun lien avec aucun autre individu de la généalogie.
Titre: Fonction recherche des individus orphelins
Posté par: Pierrot le 30 Décembre 2006 à 22:59:50
Merci de votre réponse



Cordialement
Titre: Fonction recherche des individus orphelins
Posté par: Joël AUGUSTE le 31 Décembre 2006 à 09:18:31
Citation de: "Facon"
Sur ma relique V547 b4.043 FB 1.5.3, la fonction Liste des individus orphelins fonctionne, semble-t-il, correctement. J'ai une liste d'une soixantaine d'individus n'ayant aucun lien avec aucun autre individu de la généalogie.


Bonjour,



Je confirme, avec Firebird 1.5, cela fonctionnait.
Titre: Fonction recherche des individus orphelins
Posté par: DDdeBerdeux le 31 Décembre 2006 à 11:28:04
Bonjour,

Merci, pour ce dernier jour de l'année, j'ai appris quelque chose.

La requête utilisée dans la procédure PROC_ORPHELIN était celle-ci:SELECT CLE_FICHE,

       NOM,

       PRENOM,

       DATE_NAISSANCE,

       DATE_DECES,

       SEXE

FROM INDIVIDU

WHERE KLE_DOSSIER = :IDOSSIER and

    CLE_PERE IS NULL and

    CLE_MERE IS NULL And

    CLE_FICHE not in (select cle_pere from individu) and

    CLE_FICHE not in (select cle_mere from individu) and

    CLE_FICHE not in (select union_mari from T_UNION) and

    CLE_FICHE not in (select union_femme from T_UNION) and

    CLE_FICHE not in (select assoc_kle_associe from  T_ASSOCIATIONS)

ORDER BY NOM, PRENOM
où :IDOSSIER est à remplacer par le n° du dossier.

Elle fonctionne sous Firebird 1.5, mais plus sous FB2.0.

La raison, c'est que FB2.0 n'accepte pas que dans" Y in(X1,X2,...,Xi,...,Xn)", l'un des termes Xi soit null. Il faudrait donc écrireSELECT CLE_FICHE,

       NOM,

       PRENOM,

       DATE_NAISSANCE,

       DATE_DECES,

       SEXE

FROM INDIVIDU

WHERE KLE_DOSSIER = :IDOSSIER

  and CLE_PERE IS NULL

  and CLE_MERE IS NULL

  and CLE_FICHE not in (select cle_pere from individu where cle_pere is not null)

  and CLE_FICHE not in (select cle_mere from individu where cle_mere is not null)

  and CLE_FICHE not in (select union_mari from T_UNION where union_mari is not null)

  and CLE_FICHE not in (select union_femme from T_UNION where union_femme is not null)

  and CLE_FICHE not in (select assoc_kle_associe from  T_ASSOCIATIONS where assoc_kle_associe is not null)

ORDER BY NOM, PRENOM
et là çà marche.

Comme cette requête met plus de 5s à s'exécuter, je préfère mettre cette autre forme dans PROC_ORPHELINSELECT i.CLE_FICHE,

       i.NOM,

       i.PRENOM,

       i.DATE_NAISSANCE,

       i.DATE_DECES,

       i.SEXE

FROM INDIVIDU i

WHERE i.KLE_DOSSIER = :IDOSSIER

  and i.CLE_PERE IS NULL

  and i.CLE_MERE IS NULL

  and not exists (select * from individu where cle_pere=i.cle_fiche

                                            or cle_mere=i.cle_fiche)

  and not exists (select * from T_UNION where union_mari=i.cle_fiche

                                           or union_femme=i.cle_fiche)

  and not exists (select * from T_ASSOCIATIONS

                  where assoc_kle_associe=i.cle_fiche)

ORDER BY i.NOM, i.PRENOM
qui met 10 fois moins de temps pour obtenir le même résultat.

J'espère seulement qu'il n'y a pas d'autres cas comme celui-là dans le code...

A+ et bonnes fêtes.

André
Titre: Fonction recherche des individus orphelins
Posté par: Pierrot le 31 Décembre 2006 à 18:48:24
Merci André cela va magnifiquement  :D



Cordialement







Meilleurs voeux à tous