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 :

Table et variable en paramètre d'une requête [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Homme Profil pro
    Data Manager
    Inscrit en
    Octobre 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Data Manager
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 151
    Points : 167
    Points
    167
    Par défaut Table et variable en paramètre d'une requête
    Bonjour,

    Pour plusieurs variables (de différentes tables) je souhaite connaitre la moyenne, le maxi, etc...

    J'ai donc créé une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlRequete = "SELECT DISTINCTROW Avg([Table1].[Variable1]) AS [Moyenne], Min([Table1].[Variable1]) AS [Minimum], Max([Table1].[Variable1]) AS [Maximum] FROM Table1;"
    OK, ça marche.

    Sauf que, comme je le disais juste au dessus, j'ai besoin de cette info pour plusieurs variables contenues dans plusieurs tables. Du coup je souhaiterais créer mes requêtes via une procédure à laquelle je passe en paramètre le nom de la table et le nom de la variable. Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub CreationRequete(MaTable, MaVariable, NomRequete)
     
    sqlRequete = "SELECT DISTINCTROW Avg(" & MaTable.MaVariable & ") AS [Moyenne], Min(" & MaTable.MaVariable & ") AS [Minimum], Max(" & MaTable.MaVariable & ") AS [Maximum] FROM " & MaTable & ";"
     
    Set ReqDef = Application.CurrentDb.CreateQueryDef(NomRequete, sqlRequete)
     
    DoCmd.SelectObject acQuery, Nom, True
    End Sub
     
    Sub CreerRequete
    CreationRequete(Table1, Var1, Nom1)
    CreationRequete(Table1, Var2, Nom2)
    CreationRequete(Table2, Var1, Nom3
    End Sub)
    Et, vous ne serez sans doute pas surpris, mais ça ne marche pas.

    Je ne pense pas utiliser les bons objets pour la table et les variables (c'est pour ça que je n'ai rien mis dans l'exemple ). Mais j'ai beau essayer dans tous les sens, je n'y arrive pas.

    Alors :
    1. est-il possible d'automatiser la création de requête en fournissant en argument le nom de la table et de la variable/des variables sur lesquelles porte la requête ?
    2. si oui, comment ?

    Merci d'avance pour vos réponses !

    Joyeux Noël à toutes et à tous,
    Laurent

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,
    Pas du tout surpris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ..." & MaTable & "." & MaVariable & "...
    Le point fait partie de la requête et non du code VBA donc comme le reste il doit être une string.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre habitué
    Homme Profil pro
    Data Manager
    Inscrit en
    Octobre 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Data Manager
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 151
    Points : 167
    Points
    167
    Par défaut
    Re,

    Comment dire ???

    MMMEEERRRRRRRRRRRRRCCCCCCCCCCCCCCCIIIIIIIIIIIIIIIIIIIIIIIIIII !!!!!

    Il me semblait avoir essayé... Mais en fait non. Ou alors c'est dans l'appel de la fonction que j'ai merdé.

    Je me suis aussi escrimé à essayer de passer la table et le champ en tant que tels comme paramètres. Mais je n'ai pas réussi. Problème de compatibilité de type, etc... Juste pour ma culture générale, c'est possible ça de passer une table en paramètre ???

    Mais vraiment merci beaucoup !!!

    Laurent

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    On peut tout passer en paramètre d'un simple type primitif (long, integer, boolean) à des objets complexes voir même des classes utilisateurs.

    Pour une table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function MaFonction(matable as Table) as String
     
    MaFonction matable.name
    et l'appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print mafunction(currentdb.tabledefs("nom de la table"))
    Attention passer un objet table ne veut pas dire que tu passes son contenu mais juste sa structure. Si c'est le contenu c'est un recordset que tu dois passer.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre habitué
    Homme Profil pro
    Data Manager
    Inscrit en
    Octobre 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Data Manager
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 151
    Points : 167
    Points
    167
    Par défaut
    Bonjour,

    OK, merci pour l'info.

    Je me suis bien mélangé les pinceaux... J'imaginais bien que je faisais une erreur dans le type d'objet que je passais en paramètre. Ce que tu me dis m'ouvre de nouveaux horizons que j'explorerai au retour des vacances !!!

    Merci encore !

    Joyeux Noël

    Laurent

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/06/2015, 18h59
  2. [Toutes versions] Obtenir les paramètres d'une requête depuis une table
    Par jabal64 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/11/2011, 16h54
  3. Exécution de variable paramètre dans une requête
    Par pascalourox dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/10/2008, 14h07
  4. Faire du nom de la table un paramètre dans une requête
    Par sofiane1111 dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/09/2007, 14h27
  5. Passage de paramètres dans une requête imbriquée
    Par DrakkoFR dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2005, 12h46

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