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

Requêtes et SQL. Discussion :

[VBA DAO] Ajouter un recordset à un autre recordset


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut [VBA DAO] Ajouter un recordset à un autre recordset
    Bonjour,

    J'aimerai savoir s'il est possible d'ajouter le contenu d'un recordset à un autre recordset, sachant qu'ils proviennent tous les deux d'une requête du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table WHERE id=variable
    Etant donné que ces deux recordset possèdent les mêmes champs, j'aimerai pouvoir obtenir un seul recordset

    Ceci est un exemple simplifié, mais en fait dans le cas qui me pose problème, la variable varie en fonction d'une boucle.

    Merci d'avance

    ceuce

  2. #2
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Salut,

    1- Oui tu peux te servir d'un Recordset pour un autre.

    2- Je ne comprend pas très bien ton utilité d'utiliser 2 Recordset, si ces deux sont ici de la même source pourquoi ne pas travaillé sur 1 et récupérer les infos nécéssaires.

    Peux-tu développez ce que tu veux vraiement faire avec les 2.

    Dolphy

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Alors en fait j'exécute une première requête, peu importe la tête qu'elle a, et je stocke le résultat ds un recordset (rs).

    Ensuite j'ai une requête qui doit aller chercher les résultats qui ont une correspondance avec le contenu de rs, donc je pensais faire une requête dans une boucle et additionner les recordset issu de cette dernière requête (rsA). Dans l'idée ce serait comme ça, mais dans le concret je ne sais pas comment ça se passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    While not rs.EOF
         idA=rs.Fields("id")
         sql="SELECT * FROM Table WHERE Table.idA=idA
         rsA=rsA+rsA.Open sql
         rs.MoveNext
    Wend
    rsA va ensuite me servir à faire de même avec une autre requête

    Merci pour ton aide

    ceuce

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    J'ai l'impression qu'il s'agit plutôt d'un Pb qui relève du sous-forum "Requête et SQL".

    Question importante:
    Au final, tous les enregistrements proviennent-ils de la même table ?

    Peut être qu'une jointure pourrait convenir.

    En SQL, connais-tu le principe des jointures ?
    Ici le tutoriel "Maison" : Comprendre les jointures / relations dans Access.

  5. #5
    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
    Je rejoint JBO, à la différence près que je ne parlerais pas de jointure mais d'union. Ceci dit, tu es un peu confus dans ta question, donc on ne sait pas trop. Voici un exemple illustrant mes propos :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Nom  Prenom
    PAUL Marie
    DUPONT Marc
    FREDU Yves



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Matable WHERE Nom LIKE "D*"
    Retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Matable WHERE Nom LIKE "F*"
    Retourne :

    L'union des deux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * FROM Matable WHERE Nom LIKE "D*"
     
    UNION
     
    SELECT * FROM Matable WHERE Nom LIKE "F*"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DUPONT Marc
    FREDU Yves
    Est ce que ça répond à ta question ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Mon message a été déplacé dans ce forum par un modérateur, parceque le problème ne relève pas du pure sql.
    En effet, l'exemple donné par Tofalu ne convient pas

    SELECT * FROM Matable WHERE Nom LIKE "D*"

    UNION

    SELECT * FROM Matable WHERE Nom LIKE "F*"
    car le problème c'est que les valeurs D et F chez moi, sont dans un recordset. Alors ma question c'est, comment parcourir un recordset et en extraire les valeurs qui serviront de critère à ma requête? Et comment insérer ça dans une requête?

    Pour répondre à JBO, les enregistrements sont dans une même table mais le critère pour la requête est représenté par un recordset.

    Ce n'est pas facile d'être clair mais j'espère l'être assez pour que vous compreniez...
    Merci

    ceuce

  7. #7
    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
    Le recordset est basé sur une requête. C'est cette requête qui doit être la source de la deuxième et non pas le recordset.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Je crois que je n'arrive pas bien à exprimer mon problème... J'essai encore une fois :
    Je ne souhaite pas que le 1er recordset soit la source du 2ème comme tu le penses, je veux juste que les id mémorisés par le 1er recordset servent de critère à la requête qui me servira à construire le 2ème recordset.

    merci encore

    ceuce

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par ceuce
    Je crois que je n'arrive pas bien à exprimer mon problème... J'essai encore une fois :
    Je ne souhaite pas que le 1er recordset soit la source du 2ème comme tu le penses, je veux juste que les id mémorisés par le 1er recordset servent de critère à la requête qui me servira à construire le 2ème recordset.
    Qu'est-ce que tu récupères dans ton premier RS (ce que tu appelles <<id mémorisés>>) ?
    Ce sont des noms de champs ou bien des valeurs ?

    Si ce sont des valeurs, alors tu pourrais essayer d'utiliser une sous-requête.
    La commande SQL ressemblerait à ça:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM Table WHERE Table.idA In (SELECT IdA FROM Table... )

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Je suis désolée mais je ne vois pas comment me servir d'une sous-requête...

    Il s'agit bien de la liste de valeurs d'un champ du recordset.
    Comment faire pour extraire cette liste et m'en servir comme critère? Il faut une boucle j'imagine.
    Je ne pense pas pouvoir me servir de sous-requêtes car il faudrait imbriquer un nombre défini de requêtes (correspondant aux nombre d'enregistrements du recordset?)

    Enfin je ne sais pas si j'ai bien tout saisi mais merci quand même

    ceuce

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par ceuce
    Je suis désolée mais je ne vois pas comment me servir d'une sous-requête...


    Citation Envoyé par ceuce
    Il s'agit bien de la liste de valeurs d'un champ du recordset.
    Comment faire pour extraire cette liste et m'en servir comme critère? Il faut une boucle j'imagine.
    Une sous-requête pourrait très bien convenir.
    Citation Envoyé par ceuce
    Je ne pense pas pouvoir me servir de sous-requêtes car il faudrait imbriquer un nombre défini de requêtes (correspondant aux nombre d'enregistrements du recordset?)
    Non.
    Ta sous-requête récupère "d'un seul coup" toutes les valeurs qui t'intéressent, puis cette liste de valeurs est utilisée comme critère dans la requête principale au moyen de l'opérateur IN.

    Citation Envoyé par ceuce
    Enfin je ne sais pas si j'ai bien tout saisi mais merci quand même
    Donne nous le texte ta première requête.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Ma première requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ID_Departement FROM Geo WHERE nomRegion="Bretagne"
    voilà, alors j'attends la suite

    La table s'appelle Localisation, et en effet le critère se fait sur une correspondance avec ID_Departement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT ID_Ville FROM Localisation WHERE ID_Dept=ID_Departement 
    'ID_Departement issu de la première requête
    Merci de m'aider

    ceuce

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Je te propose 2 solutions.

    (1) Solution basée sur une sous-requête:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT Localisation.ID_Ville 
    FROM Localisation 
    WHERE Localisation.ID_Dept 
        IN (SELECT ID_Departement FROM Geo WHERE nomRegion="Bretagne")

    (2) Solution basée sur une jointure entre les 2 tables:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT Localisation.ID_Ville 
    FROM Localisation INNER JOIN Geo 
    ON Localisation.ID_Dept=Geo.ID_Departement 
    WHERE Geo.nomRegion="Bretagne"

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Merci beaucoup! Je suis obligée de partir maintenant, mais j'emmène ça avec moi pour le we.
    Je n'ai internet qu'au boulot, alors je vous tiens au courant mercredi!

    Bon we

    ceuce

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Bonjour à tous,

    Bonne nouvelle, effectivement les sous-requêtes résolvent tous mes problèmes, et c'est bien plus simple que mes histoires de recordset! Je n'ai pas testé avec Union par contre, mais merci beaucoup pour votre aide.

    ceuce

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

Discussions similaires

  1. [Toutes versions] Aller d'un recordset à un autre dans un formulaire ouvert en VBA
    Par damsmut dans le forum IHM
    Réponses: 1
    Dernier message: 03/12/2009, 14h45
  2. [VBA DAO] Union de deux Recordsets
    Par oohcalme dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/08/2009, 08h43
  3. Réponses: 2
    Dernier message: 20/05/2008, 16h37
  4. [VBA DAO] methode sur recordset
    Par ip203 dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/04/2007, 12h20
  5. VBA - DAO - recherche dans un recordset
    Par Sebimpro dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/07/2006, 08h48

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