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 :

resultat requete dans variable texte


Sujet :

VBA Access

  1. #1
    Membre du Club Avatar de fomy
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 96
    Points : 56
    Points
    56
    Par défaut resultat requete dans variable texte
    Bonjour à tous...
    Alors voilà j'ai une table table_prin dans laquelle on trouve (entre autres)
    UID | Num_immo_pc

    je veux récuperer dans une variable texte tt les numeros de pc (num_immo_pc) dont l'uid est = à :
    la requete je l'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Num_immo_pc FROM table_prin WHERE ((UID)=getguid());
    j'ai cherché sur ce forum, je me suis donc tourné vers les recordset et j'essaye donc cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim sSQL As String
    Dim RS As Recordset
    sSQL = " SELECT Num_immo_pc FROM table_prin WHERE ((UID)=getguid());"
    Set RS = CurrentDb.OpenRecordset(sSQL)
    mais j'ai un jolie méssage d'erreur :
    Erreur d'éxécution '13' :
    Incompatibilité de type

    Il faudrat ensuite que je puisse récupérer le contenu du recordset dans une variable texte...
    D'avance merci de votre aide
    Petite précision, il peut y avoir plusieurs lignes...

  2. #2
    Membre actif Avatar de Gary_Stoupy
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 244
    Points : 232
    Points
    232
    Par défaut
    Bonjour,

    Que représente getguid ? Est-ce une fonction que tu veux appeler ?

  3. #3
    Membre du Club Avatar de fomy
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 96
    Points : 56
    Points
    56
    Par défaut
    oui c'est une fonction qui me retourne guid qui est une variable global

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public guid As String
    ...
    ...
    ...
    Public Function GetGuid() As String
    GetGuid = guid
    End Function

  4. #4
    Membre du Club Avatar de fomy
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 96
    Points : 56
    Points
    56
    Par défaut
    Ps: je precise que la requete fonctionne tres bien comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sSQL = "select table_prin.num_immo_pc from table_prin where table_prin.uid =getguid();"
    docmd.runsql sSQL
    mais alors comment récupérer le résultat sous forme de texte ?

  5. #5
    Membre du Club Avatar de fomy
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 96
    Points : 56
    Points
    56
    Par défaut
    Je viens de trouver un autre post sur ce forum, j'ai adapté le code et cela fonctionne :
    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
    Dim sSQL As String
                Dim listmat As String
                Dim RS As ADODB.Recordset   'permet d'exécuter des requetes de type SELECT
                Dim CON_Connex As ADODB.Connection  'Permet d'établr une liason avec la BD
     
                Set CON_Connex = CurrentProject.Connection  'on ouvre la connection à la base de données
                Set RS = New ADODB.Recordset    'on initialise le RS
     
                sSQL = "select num_immo_pc from table_prin where uid = '" & Me.fuid & "'"   'on initialise la requette sql
     
                RS.Open sSQL, CON_Connex, adOpenStatic, adLockOptimistic    'on ouvre le RS et on execute la requette
     
                If (RS.RecordCount > 0) Then    'on vérifie qu'il y ai des enregistrements
                    'on ce déplace sur le premier enregistrement
                    RS.MoveFirst
                    'on affect le résultat au champ
                    listmat = RS("Num_immo_pc")
                Else
                    MsgBox "Aucun enregistrement trouvé"
                End If
     
                MsgBox listmat
     
                'on ferme le RS
                RS.close
                Set RS = Nothing
                'on ferme la connection à la BD
                Set CON_Connex = Nothing
    Seul soucis, je ne récupere que le premier enregistrement ?
    comment tous les récuperer ? je creuse sur un autre post que j'ai vu ou il est évoquer :
    MoveFirst => se place sur le premier
    MoveLast => dernier
    MoveNext => suivant
    MovePrev (?) => precedant

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Personnellement, je ne m'y serai pas pris comme ça, mais plutôt de la sorte :
    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
     
    Dim sSQL As String
    Dim listmat As String
    Dim RS As DAO.Recordset   'permet d'exécuter des requetes
     
    sSQL = "select num_immo_pc from table_prin where uid = '" & Me.fuid & "'"   'on initialise la requette sql    
     
    Set RS = CurrentDb.OpenRecordset(sSQL) 'Ouverture du Rst sur la requête SQL
     
    'teste la présence d'enregistrements dans le Rst
    If (RS.RecordCount > 0) Then    
         RS.MoveFirst 'se positionne sur le premier enregistrement
         listmat = RS("Num_immo_pc") 'récupère le premier numéro
     
         'tant que le Rst n'est pas arrivé à la fin
         While RS.EOF = False 
              RS.MoveNext 'Passe à l'enregistrement suivant
              listmat = listmat & " " & RS("Num_immo_pc") 'ajoute le numéro à la suite 
         Wend
    Else
          MsgBox "Aucun enregistrement trouvé"
    End If
     
    MsgBox listmat
     
    'on ferme le Rst
    RS.close
    Set RS = Nothing
    Voilà, teste et tiens nous au courant

    Lyk

  7. #7
    Membre du Club Avatar de fomy
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 96
    Points : 56
    Points
    56
    Par défaut
    Merci,
    chez moi lorsque je mets
    Dim RS as DAO.Recordset j'ai une erreur " Type définit par l'utilisateur non définie" j'ai donc essayé avec
    Dim RS as recordset, mais alors ma requete n'est plus correctement traitée, et je me retrouve avec un message d'erreur :
    Incompatibilité de type sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set RS = CurrentDb.OpenRecordset(sSQL) 'Ouverture du Rst sur la requête SQL
    la seule maniere que j'ai de faire fonctionné tout ca c'est d'utiliser :
    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
    Dim sSQL As String
                Dim listmat As String
                Dim RS As ADODB.Recordset   'permet d'exécuter des requetes de type SELECT
                Dim CON_Connex As ADODB.Connection  'Permet d'établr une liason avec la BD
     
                Set CON_Connex = CurrentProject.Connection  'on ouvre la connection à la base de données
                Set RS = New ADODB.Recordset    'on initialise le RS
     
                sSQL = "select num_immo_pc from table_prin where uid = '" & Me.fuid & "'"   'on initialise la requette sql
     
                RS.Open sSQL, CON_Connex, adOpenStatic, adLockOptimistic    'on ouvre le RS et on execute la requette
     
                If (RS.RecordCount > 0) Then    'on vérifie qu'il y ai des enregistrements
                    'on ce déplace sur le premier enregistrement
                    RS.MoveFirst
                    'on affect le résultat au champ
                    listmat = RS("Num_immo_pc")
                Else
                    MsgBox "Aucun enregistrement trouvé"
                End If
     
                MsgBox listmat
     
                'on ferme le RS
                RS.close
                Set RS = Nothing
                'on ferme la connection à la BD
                Set CON_Connex = Nothing
    Il me reste alors a traiter le recordset en boucle jusqu'au dernier enregistrement, je suis en train d'essayé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    If (RS.RecordCount > 0) Then    'on vérifie qu'il y ai des enregistrements
                    'on ce déplace sur le premier enregistrement
                    RS.MoveFirst
                    listmat = RS("Num_immo")
                    'on affect le résultat au champ
                    While RS.EOF = False
                        RS.MoveNext
                        listmat = listmat & ", " & RS("Num_immo")
                   Wend
     
                Else
                    MsgBox "Aucun enregistrement trouvé"
                End If
    mais a priori il doit aller une fois de trop loin car j'ai le message suivant :
    Either BOF or EOF is True, or the current record has been deleted....
    Encore merci d'avance

  8. #8
    Membre du Club Avatar de fomy
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 96
    Points : 56
    Points
    56
    Par défaut
    en trifouillant un peu j'ai trouvé ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    If (RS.RecordCount > 0) Then    'on vérifie qu'il y ai des enregistrements
                    'on ce déplace sur le premier enregistrement
                    RS.MoveFirst
     
                    listmat = RS("Num_immo")
                    'on affect le résultat au champ
                    While RS.AbsolutePosition < RS.RecordCount
                        RS.MoveNext
                        listmat = listmat & ", " & RS("Num_immo")
                    Wend
     
                Else
                    MsgBox "Aucun enregistrement trouvé"
                End If
    Et le pire c'est que ca marche
    si il y a mieux je suis preneur

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par fomy Voir le message
    Il me reste alors a traiter le recordset en boucle jusqu'au dernier enregistrement, je suis en train d'essayé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    If (RS.RecordCount > 0) Then    'on vérifie qu'il y ai des enregistrements
                    'on ce déplace sur le premier enregistrement
                    RS.MoveFirst
                    listmat = RS("Num_immo")
                    'on affect le résultat au champ
                    While RS.EOF = False
                        RS.MoveNext
                        listmat = listmat & ", " & RS("Num_immo")
                   Wend
     
                Else
                    MsgBox "Aucun enregistrement trouvé"
                End If
    mais a priori il doit aller une fois de trop loin car j'ai le message suivant :
    Either BOF or EOF is True, or the current record has been deleted....
    Encore merci d'avance
    Bonjour,
    En fait, l'erreur vient du RS.MoveNext qui n'est pas placé au bon endroit dans la boucle while...
    Le code pour ne pas avoir l'erreur (RS qui va trop loin) est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                    listmat = ""
                    'on ce déplace sur le premier enregistrement
                    RS.MoveFirst
                    While RS.EOF = False
                        listmat = listmat & " -- " & RS("Num_immo")
                        RS.MoveNext
                   Wend
    Avec le Rst qui se déplace après ton affectation, lorsqu'il sera EOF, ce sera détecté, et il sortira de la boucle...

    Lyk

  10. #10
    Membre du Club Avatar de fomy
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 96
    Points : 56
    Points
    56
    Par défaut
    merci, c'est nikel.

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

Discussions similaires

  1. Resultat Requete dans Zone de texte (1 seul enregistrement)
    Par MAIDEL dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/07/2014, 12h40
  2. Resultat requete dans un champ texte
    Par STEPH93 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 29/10/2011, 15h28
  3. Resultat d'une requete dans variable
    Par dashblade dans le forum IHM
    Réponses: 3
    Dernier message: 09/06/2008, 10h56
  4. Réponses: 2
    Dernier message: 07/01/2008, 10h05
  5. Resultat requete dans zone de texte
    Par htaM dans le forum Access
    Réponses: 5
    Dernier message: 29/09/2005, 15h43

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