Assigner des valeurs d'un recordset

Résolu
ronanry Messages postés 190 Date d'inscription lundi 25 novembre 2002 Statut Membre Dernière intervention 22 décembre 2009 - 19 nov. 2008 à 20:01
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 - 20 nov. 2008 à 19:14
Bonjour a tous,

petite question sur l'utilisation de la fonction eval (je suis en vba sous access)
Posons tout d'abord les hypotheses :

soit le code suivant

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    dim maquery as string

    maquery = "select champ1,champ2 from matable where id=1"
    Set db = CurrentDb
    Set rs = db.OpenRecordset(MaQuerie)
    rs.OpenRecordset
    forms!form1.champ1 = rs!champ1
    forms!form1.champ2 = rs!champ2

avec champ1 et champ2 prséent sur mon form1, jusque la rien de bien compliqué me direz vous.

Maintenant si je veux le meme code mais avec 25 champs (et que les 25 champs soit définis sur mon form1)
maquery devient donc :
maquery = "select champ1,champ2,champ3,champ4,champ5...., champ25 from matable where id=1"
et l'assignation des variables en bas devient d'autant plus longues
    forms!form1.champ1 = rs!champ1

    forms!form1.champ2 = rs!champ2
    forms!form1.champ3 = rs!champ3

    forms!form1.champ4 = rs!champ4
    .....
    forms!form1.champ25 = rs!champ25

   
pour faciliter la chose j'ai voulu pondre un truc comme ca :

for each elem in rs.fields
    eval("forms!form1." & elem & " = rs!" & elem)
next

vous vous doutez que si je poste ce message c'est parce que ca n'a pas voulu marcher :D

en fait eval fait le test de savoir si forms!form1.champ1 = rs!champ1 et n'assigne pas rs!champ1 a mon champ sur mon formulaire...

quelqu'un aurait il une idée brillante ?

Merci d'avance

4 réponses

cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
19 nov. 2008 à 20:38
Bonjour ronanry


Je n'ai malheureusement pas Access sur ce poste, donc je n'ai pas pu vérifier si le code ci-dessous est correct du point de vue de la syntaxe, et s'il est pertinent pour le problème posé.

Je te fais deux propositions honnêtes :

-     Eval("forms1." & elem.Name & " = rs!" & elem.Name)
-     Eval("forms1." & elem.Name & ".Value = rs!" & elem.Name & ".Value")

Si ça ne fonctionne pas, tu peux essayer de te passer d'Eval, en utilisant la collection Controls :

For Each elem In rs.Fields
   Me.Controls(elem.Name).Value = elem.Value
Next

Si rien ne fonctionne, c'est que, décidément, une idée brillante n'est pas dans mes possibilités

Amicalement
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 nov. 2008 à 20:24
salut,

euh ... pour éviter tout doute de suite :
"champ1" (et les autres), c'est par exemple LE NOM de d'une textbox? ou une valeur....

eval va par exemple retourne la valeur 5 pour "text1.value + text2.value", contenant respectivement "1" et "4"

si tes champs s'appellent vraiment "champ1 2 3 ..." dans la base, alors toute ta méthode est fausse....

çà ne sera pas
rs!NOM_HASARDEUX_N
mais
rs.fields("champ" & N)

si c'est des zones de texte (par exemple) qui contiennent des valeurs, celles-ci étant le NOM du champs, çà sera bien

rs.fields(champN.Text)
le contenu donc...







<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
ronanry Messages postés 190 Date d'inscription lundi 25 novembre 2002 Statut Membre Dernière intervention 22 décembre 2009
20 nov. 2008 à 13:18
Merci Pcpt et Orohena pour vos reponses

Pcpt j'suis pas sur qu'on se soit bien compris
Orohena :
- le probleme d'eval est que , si tu met le code que tu met (ou le mien) eval te retourne true ou false en fait....
il fait le test booleen et non l'assignation de variable
- Ton idée de me.controls me plait assez...vais tester ca de suite (merci d'y avoir penser pour moi :) ... on est a 3 a planché sur le sujet avec 2 autres informaticiens et on voyait vraiment pas comment le faire :p)

le pire c'est que ca marche !!!!!

BRAVO A TOI

sur votre formulaire, definissez 2 champ texte nommé objet et statut
dans une fonction mettez ceci
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim MaQuery As String

    MaQuery = "select objet,statut from liste_demande where id=1"
    Set db = CurrentDb
    Set rs = db.OpenRecordset(MaQuery)
    rs.OpenRecordset
   
    For Each elem In rs.Fields
        Me.Controls(elem.Name).Value = elem.Value
    Next

et voila....je me repete mais : bravo a toi
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
20 nov. 2008 à 19:14
C'est cool

A bientôt
0
Rejoignez-nous