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 :

Parametre dans une requête SQL (pass trough query) [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Par défaut Parametre dans une requête SQL (pass trough query)
    Bonjour,

    me voici avec un nouveau dilemme..

    J'ai une requête sql (passtrough query) dans ma base de donnée.
    J'aimerai y mettre un paramètre, mais je n'y arrive pas.

    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
    Sub test()
     
    Dim db              As DAO.Database
    Dim qry             As DAO.QueryDef
    Dim rs               As DAO.Recordset
    Dim strSQL         As String
     
    Set db = CurrentDb
    Set qry = db.CreateQueryDef("")
     
    strSQL = "SELECT * FROM PassThroughQuery"
    strSQL = Replace(strSQL, "<PARAMETRE>", "123")
     
    qry.sql = strSQL
     
    Set rs = qry.OpenRecordset()
     
    xlBook.Sheets("Sheet1).Range("A1").CopyFromRecordset rs
    Le problème, c'est qu'il ne me remplace pas <PARAMETRE> dans ma requete par "123"

    Du coup, je n'ai aucun résultat dans ma feuille EXCEL, puisqu'il lui manque un argument (123) (il n'a pas changer ma requete SQL).

    Une 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 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    un peu de lecture depuis la me semble opportune:
    http://access.developpez.com/faq/?page=SQL#ReqParamVar
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonsoir,

    Essaie comme ça :
    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
    Dim db              As DAO.Database
    Dim qry             As DAO.QueryDef
    Dim rs              As DAO.Recordset
    Dim strConnect      As String
    Dim strSQL          As String
     
    Set db = CurrentDb
     
    ' Récupère chaîne de connexion de la requête SQL Direct modèle
    strConnect = db.QueryDefs("PassThroughQuery_Modele").Connect
    ' Récupère SQL de la requête SQL Direct modèle
    strSQL = db.QueryDefs("PassThroughQuery_Modele").SQL
    ' Remplace <PARAMETRE> par une valeur
    strSQL = Replace(strSQL, "<PARAMETRE>", "FR")
    ' Crée requête temporaire
    Set qry = db.CreateQueryDef("", strSQL)
    ' Définit la chaîne de connexion de la requête temporaire
    qry.Connect = strConnect
    ' Exécute la requête temporaire et renvoie le jeu de donnée
    ' dans un recordset DAO.
    Set rs = qry.OpenRecordset()
    PassThroughQuery_Modele est une requête SQL Direct (Pass through) modèle.
    Elle doit avoir une connexion ODBC fonctionnelle.

    A+

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Par défaut
    Merci LedZeppII, votre réponse semble plus correspondre à mon soucis que la solution proposée par jpcheck.

    N'etant pas au bureau, j'essayerai demain.
    Mais pour ne pas attendre jusqu'à demain, j'aimerai être sur de ne pas dire de bêtise.

    J'ai une requête SQL (sans paramètre) que j'ai codé avec SQL Server 2005.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select *
    FROM table_A

    Je décide de travailler avec VBA. Donc je crée et sauvegarde une requête SQL (passtrough querry), nommée PassThrougQueryTest.
    Je décide ensuite modifier la requête SQL et d'y insérer une clause avec paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select *
    FROM table_A
    WHERE field1 = <PARAMETRE>
    si je souhaite faire appel a cette requête, je fais donc comme suit ??

    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
    Dim db              As DAO.Database
    Dim qry             As DAO.QueryDef
    Dim rs              As DAO.Recordset
    Dim strConnect      As String
    Dim strSQL          As String
     
    Set db = CurrentDb
     
    strConnect = db.QueryDefs("PassThrougQueryTest").Connect
    strSQL = db.QueryDefs("PassThrougQueryTest").SQL
    strSQL = Replace(strSQL, "<PARAMETRE>", "FR")
    Set qry = db.CreateQueryDef("", strSQL)
     
    qry.Connect = strConnect
     
    Set rs = qry.OpenRecordset()
     
    xlBook.Sheets("Sheet1).Range("A1").CopyFromRecordset rs

    QUID ? Est ce que la requête PassThrougQueryTest est conservée avec field1 = <PARAMETRE> ? Car je souhaite gardé la requête telle quelle, avec <PARAMETRE>

    En tout cas,merci pour vos aides.
    C'est tres aimable.

  5. #5
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Oui, c'est ça.
    La requête PassThrougQueryTest reste inchangée.
    Le code ne s'en sert que pour obtenir la chaîne de connexion ODBC, et le texte de l'instruction SQL SELECT.
    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set qry = db.CreateQueryDef("", strSQL)
    crée une requête temporaire (premier argument pour le nom de la requête est une chaîne vide),
    avec une instruction SQL dérivée de celle de PassThrougQueryTest, dans laquelle <PARAMETRE> a été remplacé par une valeur littérale.

    Attention à la syntaxe des valeurs littérales utilisées en tant que critères de sélection.
    Dans mon exemple la requête SQL Direct était
    Code transact-sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM Clients
    WHERE Pays LIKE '%<PARAMETRE>%'
    Les guillemets simples encadrant la valeur de type texte étaient déjà présents.

    A+

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Par défaut
    Rebonjour,

    Arrivé à cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set qry = db.CreateQueryDef("", strSQL)
    j'ai un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Run-time error '3075':
    Syntax error (missing operator) in query expression ".
    EDIT : J'ai trouvé. Il s'agit d'un problème de parenthèse dans mon FROM. Etrange..
    Voici le code correct.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT *
     
    FROM (dbo.table1 as a
     
    	LEFT JOIN dbo.table2 as b
    		ON (a.field3 = b.aaa)
    		AND (a.field1= b.bbb))
     
    	LEFT JOIN dbo.table3 as c
    		ON (a.field3 = c.ccc)
    		AND (a.field1= c.ddd)
    Merci pour vos aides.
    Ca fonctionne nickel.

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

Discussions similaires

  1. comment passé un paramètre dans une requête sql
    Par java2008 dans le forum BIRT
    Réponses: 0
    Dernier message: 03/03/2008, 12h11
  2. Plusieurs jointures dans une requête sql
    Par Pero dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/09/2005, 20h59
  3. Nom de champ variable dans une requête SQL
    Par stip dans le forum ASP
    Réponses: 2
    Dernier message: 30/09/2004, 18h02
  4. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  5. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51

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