Auteur Sujet: Ajouter globalement le même media à plusieurs individus  (Lu 3776 fois)

plus minus reset

0 Membres et 1 Invité sur ce sujet

Hors ligne Anniea

  • Grand Amateur
  • ***
  • Messages: 38
    • Généalogie familiale
Ajouter globalement le même media à plusieurs individus
« le: 14 Décembre 2007 à 22:46:24 »
Bonjour,
Je souhaiterais ajouter une même photo à tous mes sosas pour les repérer plus facilement.
Est-ce possible de le faire avec une commande SQL, sachant que certains d'entre-eux ont déjà leur propre photo que je voudrais conserver ?
Merci pour votre aide.
Cordialement,
Annie
Annie

site de généalogie http://annie.antoine.free.fr
Vacances à la montagne : http://location2000.free.fr
Vacances à la mer : http://barcareslocation.free.fr
 

Hors ligne DDdeBerdeux

Ajouter globalement le même media à plusieurs individus
« Réponse #1 le: 14 Décembre 2007 à 23:51:33 »
Faisable en SQL, et "audacieux".
Il faut pour chaque individu (à sélectionner dans la table INDIVIDU par NUM_SOSA>0  et le n° du dossier par exemple), insérer un enregistrement dans la table MEDIA_POINTEURS, dont les champs auront les valeurs suivantes:
MP_CLEF=(select clef_unique from proc_get_clef_unique('MEDIA_POINTEURS')),
MP_MEDIA= le n° du média que vous voulez dupliquer,
MP_CLE_INDIVIDU= la CLE_FICHE tirée de la table INDIVIDU,
MP_POINTE_SUR= la même CLE_FICHE
MP_TABLE='I',
MP_IDENTITE=0, (il ne peut y avoir qu'une seule photo d'identité par individu. Si vous mettez "1" au lieu de "0", votre nouvelle photo remplacera les existantes comme identité, mais la précédente restera dans l'onglet Médias de l'individu)
MP_KLE_DOSSIER= le n° de votre dossier,
MP_TYPE_IMAGE='I'
à tenter de préférence :wink: sur une copie de votre base.
Comme celà ne met en place qu'un pointeur vers la photo pour chaque individu, il n'y aura pas duplication de cette photo dans la base.
Dites si vous avez besoin de plus d'aide.

A+
André
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)
 

Hors ligne Anniea

  • Grand Amateur
  • ***
  • Messages: 38
    • Généalogie familiale
Ajouter globalement le même media à plusieurs individus
« Réponse #2 le: 14 Décembre 2007 à 23:56:54 »
Merci pour votre prompte réponse.
Je vais tenter l'expérience, mais, bien sûr, sur une copie de ma base !  :lol:
Annie
Annie

site de généalogie http://annie.antoine.free.fr
Vacances à la montagne : http://location2000.free.fr
Vacances à la mer : http://barcareslocation.free.fr
 

Hors ligne Anniea

  • Grand Amateur
  • ***
  • Messages: 38
    • Généalogie familiale
Ajouter globalement le même media à plusieurs individus
« Réponse #3 le: 15 Décembre 2007 à 00:27:43 »
C'est également "audacieux" de ma part de tenter l'expérience, vu mes faibles connaissances en SQL !   :oops:

la requête :
select  * from individu where kle_dossier=1 and INDIVIDU.NUM_SOSA>0
MP_CLEF=(select clef_unique from proc_get_clef_unique('MEDIA_POINTEURS')),
MP_MEDIA= 10,
MP_CLE_INDIVIDU= lNDIVIDU.CLE_FICHE,
MP_POINTE_SUR= lNDIVIDU.CLE_FICHE
MP_TABLE='I',
MP_IDENTITE=1
MP_KLE_DOSSIER= 1,
MP_TYPE_IMAGE='I'

renvoie l'erreur :
Dynamic SQL Error
SQL error code = -104
Token unknown -line 2, column 1
MP_CLE.       ???

J'ai effectivement besoin de plus d'aide.
Cordialement,
Annie


Annie

site de généalogie http://annie.antoine.free.fr
Vacances à la montagne : http://location2000.free.fr
Vacances à la mer : http://barcareslocation.free.fr
 

Hors ligne DDdeBerdeux

Ajouter globalement le même media à plusieurs individus
« Réponse #4 le: 15 Décembre 2007 à 10:54:35 »
Bonjour,
Il fallait bien une nuit pour laisser se reposer les "petites cellules grises" avant de tenter l'expérience :smile:
A voir votre code (MP_IDENTITE=1) vous avez décidé d'attribuer la même photo d'identité à tous vos sosas.
Pour commencer il faut que vous fassiez une renumérotation sosa et que vous attribuyez au decujus (sosa n°1) la photo d'identité que vous voulez affecter à tous les autres sosas.
Ensuite il faut attribuer à ces autres sosas, cette photo comme identité, à condition que cette même photo ne leur soit pas déjà attribuée (sans celà, ils auraient 2 fois la même photo).
Celà peut se faire par la requête suivante:

