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 :

Vocabulaire variables nom de colonne numérique / Rst [Toutes versions]


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut Vocabulaire variables nom de colonne numérique / Rst
    Bonjour,

    Je bute bêtement sur un problème de vocabulaire.

    Je dispose d'une table dont certains noms de champs sont numériques (ex : -211, -201, 15, 124).
    Le hic, c'est que je sais comment écrire ces noms de champs en dur, mais pas si je récupère ces chiffres via une variable :

    Rst![-211]=> est bien reconnu comme l'un des champs de ma table;
    Rst!MaVariable => n'est pas reconnu (impossible de trouver l'objet dans la collection correspondant...).

    J'ai fais pas mal de tentative sur la définition de MaVariable, mais je n'ai pas trouvé.

    Dim MaVar As String '=> j'ai essayé avec Integer
    MaVar = Rst!numero
    ou MaVar = "" & Rst!numero & ""
    ou MaVar = "[" & Rst!numero & "]"
    etc.

    Je n'arrive pas à trouver la bonne écriture.
    Est-ce que quelqu'un peut me mettre sur la piste ?

    Je précise que je peux difficilement changer le nom de mes colonnes numériques...

    Merci d'avance pour vos suggestions.

    Tiphaine

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 642
    Billets dans le blog
    67
    Par défaut
    Bonjour,
    Essayez Résultat = rst.fields(nomchamp) oû nomchamp est la variable contenant le nom du champ (ex. : nomchamp="-211").

    Si rst est un recordset.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 063
    Par défaut
    Meilleurs voeux 2026 à USER et à tous !

    Pour aller un peu plus avant si besoin, un petit Sub qui liste tous les champs d'une table :
    ( à insérer dans un module standard, le résultat est dans la fenêtre Exécution)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub fieldsNames()
        Dim rs1 As DAO.Recordset
        Dim strSql, i As Integer
     
        strSql = "T_client"  ' nom de la table
        Set rs1 = CurrentDb.OpenRecordset(strSql)
     
        rs1.MoveFirst
        For i = 0 To rs1.Fields.Count - 1
            'rang de la colonne, nom de la colonne et valeur du 1er record
            Debug.Print i + 1, rs1(i).Name, rs1(i).Value
        Next i
     
    End Sub
    "Always look at the bright side of life." Monty Python.

  4. #4
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 996
    Par défaut
    bonjour,
    Je précise que je peux difficilement changer le nom de mes colonnes numériques...
    certes, mais cela reste une absurdité d'avoir un nom de champ contenant un symbole réservé et beaucoup d'ennuis en perspective.
    Je suis d'ailleurs abasourdi qu'Access ne le signale pas au moment de la création alors qu'il existe par ailleurs une mise en garde: liste des mots et symboles réservés.
    Donc si on passe outre ou si on ne connait pas la règle restrictive, il faudra mettre le nom du champ (ou de la table) systématiquement entre crochets lors de l'utilisation d'une variable pour passer le nom du champ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim rst As Recordset, db As Database
    Dim mavar As String
     
    mavar = "-201"
     
    Set db = CurrentDb
    Set rst = db.OpenRecordset("Select * from matable", dbOpenSnapshot)
    rst.MoveFirst
    Debug.Print rst.Fields("[" & mavar & "]")  ' <====== pour contourner le problème quand un nom ne respecte pas la règle de nommage
    rst.Close

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut
    Citation Envoyé par User Voir le message
    Bonjour,
    Essayez Résultat = rst.fields(nomchamp) oû nomchamp est la variable contenant le nom du champ (ex. : nomchamp="-211").

    Si rst est un recordset.
    Bonjour User,

    Merci pour la suggestion.
    Le "rst.fields' est la 1ère chose que j'ai tenté, car rst est bien un recordset.
    Et ça passe, mais cela me renvoi une valeur null, alors que la partie 'nomchamp' a bien la bonne valeur...
    Je dois riper un truc quelque part. Le hic c'est qu'on me cale une urgence sur 10 autres et que je n'arrive pas à me poser pour mieux réfléchir...

    Je vais voir ce que me disent micniv et tee_grandbois.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut
    Citation Envoyé par micniv Voir le message
    Meilleurs voeux 2026 à USER et à tous !

    Pour aller un peu plus avant si besoin, un petit Sub qui liste tous les champs d'une table :
    ( à insérer dans un module standard, le résultat est dans la fenêtre Exécution)

    Mais oui, pardon !
    Meilleurs voeux à tous :-)

    Super pour cette sub, elle est super :-)
    A cet instant, elle ne réponds pas exactement à ce que je cherche, mais je suis sûre d'en faire bon usage !!!

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    certes, mais cela reste une absurdité d'avoir un nom de champ contenant un symbole réservé et beaucoup d'ennuis en perspective.
    Oui, c'est vrai, je suis d'accord.
    J'ai voulu faire vite, tout en ayant un petit niveau autodidacte et en étant rouillée sur le codage.

    La solution 'Rst.Fields("[" & mavar & "]")' n'a pas non plus fonctionné.
    Il doit y avoir un souci un peu plus haut dans mon code...

    Je me suis posée 2 mn.
    Je vais contourner mon problème en utilisant la fonction 'replace' pour éviter ces noms de champs qui posent problème.

    Merci pour vos réponses.
    Je clos la discussion, car je pense que le Rst.Fields(MaVar) ou variante avec les [&" doit fonctionner...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut
    Re-Bonjour,

    J'ai trouvé !
    Même après être passé sur des noms de colonnes corrects, j'avais le même problème.

    Je reprends : l'objectif était d'utiliser en variable un nom de champs lui-même variable.

    1ère variable, dit MaVariable = le nom de mon champs, ex. MonChamps
    Utilisation en 2ème variable : Rst.Fields(MaVariable)

    Mais :

    Rst!MonChamps=> est bien reconnu comme l'un des champs de ma table;
    Rst.Fields(MaVariable) => n'est pas reconnu (impossible de trouver l'objet dans la collection correspondant...).

    Le problème à résoudre était donc de pouvoir écrire 'Rst.Fields(MaVariable)' correctement pour que cela fonctionne comme si j'avais écrit en dur 'Rst!MonChamps'

    La réponse était dans les guillemets !
    Quand j'écris MaVar = MonChamps cela ne renvoie pas MonChamps, mais "MonChamps"
    Il ne reste plus qu'à supprimer ces guillemets qui gênent.

    Et hop : cela fonctionne avec => Rst.Fields(Replace(MaVar, "'", "''"))

    Ouf!
    Pas mécontente d'en être sortie !
    Merci pour vos réponses qui m'ont mis sur la voie :-)

  9. #9
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 996
    Par défaut
    Rst!MonChamps=> est bien reconnu comme l'un des champs de ma table;
    Rst.Fields(MaVariable) => n'est pas reconnu (impossible de trouver l'objet dans la collection correspondant...).

    Le problème à résoudre était donc de pouvoir écrire 'Rst.Fields(MaVariable)' correctement pour que cela fonctionne comme si j'avais écrit en dur 'Rst!MonChamps'

    La réponse était dans les guillemets !
    Quand j'écris MaVar = MonChamps cela ne renvoie pas MonChamps, mais "MonChamps"
    Il ne reste plus qu'à supprimer ces guillemets qui gênent.
    étrange, avec le code que j'ai mis en exemple, je n'ai pas eu à enlever les guillemets: j'ai déclaré la variable en type String, c'est normal que dans VBA on les entoure de guillemets ...
    Il faudrait préciser exactement comment tu passes tes variables pour avoir cette erreur

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 642
    Billets dans le blog
    67
    Par défaut
    Citation Envoyé par micniv Voir le message
    Meilleurs voeux 2026 à USER et à tous !

    ...
    Très bonne année à toi aussi et à toute la communauté Dvp.

    Pour le problème dans Rst.Fields(Replace(MaVar, "'", "''")) j'ai l'impression que MaVar est du type Numérique ou entier et que Replace(MaVar, "'", "''") transforme la variable de type numérique en type String comme souhaité.

    Dans ce cas Rst.Fields(CStr(MaVar)) suffirait.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut
    Citation Envoyé par User Voir le message
    Pour le problème dans Rst.Fields(Replace(MaVar, "'", "''")) j'ai l'impression que MaVar est du type Numérique ou entier et que Replace(MaVar, "'", "''") transforme la variable de type numérique en type String comme souhaité.
    Dans ce cas Rst.Fields(CStr(MaVar)) suffirait.
    Mais yessss !!!
    C'est exactement ça :-)
    Cela fonctionne avec le Rst.Fields(CStr(MaVar)).
    Comme c'est bô !!!!

    Trop merci !

    Et du coup, tee_grandbois, le problème n'était pas dans ma façon de passer ma variable, mais dans son type.

    Encore merci à tous.
    C'est de la magie, tout ça

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 556
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 556
    Par défaut
    Hello,

    Dans une base de données, concevoir une table avec des colonnes numérotées souligne un problème de conception.

    Quel est votre besoin ?

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

Discussions similaires

  1. Nom de variable = nom de colonne sql
    Par EricGardien dans le forum ASP
    Réponses: 2
    Dernier message: 10/01/2012, 09h50
  2. Procédure stockee avec variable de nom de colonne
    Par nicolasj7777 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/11/2008, 16h43
  3. PL/pgSQL : conflit entre variable et nom de colonne
    Par archeboc dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 26/03/2008, 13h10
  4. nom de colonne dans une variable
    Par cyclone_yas dans le forum SQL
    Réponses: 12
    Dernier message: 27/12/2006, 11h41
  5. Nom de colonne variable
    Par Fayoul dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/08/2006, 16h50

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