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 :

[VBA] question de débutant comment obtenir la valeur d'un champ..


Sujet :

Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut [VBA] question de débutant comment obtenir la valeur d'un champ..
    bonjour,

    la question est simple, je n'arrive pas a acceder aux valeurs des champs pourtant cela doit etre tres simple ...
    autant tbd.fields(i).name fonctionne et je retire le nom du champs autant tbd.fields(i).values je ne peu rien en faire.

    qqun aurait il une idée?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dim tbd As DAO.TableDef
    debug.print tbd.fields("num_tri").values
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    De quel enregistrement veux tu retrouver la valeur ?

    Regarde les recordset.

    Petit exemple pour retrouver la valeur du champ "num_tri" d'un enregistrement :

    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
     
    Dim Rs As DAO.Recordset
    Dim I As Integer
    Set Rs = CurrentDb.OpenRecordset("nom_de_la_table_ou_de_la_requete", dbOpenSnapshot)
    If Rs.EOF = False Then
          I = 1
          Do Until Rs.EOF = True
            Debug.Print "enregistrement N°" & I & "  : " & Rs("num_tri")
            I = I + 1
            Rs.MoveNext
          Loop
    Else
          Debug.Print "aucun enregistrement"
    End If
    Set Rs = Nothing

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    passé par Rs serait possible mais dans mon cas:


    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
    For Each tbd In Db.TableDefs
     
        If tbd.Name = "Fiche_recapitulative_SMS" Or tbd.Name = "Repertoire_SIM_et_mobile" Or tbd.Name = "SMS_MO" Or tbd.Name = "USSD" Then
     
             For j = 0 To tbd.RecordCount - 1
     
                For i = 0 To tbd.Fields.Count - 1
     
     
                  La je voudrais afficher mes valeur de champs    
     
     
                Next i
     
     
     
             Next j
        End If
    Next tbd
    jte laccorde dans l'idée ca sert a rien mais comment faire ?
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    dao.tabledef ne concerne pas le contenu de la table mais sa structure

    pour obtenir la valeur d'un champ on met en oeuvre dao.recordset

    encore faut il s'avoir de quelle ligne de la table on parle

    la première sera atteinte par monrecordset.movefirst

    mais si la table fait 8317418 enregistrements on a très peu de chance d'obtenir l'enregistrement souhaité

    aussi généralement on met un filtre sur la table
    par exemple
    macléprimaire=XX
    Elle est pas belle la vie ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    ok je comprend

    neanmoins je souhaite me balader sur plusieurs table.
    pour le moment , mon programme parcours 4 table cherche tout les nom de champs qui commence par des chiffre, recupere le nom de champ enleve les chiffre et stock le résultat dans un variable. j'aimerai que cette variable soit rajouter dans la table dans un champ prévu a cette effet .
    voici mon code se sera plus explicite :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    reg.Pattern = "^[0-9]{1,3}"
    reg.IgnoreCase = True
    
    
    For Each tbd In Db.TableDefs
    
        If tbd.Name = "Fiche_recapitulative_SMS" Or tbd.Name = "Repertoire_SIM_et_mobile" Or tbd.Name = "SMS_MO" Or tbd.Name = "USSD" Then
             For j = 0 To tbd.RecordCount - 1
                       
                    champ = ""   
                
                    For i = 0 To tbd.Fields.Count - 1
                  
                    If reg.test(tbd.Fields(i).Name) = True Then
                    
                     
                        If tbd.Fields(i).Value = True Then
                        
                           x = reg.Replace(tbd.Fields(i).Name, "")
                            
                           champ = x & "/" & champ
                            
                        End If
                    End If
                    
                Next i
                
                'num_tris = tbd.Fields(0).Value
             
                Mareq = "update " & tbd.Name & " set Gestion_des_caracteres ='" & champ & "';"
                
                'Db.Execute (Mareq)
                
             'Next j
        End If
    Next tbd
    c'est la ligne en bleu qui me pose probleme ...
    j'aimerai que mon update n'update que la ligne en cours, donc je dois aussi a priori stocké la valeur de la clé primaire de la ligne
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Re,

    Je comprends de moins en moins

    Tu veux sur chacune des 4 tables :
    1 - parcourir les enregistrements
    2- si l'un des champs de cet enregistrement a un nom commancant par un chiffre
    3- si ce champ a la valeur True

    Et dans ce cas tu veux faire quoi ?

    De toute façon, comme expliquer par Random, l'object tabledef ne contient aucunes données, uniquement la structure de la table. Pour regarder les données il te faut utiliser un objet Recordset.

    Tabldef correspond aux infos qui te sont accessible en mode modification/création des table
    Recordset correspond au infos qui te sont accessible en mode ouverture des tables.

    Explique bien ce que tu veux faire.

    A+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    mon code est la
    je veux prendre le nom des champs de ces 4 table qui commence par des chiffres

    12 a 13 b 14 c 15 d

    Si la valeur du champ courant est egale a true :

    j'extrait la partie du nom du champ sans le chiffre que je stocke dans une variable

    s = a , s = b , s = c , s = d successivement
    puis a la fin de chaque ligne,
    x = x & s

    donc x sera egale a : abcd

    puis je veux updater un champ de la ligne courante par x.

    je parcours donc : toute les table, tout les enregistrelement, tout les nom de champs, toute les valeurs des champs . dou mon besoin de tabledef
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Citation Envoyé par dyree
    je parcours donc : toute les table, tout les enregistrelement, tout les nom de champs, toute les valeurs des champs . dou mon besoin de tabledef
    NON d'ou ton besoin de Recordset !

    Modifie tu la structure d'une table ? Non => pas de tabledef !



    teste donc ça plustôt et dis nous si c'est ce que tu veux faire :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    reg.Pattern = "^[0-9]{1,3}"
    reg.IgnoreCase = True
    Dim Rs As DAO.Recordset
     
     
    For Each tbd In Db.TableDefs
     
        If tbd.Name = "Fiche_recapitulative_SMS" Or tbd.Name = "Repertoire_SIM_et_mobile" Or tbd.Name = "SMS_MO" Or tbd.Name = "USSD" Then
             Set Rs = CurrentDb.OpenRecordset(tbd.Name, dbOpenDynaset)
             Do Until Rs.EOF = True
     
                    Champ = ""
     
                    For I = 0 To Rs.Fields.Count - 1
     
                    If reg.test(Rs(I).Name) = True Then
                        If Rs(I).Value = True Then
     
                           x = reg.Replace(Rs.Fields(I).Name, "")
     
                           Champ = x & "/" & Champ
     
                        End If
                    End If
     
                    Next I
                    Rs.Edit
                    Rs("Gestion_des_caracteres") = Champ
                    Rs.Update
     
     
             Loop
        End If
    Next tbd
    Set Rs = Nothing
    A+

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    merci beaucoup , cela fonctionne
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    en fait ca bloque, il n'avance pas dans les numero de tri malgré le do until rs.eof

    il fait le 1er a l'infini je ne comprend pas .
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Oupssssssss

    Il faut ajouter un juste avant le loop

    Dsl

    A+

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

Discussions similaires

  1. [Question débutant] Comment obtenir le rendu visuel de plant vs zombie ou castle crashers
    Par Brotherarmy dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 08/05/2010, 09h09
  2. Réponses: 13
    Dernier message: 06/07/2006, 11h25
  3. Débutante Comment récuperer la valeur d'un jcombobx
    Par naima2005 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 09/06/2006, 12h20
  4. Réponses: 5
    Dernier message: 30/05/2006, 12h29
  5. [C#][Débutant] Comment récuperer la valeur d'une colonne d'une grille
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/04/2006, 05h40

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