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 :

Une requete à partir d'une requete


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 120
    Points : 88
    Points
    88
    Par défaut Une requete à partir d'une requete
    Bonjour,
    J'ai crée un code qui crée un recorset à partir d'une requete. J'aimerai faire une autre requete à partir du contenu du 1er recordset comment faire?

    Voici mon code.
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     
    Private Sub ListeTypeAction_Click()
        Dim varItm As Variant, intI As Integer
        Dim Sql As String
        Dim Compteur As Integer
        CritSelectTypeAction = ""
        Compteur = 0
     
        Set frm = Forms![F-RdvAuto]
        Set ctl = frm!ListeTypeAction
     
    Sql = "SELECT [T-Action].CodeAction, [T-Action].CodeDossier, [T-Action].DateCreationAction, [T-Action].DateEcheanceAction, [T-Action].DateRealisationAction, [T-Action].MotifAction, [T-Dossier].CPDossier,  DateDiff('d',[dateecheanceaction],cdate(" & Chr(34) & Forms![F-RdvAuto]!DateEcheance & Chr(34) & ")) AS retard"
    Sql = Sql + " FROM [T-Action] INNER JOIN [T-Dossier] ON [T-Action].CodeDossier=[T-Dossier].CodeDossier"
    Sql = Sql + " WHERE ("
     
        For Each varItm In ctl.ItemsSelected
               ' MsgBox ctl.Column(1, varItm)
        If Compteur > 0 Then
        CritSelectTypeAction = CritSelectTypeAction & " OR ("
        End If
        CritSelectTypeAction = CritSelectTypeAction & "(([T-Action].DateRealisationAction) Is Null) AND (([T-Action].MotifAction)=" & Chr(34) & ctl.Column(0, varItm) & Chr(34) & "))"
        Compteur = Compteur + 1
        Next varItm
     
    CritSelectTypeAction = CritSelectTypeAction + ";"
     
    Sql = Sql + CritSelectTypeAction
    Me!testREquete = Sql
    'MsgBox Sql
     
     
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim rs2 As DAO.Recordset
    Dim strSQL As String
     
        Set db = CurrentDb
        Set rs = db.OpenRecordset(Sql)
     
    'nom des champs!
    'CodeDossier, DateCreationAction, DateEcheanceAction, DateRealisationAction, MotifAction,
    'CPDossier, Retard
     
    strSQL = "SELECT [rs].CPDossier, [rs].MotifAction, Avg([rs].retard) AS MoyenneDeretard"
    strSQL = strSQL + " From [rs]"
    strSQL = strSQL + " GROUP BY [rs].CPDossier, [rs].MotifAction"
    strSQL = strSQL + " ORDER BY Avg([rs].retard) DESC;"
     
     
    Set rs2 = db.OpenRecordset(strSQL)
     
    MsgBox rs2!MotifAction
     
    rs2.Close
    rs.Close
     
    End Sub
    Bien sure cela ne fonctionne pas. Est-ce juste un problème syntaxe ou ce n'est pas possible? faut il passer par une table temporaire?

    Merci de votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 650
    Points : 34 358
    Points
    34 358
    Par défaut
    Bonjour,
    le mieux reste de passer tout dans une seule requête :

    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
    Sql = "SELECT [T-Action].CodeAction, [T-Action].CodeDossier, [T-Action].DateCreationAction, [T-Action].DateEcheanceAction, [T-Action].DateRealisationAction, [T-Action].MotifAction, [T-Dossier].CPDossier,  DateDiff('d',[dateecheanceaction],cdate(" & Chr(34) & Forms![F-RdvAuto]!DateEcheance & Chr(34) & ")) AS retard"
    Sql = Sql + " FROM [T-Action] INNER JOIN [T-Dossier] ON [T-Action].CodeDossier=[T-Dossier].CodeDossier"
    Sql = Sql + " WHERE ("
     
        For Each varItm In ctl.ItemsSelected
               ' MsgBox ctl.Column(1, varItm)
        If Compteur > 0 Then
        CritSelectTypeAction = CritSelectTypeAction & " OR ("
        End If
        CritSelectTypeAction = CritSelectTypeAction & "(([T-Action].DateRealisationAction) Is Null) AND (([T-Action].MotifAction)=" & Chr(34) & ctl.Column(0, varItm) & Chr(34) & "))"
        Compteur = Compteur + 1
        Next varItm
     
    CritSelectTypeAction = CritSelectTypeAction + ";"
     
    Sql = Sql + CritSelectTypeAction
     
     
    strSQL = "SELECT [rs].CPDossier, [rs].MotifAction, Avg([rs].retard) AS MoyenneDeretard"
    strSQL = strSQL + " From ("& Sql &") AS [rs]"
    strSQL = strSQL + " GROUP BY [rs].CPDossier, [rs].MotifAction"
    strSQL = strSQL + " ORDER BY Avg([rs].retard) DESC;"
     
    Set RS = dB.OpenRecordSet(strSQL)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 120
    Points : 88
    Points
    88
    Par défaut
    Merci de ta réponse, je ne savais qu'il était possible d'utiliser ce type de syntaxe. Je vais tester.

    Encore merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/03/2010, 15h43
  2. [Batch] Créer une chaine à partir d'une variable et d'une autre chaine
    Par mlle lain dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 10/11/2009, 16h26
  3. Saisir une image à partir d'une photo ou d'une vidéo
    Par lohengrin56 dans le forum Flash/Flex
    Réponses: 0
    Dernier message: 07/07/2009, 16h17
  4. Réponses: 2
    Dernier message: 05/01/2009, 12h45
  5. Réponses: 5
    Dernier message: 22/05/2008, 14h42

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