Auteur Sujet: Non fonctionnement exportation toutes les images  (Lu 5724 fois)

plus minus reset

0 Membres et 1 Invité sur ce sujet

Hors ligne DDdeBerdeux

Non fonctionnement exportation toutes les images
« le: 09 Septembre 2005 à 16:43:34 »
La procédure d'exportation de toutes les images ne fonctionne pas chez moi à cause d'une erreur "multiple rows in singleton select". Après analyse il semble que celà vienne de la procédure stockée "PROC_EXPORT_IMAGES" qui n'accepte pas qu'un média soit lié à plusieurs individus.

Ceci ne me semble pas nomal, par exemple une image d'un recensement peut être liée aux personnes sitées, une photo de mariage à chaque épous, une photo d'acte de baptême aux 2 jumeaux... (c'est peut-être pour çà qu'on a fait Quisontils?)

Pour retrouver les médias ainsi en double, j'ai fait la requête suivante, reprenant en partie la méthode de sélection de la procédure stockée.



select mu.MULTI_CLEF , mu.MULTI_PATH , i.NOM , i.PRENOM

from INDIVIDU i , MULTIMEDIA mu , MEDIA_POINTEURS mp

where i.KLE_DOSSIER = 1

 and i.CLE_FICHE = mp.MP_CLE_INDIVIDU

 and mu.MULTI_CLEF = mp.MP_MEDIA

 and mp.MP_TYPE_IMAGE = 'I'

 and (select count(md.MP_CLE_INDIVIDU) from MEDIA_POINTEURS md

      where md.MP_MEDIA = mp.MP_MEDIA and md.MP_TYPE_IMAGE = 'I') > 1

order by mu.MULTI_CLEF



La procédure stockée pourrait-elle être revue pour éviter cette erreur?

Si j'ai bien compris, elle existe principalement pour renommer les médias?

A+

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

Hors ligne DDdeBerdeux

Non fonctionnement exportation toutes les images
« Réponse #1 le: 11 Septembre 2005 à 19:39:40 »
Puisque les développeurs semblent en vacances ou en WE, j'ai modifié moi-même la procédure stockée en question. Je l'ai d'abord modifiée pour que le média soit exporté pour chaque individu auquel il est lié (nom du fichier= nom+prenom+ un nombre). Etonné que seulement 175 fichiers soient créés alors que ma table MULTIMEDIA contient 187 médias, j'ai constaté que les médias liés uniquement aux actes n'étaient pas exportés. J'ai donc supprimé la sélection qui était faîte sur le TYPE_IMAGE. Maintenant j'exporte 222 fichiers. Il y a bien sûr des doublons dus aux médias reliés à plusieurs individus, mais si on voulait éviter celà, il faudrait trouver une autre méthode de nommage des fichiers, sans lien avec les individus!

Si certains veulent appliquer la modification, voici la requête qui permet de modifier la procédure stockée. Mais attention, le BAO et le requêteur d'Ancestrologie ne peuvent pas l'exécuter; pour celà il faut un autre outil comme IBEasy+ ou IBOconsole. Sans oublier de sauvegarder au préalable!



COMMIT WORK;

SET AUTODDL OFF;

SET TERM ^ ;



ALTER PROCEDURE "PROC_EXPORT_IMAGES"

(

  "I_DOSSIER" INTEGER

)

RETURNS

(

  "NOM" VARCHAR(105) CHARACTER SET ISO8859_1,

  "MULTI_MEDIA" BLOB

)

AS

/* Modifications André le 19/09/2005

Edite une image par individu pour éviter l'erreur due aux images liées

à plusieurs individus*/

declare variable I_CLEF INTEGER;

declare variable I INTEGER;

declare variable A_PRENOM VARCHAR(60);

DECLARE VARIABLE MP INTEGER;

BEGIN

  I = 0;

  FOR

     SELECT MULTI_CLEF,

            MULTI_MEDIA

        FROM MULTIMEDIA

        WHERE MULTI_DOSSIER = :I_DOSSIER

        INTO :I_CLEF,

             :MULTI_MEDIA

     DO

     BEGIN

      SELECT MIN(MP_CLEF) FROM MEDIA_POINTEURS WHERE MP_MEDIA = :I_CLEF

             INTO :MP;

      IF (MP IS NULL) THEN

        BEGIN

          I = I + 1;

          NOM = 'NON AFFECTEE';

          NOM = NOM || '-' || I;

          SUSPEND;

        END

      ELSE

        FOR

         SELECT NOM, PRENOM

            FROM individu,

               media_pointeurs

            WHERE MP_MEDIA = :I_CLEF AND

               MP_CLE_INDIVIDU = CLE_FICHE

            INTO

               :NOM,

               :A_PRENOM

        DO

            BEGIN

               I = I + 1;

               if (STRLEN(NOM) = 0) then NOM = 'SANS NOM';

               if (STRLEN(A_PRENOM) > 0) then NOM = NOM || ' ' || A_PRENOM;

               NOM = NOM || '-' || I;

               SUSPEND;

            END

     END

END

 ^



SET TERM ; ^

COMMIT WORK;

SET AUTODDL ON;




A+

André



PS: si les développeurs pouvaient donner leur avis, à leur retour :wink:
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)