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

Access Discussion :

Fonction shell > Est ce possible ?


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 21
    Points : 10
    Points
    10
    Par défaut Fonction shell > Est ce possible ?
    Bonjour, la communauté

    je développe une base de données photo sur Access 2000-2003,
    la gestion des critères et la selection multi-critères fonctionnent à merveille ! Pour compléter le tableau, je cherche à recueillir les tags EXIF des images JPG en collection.
    Pour cela, j'expérimente un utilitaire en ligne de commande, exiflist,
    qui fonctionne bien en "invite de commande" (DOS).
    Voici un exemple de ligne de commande standard qui marche bien :

    c:\>exiflist /o l /f date-taken L:\Collections\IMG_9515.JPG >L:\Collections\exif.txt

    Dans cet exemple, l'exe écrit dans un fichier "exif.txt"
    les tags de l'image "IMG_9515.JPG"
    demandés par les paramètres "/o l /f date-taken"
    L'exploitation d'un tel fichier texte dans Access ne pose pas de problème.
    Je cherche donc à lancer cet utilitaire depuis Access,
    via la commande shell...

    Shell("exiflist /o l /f date-taken L:\Collections\IMG_0014.jpg >L:\Collections\exif.txt")

    Shell("C:\>exiflist.exe /o l /f date-taken L:\Collections\IMG_0014.jpg >L:\Collections\exif.txt")

    Sans résultat. Ni erreur système.
    J'ai essayé les indications concernant les guillemets, en réécrivant la commande comme suit :

    Shell("""C:\exiflist.exe /o l /f date-taken L:\Collections\IMG_0014.jpg"" "">L:\Collections\exif.txt""")
    Shell("""C:\exiflist.exe /o l /f date-taken"" ""L:\Collections\IMG_0014.jpg"" "">L:\Collections\exif.txt""")
    Shell("""C:\exiflist.exe"" ""/o"" ""l"" ""/f"" ""date-taken"" ""L:\Collections\IMG_0014.jpg"" "">L:\Collections\exif.txt""")

    Sans résultat. Erreurs système > "Fichier introuvable" ou "Syntaxe erronée" (codes 5, 56)

    J'ai essayé un code avec une fonction API "ShellActivate", déclarée en module, avec paramètres String ou Long,
    ce, après lecture attentive de forums, de la doc Microsoft, etc
    mais cette commande semble réservée aux applis Microsoft...? pas de résultat.
    Les essais via la ligne "exécuter" du Menu Démarrer ne donnent non plus aucun résultat...
    Y a-t-il possibilité de lancer ce type de commande à partir d'Access, via un bouton ?
    Ou bien le shell Access est-il vraiment limité comme on le lit ici ou là ?
    Quelles seraient ces limites ?
    D'autant que j'imagine pour ma base une commande incluant en variables
    les noms du lecteur logique, des chemins, des fichiers photo, voire des paramètres eux-mêmes de l'exe...
    Il existe (par exemple pour Excel) des sources (qui marchent) en VBA d'extraction des tags EXIF vers feuilles xls,
    mais je n'en trouve pas pour Access : Faut-il refaire le monde ? Je n'y crois pas !
    D'autres utilitaires comme ImageMagick posent le même problème,
    qui me semble donc bien une question Access.

    Appel aux espécialistes, les neurones d'un humble autodidacte sont fatigués !
    Merci de votre aide
    CG

  2. #2
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    2 choses :
    1- pour mettre au point la syntaxe de ta commande, commence par l'exécuter à partir, soit d'un fichier .bat, soit de la commande Démarrer > Exécuter de Windows.
    Lorsque la bonne syntaxe sera trouvée, tu pourras l'utiliser avec un Shell.

    2- la commande Shell est très limitée. Cherche dans la FAQ et les Sources, tout ce qui concerne l'API ShellExecute (ou ShellExec ?)
    Celui-ci est utilisé par l'explorateur windows quand on double clique sur un document ou autre objet, et est beaucoup plus puissant que la commande Shell de VBA.
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 21
    Points : 10
    Points
    10
    Par défaut ce shell que j'aime...
    Hello ! Merci de ta réponse
    j'ai commencé par les tests en ligne "Démarrer>exécuter", avec les différentes formulations de cette fameuse ligne de commande, guillemets en plus ou en moins, etc, et AUCUNE n'a fonctionné, alors que dans la fenêtre DOS invite de commande, ça marche...
    Avec ShellExecute déclarée en Function , il me semble que ne sont reconnues que les applis Microsoft/windows genre office, etc - Est-ce vrai ?
    En tous cas les mêmes combinaisons d'écriture n'ont rien donné, que des erreurs ou des inactions...
    je cherche jusqu'à ce que je trouve.
    merci de ton aide
    CG

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    les images dans access sont un domaine d'excellence pour Arkham46, il a rédigé un tutoriel sur EXIF & Access :
    http://arkham46.developpez.com/artic...s/clexif/tuto/
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  5. #5
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Citation Envoyé par ClaudeG
    Avec ShellExecute déclarée en Function , il me semble que ne sont reconnues que les applis Microsoft/windows genre office, etc - Est-ce vrai ?
    Faux : tu peux lui passer un .pdf, et il lancera Acrobat, ou tout autre lecteur de documents pdf répertorié dans la liste visible dans les propriétés de l'explorateur windows (Outils > Options des dossiers > Types de fichier).

    Par exemple.
    Et plein d'autres choses (doc en ligne sur msdn.microsoft.com)

    Ensuite, autant pour moi. Je n'ai jeté qu'un coup d'oeil rapide à tes commandes et tes messages d'erreur.
    Je n'y comprenais rien, parce que tu commences les premières commandes avec le prompt du DOS ("C\>") et que je ne comprenais pas pourquoi tu avais mis cet exécutable dans la racine de ton disque dur !!!

    Quelle que soit la commande (Shell, ShellExecute ou autre),
    - si tu spécifies le nom de l'exécutable,
    - faut aussi son chemin d'accès.

    (Retour nostalgique au (bon ?, je suis pas sûr) vieux temps du DOS), sauf
    si le dossier contenant cet exe se trouve déclaré dans la variable PATH (sous DOS). Mais laisse tomber, on fait plus comme ça.
    Il faut que tu mettes le chemin complet.

    Essaies d'abord de simplement lancer ton logiciel (avec ou sans option / fichier...)
    Shell("C:\Program Files\ExifList\exiflist.exe")
    en mettant le bon chemin d'accès, bien sûr...
    Puis, si ça marche, tu rajouteras les options, le nom du fichier, les double quotes là où il faut...

    De toute façon, la solution avec la classe d'Arkham peut être encore plus puissante pour toi : entièrement programmable.
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 21
    Points : 10
    Points
    10
    Par défaut les tags exif
    Bonjour ! merci de votre aide
    Je m'adresse à Arkham plus particulièrement, dont je teste la classe :
    alors là, je reste assis, car cette classe est très précisément ce qu'il me fallait. Un immense merci, déjà j'ai adapté ce code à mon formulaire, et (en test encore) je peux ainsi appliquer par exemple la date exif du cliché en lieu et place des approximations que j'avais renseignées de mémoire. Je compte bien automatiser la saisie des dates avec cette façon de faire, je te tiendrai au courant.

    Cependant, j'ai tenté un autre test qui concerne le lecture du tag" &H920A" qui correspond à "FocalLength", ainsi que plusieurs autres qui m'intéressent sur le plan photographique, mais là pas de résultat, une certaine catégorie de tags semble ne pas pouvoir être extraite. Y a-t-il une limite à la classe ?
    (j'ai vérifié sur d'autres "lecteurs EXIF" qu'ils existaient bien.)

    Il y a peut-être des configs spécifiques pour les modèles d'appareil ? JJe recueille des images essentiellement des Canon A60, A70, A90, 350D.

    Poursuivons, c'est trop passionnant !
    Mes remerciements encore
    ClaudeG

  7. #7
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    'soir,

    à priori tous les tags répertoriés dans la doc de gdiplus doivent fonctionner, à moins qu'il y en ait un très particulier

    les plus durs à exploiter c'est certains tags complexes qui contiennent une multitude d'informations dans un tableau
    mais pour la plupart des tags ça se résume à un numérateur et un dénominateur

    celui-ci c'est justement un relationel, donc on récupère un tableau de deux valeurs qui sont le numérateur et le dénominateur d'une fraction

    le plus simple c'est encore de mettre la valeur du tag dans un variant et de regarder sa valeur en débogage
    pour une focale de 8 mm j'ai un tableau de deux valeurs : 80 et 10
    y a plus qu'à les diviser et ajouter " mm" pour obtenir le texte complet

    c'est le même principe que pour le temps d'exposition :
    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
     
    Dim lData as Variant
    Dim lFocalLength as String
       ' On stock  d'abord le résultat dans lData
        lData = clex.GetExifData(clex.FocalLength)
        ' On obtient un tableau de 2 valeurs
        If Not IsNull(lData) Then
            If lData(1) > lData(0) Then
                ' Inférieur à  1 mm (je sais pas si ça existe??)
                lFocalLength = "1/" & Int(lData(1) / lData(0)) & " mm"
            Else
                ' Supérieur ou égal à 1 mm
                lFocalLength = Int(lData(0) / lData(1)) & " mm"
            End If
        Else
            lFocalLength = ""
        End If
    remarque : le tag vaut &H920A& (ne pas oublier le & à la fin pour les tags qui ne seraient pas dans les propriétés que j'ai définies)

    bye

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 21
    Points : 10
    Points
    10
    Par défaut Extraction de données EXIF > ARKHAM
    Hello !
    ça y est ! je viens de terminer le petit module de récupération des données exif pour les images stockées dans ma base de données, grâce au code communiqué par Arkham > c'est tout simplement génial, et après un long travail de mise au point, j'ai pu extraire d'un simple clic plus de 10000 données exif de base, l'exécution a été très rapide, moins d'une minute.
    Je me retrouve avec de nouvelles infos concernant les dimensions, l'orientation, la focale, la vitesse, la date et l'heure, etc qui sont également des critères de sélection pour certains.
    Je joins à ce message le code de ce petit formulaire, qui n'est en fait qu'une boucle qui permet de lire dans la base les chemins et les noms des images afin d'en reconstituer les adresses absolues, qui permet donc d'ouvrir chacune, et qui y lit les data exif ( re-merci Arkham), les stocke dans une variable, et une ligne SQL permet d'updater la même base dans la foulée, image par image.
    Mon code n'est peut-être pas très élégant, mais il marche à 100%, alors...

    Il me reste quelques questionnements, concernant les exif : Certaines données semblent définies dans des formats "constructeur", et je ne trouve pas le moyen d'extraire ce qui serait spécifique de Canon (MakerNote ?) en particulier, alors que des utilitaires.exe existants hors Access savent le faire, mais ne disent pas comment !

    Quelle puissance dans Access !

    Merci encore, je suis sûr que je reviendrai bientôt, pour le plaisir
    ClaudeG
    Fichiers attachés Fichiers attachés

  9. #9
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Bravo à vous 2 et merci pour ce bout de code.
    Une petite appli complète, zippée, avec une interface propre, ça serait pas mal non plus, non ?

    Non, je rigole. Mais, si tu as le temps, on pourrait la mettre en ligne...

    Tout ce que je voulais dire, après avoir jeté un oeil très rapide sur ton code, si tu veux continuer à prendre ton pied avec Access, va voir dans la page outils et installe mzTools (et puis SmartIndent, tant que tu y es. Les 2 sont gratuits).
    Entre autres très nombreuses fonctions précieuses, mzTools te permettra de couper automatiquement tes lignes trop longues avec des _
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  10. #10
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    slt,

    content que ça marche

    Au passage je précise que dans la version finale les noms des tags ont été préfixés avec "Tag" et qu'il sont en énumérations pour Acc2000+
    (t'avais eu le tuto un peu tôt il n'était pas totalement finalisé)

    ça ne change pas grand chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    lData = clex.GetExifData(clex.FocalLength)
    ' Devient pour Access97 :
    lData = clex.GetExifData(clex.TagFocalLength)
    ' Et devient pour Access>=2000
    lData = clex.GetExifData(TagFocalLength)
    rien d'autre n'a changé cependant, mais au cas je fasse évoluer le module et que tu prennes la dernière version il faudra faire un petit rechercher/remplacer

    Concernant le tag MakerNote c'est effectivement illisible ce qu'il y a dedans.
    Le contenu de ce tag n'est pas normé (c'est pour ça qu'il n'est pas géré plus en détail par gdi+), chaque constructeur y met ce qu'il veut et le contenu est différent même pour des appareils d'un même constructeur.
    Les logiciel qui lisent ces informations ont développé un traitement spécifique pour ce Tag en fonction de l'appareil.
    Le contenu est souvent au format IFD donc lisible mais au prix d'un effort non négligeable et de maux de tête garantis...

    bye

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/11/2009, 15h09
  2. Réponses: 11
    Dernier message: 06/11/2006, 22h51
  3. Réponses: 6
    Dernier message: 19/10/2006, 15h47
  4. Réponses: 2
    Dernier message: 17/08/2006, 14h50
  5. Est-il possible d'exécuter une fonction à partir de fichier
    Par magic8392 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 16/09/2005, 13h59

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