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 :

Lire un champ Multivalué dans un controle [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre éprouvé
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 449
    Points : 991
    Points
    991
    Par défaut Lire un champ Multivalué dans un controle
    Bonjour à tous

    Après une recherche infructueuse de plusieurs heures je me décide à poster, je ne pense pas pouvoir trouver seul.
    J'ai trouvé différent code de personnes pour m'inspirer mais clairement ca ne semble pas correspondre du tout à ce que j'obtiens avec la requete simple sur une table "jeu" via l'instruction currentdb.openrecordset.

    Je cherche en fait à tout dépiler dans un label (par exemple), dans un formulaire dynamique, donc il n'y a pas de sous formulaire, pas non plus à cliquer sur les flèches pour faire défiler le formulaire en mode colonne. C'est un peu comme le résultat en php + javascript d'une page web sur laquelle on dépile le contenu d'une base.
    Ca donne quelque chose du genre

    Jeu1 | songenre1;songenre2 etc
    Jeu2 | songenre1

    . Il fonctionne bien sauf pour cela, tout se nettoie des controls, je crée les controles mais là dessus rien n'y fait. Le champ "Genre" est multivalué, j'ai un peu tout essayé, de lancer sur genre.value comme sur "genre" le passage dans une variable est possible, mais je ne peux pas la charger dans une textbox,

    Je prends toujours la même erreur "erreur d'éxécution 13" incompatibilité de type.
    Mais la passer dans une "case" d'un array de type string est impossible.

    Quand j'interroge le type de variable par vartype() il me retourne que ma variable est de type 9 j'ai regardé apparemment c'est une variable type objet.

    Je ne vois même pas comment forcer l'affichage, debug.print comme msgbox, ne fonctionnent pas avec pour voir à quoi ca ressemble pour pouvoir la retraiter, et en même temps je concède qu'il y trois jours je n'avais jamais abordé la programmation sous vba access. Et étant sur SQL, il y a des années, je ne faisais pas de multivalué, simplement je stockait mes valeurs en placant un caractère spécial entre. J'aurais pu faire pareil, mais j'ai fait l'erreur, je crois, de vouloir voir autrement... Outre que la table est maintennat bien remplie d'une centaine de jeux puisqu'au début je me faisais juste une base "comme ca ", j'aime bien comprendre ou ca bloque et je sais que je vais pas décrocher avant d'avoir la réponse.

    Merci d'avance.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 449
    Points : 991
    Points
    991
    Par défaut
    Je commence à m'auto-répondre, si ca sert aux autres.

    J'ai eu l'idée simple de tester la variable qui enregistrait le recordset et en fait elle a renvoyé le même numéro, c'est donc un objet, ce que je ne savais pas. Je pensais qu'une variable recordset avait un vartype bien à lui.

    du coup le champ multivalué est passé dans une boucle


    Edit: J'ai donc trouvé mes soucis et résolu je poste un code super simple basé sur ma base au cas ou quelqu'un sèche comme je l'ai fait pour s'en inspirer pour la suite, vu que je n'en ai pas trouvé pour la lecture de la base.
    Il y a peut être des choses à perfectionner mais il fonctionne. Ca n'est utilisable qu'en débug mode pour ne pas alourdir le code je n'ai pas mis les controles ni le vidage du formulaire, d'autant que pour le moment n'ayant pas eu trop de temps je ne me suis pas encore occupé de passer les résultats dans les controles. Par contre si ca fonctionne avec un debug.print, ca fonctionne tout court d'après ce que j'ai pu en juger.

    Je ne me suis pas occupé pour le moment non plus de faire un inner join dans ma requete , c'est vraiment le truc de base sur lequel s'appuyer. Donc chaque numéro de genre correspond à un genre précis qui est stocké dans une autre bdd dont je ne m'occupe pas ici.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Dim rst2 As Recordset
    Dim i, j As Integer
     
    Debug.Print "----------------- Vous entrez dans Genform ------------------------"
     
     
    sql = "SELECT Jeu.ID, Jeu.Titre, Jeu.Genre FROM Jeu WHERE Jeu.Titre LIKE 'Fable*'"
    Set rst2 = CurrentDb.OpenRecordset(sql)
     
    Do While Not rst2.EOF
    i = 0
        Debug.Print "ID: " & rst2.Fields("ID") & " Titre: " & rst2.Fields("titre")
        rst3 = rst2.Fields("Genre")
        'Boucle pour dépiler le contenu du champ multivalué
        Do While Not rst3.EOF
            Debug.Print "Champ genre n° " & i & " | Genre: " & rst3.Fields("value")
            rst3.MoveNext
            i = i + 1
        Loop
        rst2.MoveNext
        Loop
    'fin de la seconde boucle
     
    rst2.Close
    Set rst2 = Nothing
    Set rst3 = Nothing
    Ca donne dans la fenetre de débug (ctrl+G) sur la fenêtre de code.

    ----------------- Vous entrez dans Genform ------------------------
    ID: 12 | Titre: Fable | Machine: 3
    Champ genre n° 0 | Genre: 3
    ID: 233 | Titre: Fable 2 | Machine: 4
    Champ genre n° 0 | Genre: 3
    Champ genre n° 1 | Genre: 68
    ID: 234 | Titre: Fable 3 | Machine:
    Champ genre n° 0 | Genre: 1
    Champ genre n° 1 | Genre: 6
    Champ genre n° 2 | Genre: 8
    Champ genre n° 3 | Genre: 19
    Champ genre n° 4 | Genre: 68
    Champ genre n° 5 | Genre: 69
    Voilà ca casse pas trois pattes à un canard mais j'espère que ca sera utile à un débutant qui galère.

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

Discussions similaires

  1. [Base de donnée] Écrire et Lire un champs BLOB dans MySQL
    Par DevMicroEtDB dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/11/2010, 02h37
  2. Réponses: 6
    Dernier message: 19/11/2010, 18h27
  3. [AC-2007] Champs multivalué dans un publipostage access word
    Par miamou dans le forum IHM
    Réponses: 1
    Dernier message: 10/12/2009, 11h14
  4. Binding d'un champ XML dans un controle
    Par Bibbox dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/03/2009, 15h57
  5. Binding d'un champ XML dans un controle
    Par Bibbox dans le forum ASP
    Réponses: 0
    Dernier message: 30/03/2009, 19h08

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