insert into media_pointeurs
(mp_clef
,mp_media
,mp_cle_individu
,mp_pointe_sur
,mp_table
,mp_identite
,mp_kle_dossier
,mp_type_image)
select
(select cle_unique from proc_get_clef_unique('MEDIA_POINTEURS'))
,dp.mp_media --la photo d'identité du decujus
,i.cle_fiche
,i.cle_fiche
,'I'
,1 --identifiant le média comme "identité"
,d.kle_dossier
,'I'
from individu d --le decujus
  inner join media_pointeurs dp on dp.mp_identite=1
  and dp.mp_cle_individu=d.cle_fiche --sa photo d'identité
  inner join individu i on i.num_sosa>1
  and i.kle_dossier=d.kle_dossier
where d.num_sosa=1
and --pour ne pas attribuer 2 fois la même photo à un individu
  not exists (select * from media_pointeurs
  where mp_cle_individu=i.cle_fiche
  and mp_media=dp.mp_media)
  and d.kle_dossier=:dossier --":dossier" le n° de votre dossier
en remplaçant :dossier (symbole ":" compris) par votre n° de dossier. Si vous exécutez la requête dans le BOA, cliquez sur "Exécuter procédure" car cette requête ne retourne pas de résultats, et n'oubliez pas de valider les modifications avant de quitter.
Ensuite, à moins que vous soyez sûre que cette photo n'ait jamais été attribuée auparavant, il faut la déclarer comme identité pour les individus sosas aux quels elle était déjà attribuée par la requête suivante:
update media_pointeurs p
set p.mp_identite=1
where p.mp_identite=0 --si la photo était déjà attribuée
and exists (select *
from individu d
  inner join media_pointeurs dp on dp.mp_identite=1
  and dp.mp_cle_individu=d.cle_fiche
  and dp.mp_media=p.mp_media
  inner join individu i on i.num_sosa>1
  and i.kle_dossier=d.kle_dossier
  and i.cle_fiche=p.mp_cle_individu
where d.num_sosa=1
and d.kle_dossier=:dossier)
en remplaçant également :dossier par le n° de votre dossier.

Bonne chance.
André

PS: dans les requêtes ci-dessus, le texte précédé sur la même ligne par le symbole "--" est un commentaire. Il n'est pas nécessaire de le supprimer pour exécuter la requête.
Si les variables telles que :dossier sont précédées du symbole ":", c'est parce que celà permet à certains requêteurs comme IBExpert de les reconnaître et de les présenter dans un tableau à remplir lors de l'exécution.
« Modifié: 15 Décembre 2007 à 11:01:30 par DDdeBerdeux »
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)
 

Hors ligne Anniea

  • Grand Amateur
  • ***
  • Messages: 38
    • Généalogie familiale
Ajouter globalement le même media à plusieurs individus
« Réponse #5 le: 15 Décembre 2007 à 14:50:53 »
Bonjour,
Malgré une nuit pour laisser se reposer mes "petites cellules grises" et toutes vos explications, ce n'est pas mieux !  :oops:
Je travaille dans le dossier 5 sur un extrait de ma base (74 individus).
J'ai fais la renumérotation sosa, il n'y a aucune photo, sauf celle du sosa 1 que je souhaite attribuer à tous les autres sosas.
Dans le BOA, je copie :
insert into media_pointeurs
(mp_clef
,mp_media
,mp_cle_individu
,mp_pointe_sur
,mp_table
,mp_identite
,mp_kle_dossier
,mp_type_image)
select
(select cle_unique from proc_get_clef_unique('MEDIA_POINTEURS'))
,dp.mp_media --la photo d'identité du decujus
,i.cle_fiche
,i.cle_fiche
,'I'
,1 --identifiant le média comme "identité"
,d.kle_dossier
,'I'
from individu d --le decujus
  inner join media_pointeurs dp on dp.mp_identite=1
  and dp.mp_cle_individu=d.cle_fiche --sa photo d'identité
  inner join individu i on i.num_sosa>1
  and i.kle_dossier=d.kle_dossier
where d.num_sosa=1
and --pour ne pas attribuer 2 fois la même photo à un individu
  not exists (select * from media_pointeurs
  where mp_cle_individu=i.cle_fiche
  and mp_media=dp.mp_media)
  and d.kle_dossier=:5 --":dossier" le n° de votre dossier

J'exécute la procédure, je valide les modifications, je quitte le BOA.
De retour dans Ancestrologie, je n'ai que la photo du decujus  :-[
J'ai dû rater un épisode ...
Cordialement,
Annie

Annie

site de généalogie http://annie.antoine.free.fr
Vacances à la montagne : http://location2000.free.fr
Vacances à la mer : http://barcareslocation.free.fr
 

Hors ligne DDdeBerdeux

Ajouter globalement le même media à plusieurs individus
« Réponse #6 le: 15 Décembre 2007 à 16:38:37 »
  and d.kle_dossier=:5 --":dossier" le n° de votre dossier
Dans mon message j'ai bien précisé de remplacer ":dossier" par le n° de votre dossier. Il faut donc supprimer ce symbole ":" avant le 5.
A+
André
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)
 

Hors ligne Anniea

  • Grand Amateur
  • ***
  • Messages: 38
    • Généalogie familiale
Ajouter globalement le même media à plusieurs individus
« Réponse #7 le: 15 Décembre 2007 à 16:56:59 »
Si en plus, je ne sais pas lire ...
Désolée  :oops: :oops:
Merci
Annie

site de généalogie http://annie.antoine.free.fr
Vacances à la montagne : http://location2000.free.fr
Vacances à la mer : http://barcareslocation.free.fr