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 :

affecter le resultat d'une requete à une variable


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 29
    Points
    29
    Par défaut affecter le resultat d'une requete à une variable
    Je ne souhaite pas compter le nombre de résultat, mais stocker le résultat,quelle mthode faut-il utilisé! je cherche depuis hier, je suis un peu à cours d'idée!

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set rst = CurrentDb.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly) 'dbReadOnly signifie que l'on est en lecture seul
        v = rst.RecordCount 'utiliser pour compter! 
        Debug.Print v

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Qu'entends-tu par seulement 'stoker le resultat' ?

    Un objet recordset est un ensemble d'enregistrement que tu peux parcourrir (méthode : MoveFirst, MoveNext, MovePrevious, MoveLast, FindFirst), ou comme là compter donc tu as déjà un résultat qui correspond à l'instruction SQL que tu as demandée.

    Si tu veux enregistrer l'ensemble des enregistrements, tu peux les mettre dans une table temporaire ou dans un fichier selon tes besoins.

    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Dans ce cas ci, la "réponse" est une seul valeur présent dans une table, il ne peut y avoir de doublon. je souhaite que la variable v vaut "ce qui est stocké dans la table. je ne sais pas quelle méthode utiliser pour ça!

    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
    Function RecupèreValeurDansTabletemp(AppareilATester)
        Dim rst As DAO.Recordset 'DAO.Recordset est un sous objet DAO et est un objet representant un enregistrement
                                 'c'est à dire une variable pouvant stocker le resultat d'une requette sql
        Dim sSQL As String 'sSQL est une variable pouvant stocker plusieurs charactères: ici une requete
        Dim v As String 'Stock le nombre d'occurences trouvées lors de la recherche
     
        sSQL = "SELECT TableTemp.TempNFab " & _
        " FROM TableTemp" & " WHERE (((TableTemp.Appareil)='" & AppareilATester & "'));"
     
        Debug.Print sSQL 'Affiche la requete dans la fenètre de Débogage
     
        Set rst = CurrentDb.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly) 'dbReadOnly signifie que l'on est en lecture seul
        v = rst.RecordCount
        Debug.Print v
        rst.Close 'On ferme le recordset pour liberer la memoire
        End Function
    Il s'agit plus précisèment d'un tableau! je recherche dans le champA le nom d'un appareil, et je souhaite récupèrer le contenu du ChampB.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Tu fais le plus difficile et tu te blique sur le plus simple.

    Si tu est certain d'avoir une seule ligne tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Debug.Print rst("TempNFab")
    Si tu as par contre plusieurs lignes alors tu fais une boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Set rst = CurrentDb.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly) 'dbReadOnly signifie que l'on est en lecture seul
        v = rst.RecordCount 'utiliser pour compter! 
        Debug.Print v
        Do Until rst.Eof
             Debug.Print rst("TempNFab")
     
             rst.MoveNext
        Loop

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    euh je suis pas sûre de comprendre!

    debug.print sert à afficher une valeur dans la fenêtre de deboguage!
    Si je veut que cette valeur soit stocké dans v! comment dois-je procéder!

    PS: et oui ce qui paraît le plus facile ne l'est pas forcément!

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par thor18 Voir le message
    Si je veut que cette valeur soit stocké dans v! comment dois-je procéder!
    Eh bien , tu remplacer Debug.Print par ta variable qui devra être un tableau ou une variable adaptée si tu as plusieurs lignes par ta requête.

    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
       dim MonTab() as variant, i as integer
      Set rst = CurrentDb.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly) 'dbReadOnly signifie que l'on est en lecture seul
        v = rst.RecordCount 'utiliser pour compter! 
        Debug.Print v
        Redim MonTab(v)
        i=0
        Do Until rst.Eof
             MonTab(i) rst("TempNFab")
     
             i=i+1
             rst.MoveNext
        Loop

  7. #7
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    842
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 842
    Points : 919
    Points
    919
    Par défaut
    Salut,

    Tu veux utiliser cette variable dans un autre formulaire ou un état ?

    Si c'est cela, il te faut déclarer cette variable dans un module et la déclarer en Global et de plus pas en String qui est une variable chaîne, mais en Integer


  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par jean-paul lepetit Voir le message
    [CODE]Global V as Integer
    Attention là. Il n'as pas dit que sa variable été un entier. Est si c'est un tableau d'entier et de string?

  9. #9
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    842
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 842
    Points : 919
    Points
    919
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       v = rst.RecordCount 'utiliser pour compter!
    RecordCount peux renvoyer un String.....?

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    RecordCount peux renvoyer un String.....?
    Qu'on ne met pas dans un integer. Je crois...?

  11. #11
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    842
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 842
    Points : 919
    Points
    919
    Par défaut
    Excuses moi, mais tu me mets le doute....

    le recordcount te renvoies bien un entier, non?....

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Oui le RecordCount renvoie bien un entier. Je crois qu'on ne se comprend pas
    Son problème c'est
    je recherche dans le champA le nom d'un appareil, et je souhaite récupèrer le contenu du ChampB.
    Son RecordSet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    sSQL = "SELECT TableTemp.TempNFab " & _
        " FROM TableTemp" & " WHERE (((TableTemp.Appareil)='" & AppareilATester & "'));"
     
        Debug.Print sSQL 'Affiche la requete dans la fenètre de Débogage
     
        Set rst = CurrentDb.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly) 'dbReadOnly signifie que l'on est en lecture seul
        v = rst.RecordCount
    le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        v = rst.RecordCount
    est un exemple qu'il veut remplacer par la bonne formule lui permettant de récupérer les lignes renvoyées par son RecordSet.

    Voila ce que j'ai en tout cas compris.

  13. #13
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 155
    Points : 196
    Points
    196
    Par défaut
    Bonjour,

    Je me permets de faire irruption dans cette discussion car elle concerne une sujet que je traite fréquemment. VBA propose la méthode GetRows pour ranger dans une seule variable tout un jeu d'enregistrements. Petit exemple :
    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
     
    Dim rcs As RecordSet, VarEnreg as Variant, LgNbLignes  As Long
    '
    Set rcs = CurrentDb.OpenRecordset(Définition SQL de la requête)
    With rcs
       If Not .EOF Then
          '
          'petite gymnastique pour récupérer le nombre d'enregistrements
          '
          .MoveLast
          .MoveFirst
          LgNbLignes=.RecordCount
          '
          'récupération du jeu d'enregistrements dans la variable VarEnreg
          '
          VarEnreg=.GetRows(LgNbLignes)
       End If
       .Close
    End With
    VarEnreg ainsi renseigné devient un tableau variant qui s'exploite de cette façon :
    VarEnreg(j,i) retourne la valeur du jème champ du ième enregistrement

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Merci ça fonctionne à présent.
    voici le code fonctionnel

    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
    Function RecupèreValeurDansTabletemp(AppareilATester)
        Dim rst As DAO.Recordset 'DAO.Recordset est un sous objet DAO et est un objet representant un enregistrement
                                 'c'est à dire une variable pouvant stocker le resultat d'une requette sql
        Dim sSQL As String 'sSQL est une variable pouvant stocker plusieurs charactères: ici une requete
        Dim sSQL2 As String
     
        'champ1
        sSQL = "SELECT TableTemp.TempNFab " & _
        " FROM TableTemp" & " WHERE (((TableTemp.Appareil)='" & [AppareilATester] & "'));"
        Debug.Print sSQL 'Affiche la requete dans la fenètre de Débogage
     
        Set rst = CurrentDb.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly) 'dbReadOnly signifie que l'on est en lecture seul
        TmpNFab = rst("TempNFab")
        Debug.Print TmpNFab
        rst.Close 'On ferme le recordset pour liberer la memoire
     
     
        'champ2
        sSQL2 = "SELECT TableTemp.TempNRef " & _
        " FROM TableTemp" & " WHERE (((TableTemp.Appareil)='" & [AppareilATester] & "'));"
        Debug.Print sSQL2 'Affiche la requete dans la fenètre de Débogage
     
        Set rst = CurrentDb.OpenRecordset(sSQL2, dbOpenForwardOnly, dbReadOnly) 'dbReadOnly signifie que l'on est en lecture seul
        TmpNRef = rst("TempNRef")
        Debug.Print TmpNRef
        rst.Close 'On ferme le recordset pour liberer la memoire
     
    End Function
    Mais j'ai une autre requete qui me pose problème!
    La variable ZoneTexte contient le contenu d'une zone de texte qu'édite un utilisateur. Cela fonctionne presque tout le temps; sauf quand on entre des caractère spéciaux! come ' _ # etc avez vous déjà rencontré ce genre de problème!

    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
    Sub AjouteEntrerDansTablePb(NUMFAB, NREF, ZoneTexte)
     
    'Déclaration des variables
    Dim sSQL As String 'sSQL est une variable pouvant stocker plusieurs characteres: ici une requete
    Dim qdf As Variant
    Dim bds As Database
    Dim dateActuel As Date
    Dim TableZ As String
     
    dateActuel = Now 'Affecte à la variable dateActuel l'heure du système
    TableZ = "Problèmes_rencontrés"
     
    'requête SQL
    sSQL = "INSERT INTO " & [TableZ] & " " & _
               "(NUM_FAB, NUM_REF, DATE_AJOUT,Description_problème) " & _
               "VALUES ('" & [NUMFAB] & "', '" & [NREF] & _
               "', '" & [dateActuel] & ",' " & [ZoneTexte] & ");"
     
    'Afficher Le Resultat Dans Debug : CLICK DROIT BARRE OUTILS : ACTIVER DEBUGAGE : CLIQUER SUR FENETRE EXECUTION... POUR VOIR LE RESULTAT
    Debug.Print ZoneTexte
    Debug.Print sSQL
     
    CurrentDb.Execute sSQL, dbFailOnError 'execute la requete sSQL
    End Sub

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/09/2010, 18h32
  2. affecter le résultat d'une requete à une variable globale
    Par Giuseppe24 dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 26/03/2010, 14h13
  3. Resultat d'une requete dans variable
    Par dashblade dans le forum IHM
    Réponses: 3
    Dernier message: 09/06/2008, 09h56
  4. affecter le résultat d'une requete à une comboBox
    Par freestyler dans le forum Delphi
    Réponses: 5
    Dernier message: 25/10/2006, 15h37
  5. Envoyer une requete à une base Oracle
    Par chiheb dans le forum Oracle
    Réponses: 2
    Dernier message: 18/10/2006, 15h39

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