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 :

Affecter le résultat d'une requête à une variable


Sujet :

Access

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut Affecter le résultat d'une requête à une variable
    Salut à tous

    j'éspère que je poste au bonne endroit (je suis tout nouveau)

    Alors voilà mon problème

    J'essaye d'affecter le résulta d'une requette à une variante afin d'uttiliser la valeur obtenu.
    Le résulta n'a qu'une réponse possible.

    Je pense qu'il faut soit que j'uttilise une Commande RunSQL ou Recordset mais je ne sais pas du tout les uttiliser.

    Quelqu'un pourrait m'aider

  2. #2
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    A ma connaissance tu ne peux pas faire de runSQL ou truc comme ca parce que ca sert a executer une ligne de code mais ca ne renvoit rien! (ca sert donc pour INSERT, DELETE... mais pas SELECT)

    Il faut donc utiliser un recordset, tu le definis, ensuite ca te renvoie une liste de records (les resultats de la requete). Il faut apres parcourir les records (le premier s'il n'y en a un) et recuperer la valeur du champ que tu veux avec "nomdurecordset!nomduchamp"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim sqltext As String
    Dim rst As Recordset
     
    sqltext = "SELECT * FROM Q_ManufactureOrder_HotStamping_all WHERE (Q_ManufactureOrder_HotStamping_all.WeekNumber = " & Forms!F_New_MO_HotStamping!WeekNumber & " AND Q_ManufactureOrder_HotStamping_all.OrderofProduction =" & Forms!F_New_MO_HotStamping!OrderOfProduction & ");"
     
    Set rst = CurrentDb.OpenRecordset(sqltext)
     
    rst.Movefirst 'se place sur le premier record
    valeurarecuperer = rst!nomduchamp
    rst.Close 'ne pas oublier de refermer le recordset apres
    Si tu veux parcourir les autres records, il faut faire une boucle par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rst.Movefirst 
    While not rst.EOF ' tant que c'est pas la fin du recordset
    'faire ce que t'as a faire
    rst.Movenext
    Wend

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Merçi Catoucat mais je n'y arrive toujours pas

    Voilà ma requette

    En sql d'origine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T_1_Correspondance_matériel_fil.Galet, T_1_Correspondance_matériel_fil.Diamètre_du_fil, T_1_Correspondance_matériel_fil.Valeur_du_plat 
    FROM T_1_Correspondance_matériel_fil 
    GROUP BY T_1_Correspondance_matériel_fil.Galet, T_1_Correspondance_matériel_fil.Diamètre_du_fil, T_1_Correspondance_matériel_fil.Valeur_du_plat 
    HAVING (((T_1_Correspondance_matériel_fil.Diamètre_du_fil)=Formulaires![Matériel des ressorts]![Diamètre du fil]) 
    And ((T_1_Correspondance_matériel_fil.Valeur_du_plat)=Formulaires![Matériel des ressorts]![Valeur du plat]));

    En sql pour VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim StrSql As String
    StrSql = "SELECT T_1_Correspondance_matériel_fil.Galet, T_1_Correspondance_matériel_fil.Diamètre_du_fil, " & _
             "T_1_Correspondance_matériel_fil.Valeur_du_plat FROM T_1_Correspondance_matériel_fil " & _
             "GROUP BY T_1_Correspondance_matériel_fil.Galet, T_1_Correspondance_matériel_fil.Diamètre_du_fil, " & _
             "T_1_Correspondance_matériel_fil.Valeur_du_plat HAVING (((T_1_Correspondance_matériel_fil.Diamètre_du_fil)=Formulaires![Matériel " & _
             "des ressorts]![Diamètre du fil]) " & _
             "And ((T_1_Correspondance_matériel_fil.Valeur_du_plat)=Formulaires![Matériel des ressorts]![Valeur " & _
             "du plat]));
    J'aimerai affecter la valeur par un truc du genre

    Toto.Value = StrSql

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Citation Envoyé par FreeAdan
    ...
    J'aimerai affecter la valeur par un truc du genre

    Toto.Value = StrSql
    Hello,

    Pas le choix, il faut passer par un recordset ...

  5. #5
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    Deja le probleme c'est que ta requete va erenvoyer 3 champs (T_1_Correspondance_matériel_fil.Galet, T_1_Correspondance_matériel_fil.Diamètre_du_fil, T_1_Correspondance_matériel_fil.Valeur_du_plat) et potentiellement plusieurs enregistrements! (il ne sait pas a l'avance qu'il n'y en a qu'un...)

    Du coup tu es oblige de faire ceci:


    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
     
    Dim sqltext As String
    Dim rst As Recordset
     
    sqltext = "SELECT T_1_Correspondance_matériel_fil.Galet, T_1_Correspondance_matériel_fil.Diamètre_du_fil, " & _
             "T_1_Correspondance_matériel_fil.Valeur_du_plat FROM T_1_Correspondance_matériel_fil " & _
             "GROUP BY T_1_Correspondance_matériel_fil.Galet, T_1_Correspondance_matériel_fil.Diamètre_du_fil, " & _
             "T_1_Correspondance_matériel_fil.Valeur_du_plat HAVING (((T_1_Correspondance_matériel_fil.Diamètre_du_fil)=Formulaires![Matériel " & _
             "des ressorts]![Diamètre du fil]) " & _
             "And ((T_1_Correspondance_matériel_fil.Valeur_du_plat)=Formulaires![Matériel des ressorts]![Valeur " & _
             "du plat]));"
     
    Set rst = CurrentDb.OpenRecordset(sqltext)
     
    rst.Movefirst 'se place sur le premier record
    Galet.value = rst!Galet
    Diametre.Value = rst!Diametre
    Valeur_du_plat.Value=rst!Valeur_du_plat 
     
    rst.Close 'ne pas oublier de refermer le recordset apres
    Comme ca tu auras dans Galet, Diametre et Valeur_Du_Plat les 3 valeurs que tu voulais recuperer

  6. #6
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Ca ne marche toujours pas dans mon projet initial alors j'ai créer un Bidon tous soft mais j'ai toujours le même prob.

    Voilà le dernier code testé
    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
     
    Private Sub Bidon1_Change()
     
    Dim rst As Recordset
    Dim StrSql As String
    StrSql = "SELECT T_bidon0.Bidon22 " & _
             "FROM T_bidon0 " & _
             "GROUP BY T_bidon0.Bidon11, T_bidon0.Bidon22 " & _
             "HAVING (((T_bidon0.Bidon11)=Formulaires!F_bidon!Bidon1));"
     
     
    Set rst = CurrentDb.OpenRecordset(StrSql)
    rst.MoveFirst 'se place sur le premier record
    Bidon2.Value = rst!bidon22
    rst.Close 'ne pas oublier de refermer le recordset apres
    End Sub
    J'ai toujours cette ligne qui cause problème :

    Set rst = CurrentDb.OpenRecordset(StrSql)
    Erreur d'exécution '3061'

    Trop peu de paramètres. 1 attendu.


    Quand j'enlève le HAVING il n'y à pas de bug sauf que le résulta n'est pas celui souhaiter



    Merçi pour votre aide

  7. #7
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    En fait comme il y a des guillemets au debut et a la fin, il interprete tout comme du texte et n'essaye donc pas de savoir ce que c'est "Formulaires!F_bidon!Bidon1" au milieu. Du coup quand il veut executer le SQL, il lui manque cette variable "Formulaires!F_Bidon!Bidon1"!

    Pour regler ca il concatener (il va mettre a la suite ce que tu mets avant et apres le &) le texte et la variable avec le symbole &:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "HAVING (((T_bidon0.Bidon11)=" & Formulaires!F_bidon!Bidon1 & "));"
    Comme tu refermes les guillemets avant et les rouvres apres, il saura qu'il doit interpreter ce qu'il y a entre les & et ira donc chercher la valeur ;-) Du coup quand il essayera de l'executer il fera bien HAVING bidon11=12 par exemple! Dis moi si ca marche

  8. #8
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    toujours rien

    a croire qu'il est impossible de récuper la valeur d'une simple requête

  9. #9
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    De quel type est le champ Bidon11 ?

  10. #10
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Text

    Personne aurrait un exemple d'une requête avec un having qui marche ??

  11. #11
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    J'ai essayer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim sqltext As String
    Dim rst As Recordset
     
    sqltext = "SELECT * FROM T_1_Correspondance_matériel_fil WHERE (T_1_Correspondance_matériel_fil.diamètre_du_fil = " & Forms![Matériel des ressorts]!Diamètre_du_fil & " AND T_1_Correspondance_matériel_fil.Valeur_du_plat = " & Forms![Matériel des ressorts]!Valeur_du_plat & ");"
     
    Set rst = CurrentDb.OpenRecordset(sqltext)
     
    rst.MoveFirst 'se place sur le premier record
    valeurarecuperer = rst!nomduchamp
    rst.Close 'ne pas oublier de refermer le recordset apres
    Mais il me mais une erreur parce que les valeurs trouvées ont des virgules

  12. #12
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour,

    Et un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaVariable = DLookUp("MonChamp","MaRequête")
    ?

    Bon courage,

    pgz

  13. #13
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Ca ne marche pas non plus

  14. #14
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    Citation Envoyé par FreeAdan
    J'ai essayer ça :

    Mais il me mais une erreur parce que les valeurs trouvées ont des virgules
    Tu as bien defini ta variable comme etant un Single ou Double pour qu'on puisse lui affecter une valeur avec une virgule? Il te met quoi comme erreur au juste?

  15. #15
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    je l'avais mis en string j'essaie dés que j'ai le temps

    Merçi

  16. #16
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Marche non plus

    Erreur 13
    Erreur d'imcompatibilité

  17. #17
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    Et de quel type est le champ de la table que tu veux recuperer? change le en Single ou Double

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/10/2010, 10h15
  2. Réponses: 3
    Dernier message: 22/08/2010, 17h40
  3. Réponses: 2
    Dernier message: 05/03/2010, 14h15
  4. Réponses: 1
    Dernier message: 08/01/2010, 13h46
  5. Réponses: 1
    Dernier message: 11/02/2009, 06h33

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