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 :

Faire en VBA une requête sur une requête paramétrée [Toutes versions]


Sujet :

VBA Access

  1. #1
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut Faire en VBA une requête sur une requête paramétrée
    Bonjour

    J'ai une requête paramétrée sur laquelle j'aimerais faire une requête en VBA. Mon code a donc l'aspect suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Set qdf = New QueryDef
    With qdf
    .sql = "select * from [marequeteparametree]"
    end with
    La question est : où fait-il renseigner les paramètres ? qdf.parameters = "monparam" renvoie l'erreur bien compréhensible "élément non trouvé dans cette collection".

    Merci

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,
    Voici un exemple de syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    106 Set qdf = CurrentDb.QueryDefs("MaRequeteParametree")
    108 qdf.Parameters("MonParametre") = 123
    110 Set rst = qdf.OpenRecordset

  3. #3
    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 645
    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 645
    Points : 34 350
    Points
    34 350
    Par défaut


    à première vue je partirai sur un découpage en 3 étapes :
    - génération de la premiere requete paramétrée et passage du résultat dans une table temporaire (SELECT INTO)
    - requete dans la table temporaire (SELECT)
    - destruction de la table temporaire (DROP)

  4. #4
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Salut

    Merci jpcheck, j'y avais pensé, mais j'aurais préféré m'en passer.
    Tant pis, je vais faire comme ça.

    EDIT : c'est "amusant", mais ça ne marche pas non plus comme ça.
    Pour détailler un peu plus la situation, j'ai 2 requêtes paramétrées A et B avec les mêmes paramètres.
    J'ai aussi une requête C (paramétrée aussi) qui est une jointure de A.* et de B.* (...from A JOIN B on A.champ = B.champ).
    Si j'ouvre C dans access, en renseignant les paramètres à la main, j'ai les bons résultats.
    Si j'ouvre C en VBA avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set qdf = CurrentDb.QueryDefs("C")
    With qdf
        .Parameters("date_debut_periode") = Format(DateSerial(Year(Date_report), Month(Date_report) \ 6 + 1, 1), "MM/DD/YYYY")
        .Parameters("date_fin_periode") = Format(DateSerial(Year(Date_report), Month(Date_report) + 1, 1), "MM/DD/YYYY")
    End With
    Set rcset = qdf.OpenRecordset()
    rcset.MoveLast
    rcset.MoveFirst
    les données sont bonnes pour les champs provenant de A, mais valent 0 pour les champs provenant de B.

    Il semble que les paramètres ne se propagent pas à toutes les sous-requêtes en VBA.
    Quelqu'un aurait-il une explication ?

    My mistake, ça marche. Si vous croisez le type qui a défini les dates anglaises en MM/DD/YYYY mais pas partout, frappez-le de ma part.

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

Discussions similaires

  1. Remplacer une requête sur une class par une valeur constante ?
    Par Lillie CHARLOTTE dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/06/2015, 09h59
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. Réponses: 1
    Dernier message: 30/08/2011, 09h53
  4. Réponses: 2
    Dernier message: 26/03/2010, 10h10
  5. Tri d'une requête sur une valeur ou une autre
    Par mims1664 dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/08/2009, 17h40

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