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

VBA Access Discussion :

Lecture d'identifant sous forme de GUID


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 47
    Points
    47
    Par défaut Lecture d'identifant sous forme de GUID
    Bonjour,

    j'ai importé sous Access une base de données qui contient des ID de tables sous forme de GUID. Par exemple: {02861DAB-B5E1-4263-B853-916C78E6F13A}

    j'ai un problème quand je veux les lire en VBA, ils n'apparaissent pas de la même façon dans un champ de formulaire et dans une variable VBA.

    Dans le champs de formulaire ils apparaissent correctement sous le forma {02861DAB-B5E1-4263-B853-916C78E6F13A} alors que dans une variable VBA ils apparaissent sous la forme "????????" ou "?N??????"... voir captures ci-dessous.

    De fait, ça me pose donc des problèmes quand je veux utiliser une méthode comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.SearchForRecord acDataForm, "fContacts", acFirst, "[txtCONTACTID]='" & Me.cmbRecherche_contact & "'"
    Encore que parfois sur certains formulaires ça fonctionne quand même

    Nom : Capture d’écran 2020-12-22 110407.png
Affichages : 136
Taille : 6,8 Ko



    Nom : Capture d’écran 2020-12-22 110441.png
Affichages : 117
Taille : 9,8 Ko


    Quelqu'un comprend-il ce qu'il se passe?

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    GUID est un tableau de Byte donc il faut le transformer en String pour le lire à l'aide de la fonction StringFromGuid()

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 47
    Points
    47
    Par défaut
    Bonjour Loufab,

    suite à ta réponse qui m'a bien orienté, j'ai fait divers tests pour comprendre le fonctionnement de la fonction StringFromGuid() et son antonyme GUIDFromString().

    Il me reste des points que je n'arrive pas à comprendre.

    Je ne mets pas "Résolu" pour le moment.

  4. #4
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    J'ai compris comment fonctionnaient StringFromGuid() et GUIDFromString() et je devrais pouvoir résoudre mon problème en faisant un code un peu plus compliqué.

    En faisant des tests, j'ai vu d’où venait mon problème mais sans le comprendre.

    Quand je récupère le GUID dans la table à l'aide d'une requête, sans utiliser aucune des fonctions ci-dessus, il est bien sous forme de string {00E82640-F883-46A2-8C0A-36E2C9C171C4} et je peux travailler avec tel quel.

    Je peux l'afficher sous cette forme dans un champ texte d'un formulaire et après, l'exploiter en VBA depuis ce champ de texte, il reste bien toujours sous le même format string.

    Quand je l'affiche automatiquement dans un champ texte d'un formulaire lié à la table, en faisant défiler les enregistrement par exemple, il s'affiche bien sous sa forme string {00E82640-F883-46A2-8C0A-36E2C9C171C4} mais quand je veux le lire avec VBA, la string ne contient que des caractère de type ????????, ?y?????? et je ne peux pas l'exploiter.

    Je ne comprend pas pourquoi, alors que dans les 2 cas le GUID s'affiche bien dans le champ texte, dans un cas on peut l'exploiter et dans l'autre non.

    Une explication?

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Le GUID est un ensemble d'octets, donc pour pour avoir un affichage compréhensible il faut le convertir en String d'où la fonction.7
    Et donc pour transformer un string représentant un GUID en sa traduction en octets il faut passer par l'autre fonction.

    Quand tu affiches un GUID dans l'interface MS ACCESS (formulaire, table, requête...) ACCESS fait la traduction en String tout seul pour qu'il puisse être lu par un humain.

    Par contre il ne s'agit que d'un affichage, la valeur elle, reste un GUID en octets.

    Maintenant ce qu'il faut que tu décide c'est dans VBA, est-ce que tu veus exploiter le GUID ou sa traduction "humanisée" ?

    Si c'est pour une utilisation strictement programme tu ne devrais pas avoir à faire de traduction, si c'est pour de l'affichage (afficher un message par exemple) tu devras le faire.

    Ce que je te conseille c'est de laisser le GUID dans sa forme primaire (octale) et de faire tes traces/debug (ou tes besoins humanisés) en utilisant ponctuellement la fonction StringFromGuid().

    Est-ce clair ?

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. Lecture d'un graphe sous forme de fichier texte
    Par martin56 dans le forum Général Python
    Réponses: 3
    Dernier message: 31/05/2019, 09h43
  2. Réponses: 0
    Dernier message: 29/10/2014, 16h46
  3. [XL-2003] Identifer sous forme graphique les données absentes
    Par L'Harrifette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/05/2011, 06h30
  4. Lecture binaire écriture sous forme d'entier
    Par titours254 dans le forum Débuter
    Réponses: 4
    Dernier message: 03/04/2008, 22h03

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