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 :

Modification d'un paramètre d'une requête SQL


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut Modification d'un paramètre d'une requête SQL
    Bonjour,
    Voilà je sais qu'il est possible de modifier le paramètre d'une requête sql lorsqu'il s'agit d'une requête de modification ou de suppression or dans mon cas il s'agit d'une requête de sélection.
    Voyez plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    set RequeteSql = currentdb.OpenRecordset(NomTableArchive)
    RequeteSql.Parameters("MaDate") = MaDate
     
    set ARCHIVE = currentdb.openRecorset(NomTableArchive)
    set REQUETE = Opendatabase(BaseSource).OpenRecordset(RequeteSql.SQL)
    Le problème ici c'est que la valeur de requeteSql.SQL ne change pas et est toujours sous la forme "... WHERE Date_Creation = [MaDate]". Or si j'execute le code RequeteSql.Parameters(0) là il m'affiche bien la date passé en paramètre.

    Il semblerait donc que lorsque l'on modifie un paramètre access ne modifie pas le sql. Que-dois je faire dans ce cas là ? J'aimerai mieux éviter de passer par une table temporaire si possible.
    merci d'avance

  2. #2
    Expert éminent
    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
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Est-ce que tu as essayé comme dans la faq ?
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim qdf As DAO.QueryDef 
    Dim rcs As DAO.Recordset 
     
      'référence à la requête 
    Set qdf = CurrentDb.QueryDefs("NomQuery") 
     
      'code qui utilise qdf 
      'par exemple 
    qdf.Parameters("NomParamètre") = valeur    '<== si requête paramétrée 
    Set rcs = qdf.OpenRecordset                '<== pour travailler sur les données 
     
     
      'libération de la référence 
    Set qdf = Nothing
    A+

  3. #3
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut
    Salut LedZeppII,
    Oui bien sûr j'ai essayé cette technique surtout que il me semble que j'en suis l'auteur ^^
    Seulement avec cette technique qui transforme ma requête en recordset je me connecte à ma base de données courrante.
    Or moi je veux me connecter à une autre base de données

  4. #4
    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
    Oui bien sûr j'ai essayé cette technique surtout que il me semble que j'en suis l'auteur ^^


    Seulement avec cette technique qui transforme ma requête en recordset je me connecte à ma base de données courrante.
    Tu n'as qu'à instancier un objet database pointant sur la bonne base de données.

    Un tutoriel qui pourra t'aider :

    http://warin.developpez.com/accesss/dao

    A moins que tu n'en soit aussi l'auteur

  5. #5
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut
    Oups désolé en effet ce n'est pas moi l'auteur mais j'avais envoyé un email à la FAQ cet été qui reprenait cet exemple à quelque chose prêt...
    Sans rancune
    J'ai déjà un objet dababase qui pointe sur la bonne base de données comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set REQUETE = Opendatabase(BaseSource)
    seulement comment lui attribuer mon recordset créé précedemment par la méthode dont je suis "presque l'auteur" ^^ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Set qdf = CurrentDb.QueryDefs("NomQuery") 
     
      'code qui utilise qdf 
      'par exemple 
    qdf.Parameters("NomParamètre") = valeur   
    Set rcs = qdf.OpenRecordset  '<== Ce recordset ici

  6. #6
    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 n'ai rien compris désolé.

    L'objet recordset est ouvert depuis un objet querydef de la base nommée REQUETE en théorie non ?

  7. #7
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut
    uhm je vais tenter d'expliquer en détails je pense que ça t'aidera.
    En faite j'ai 3 bases de données différentes et j'aimerai archives certaines données à l'intèrieur de ces 3 bases.
    Pour cela j'ai créé une base de données ARCHIVE.MDB qui contient toutes les tables des 3 bases de données et qui récupère les données à l'aide de requête.
    Seulement ces requêtes sont dans ARCHIVE.MDB. Je récupère donc le sql de ses requêtes et je les appliques aux 3 bases de données.
    Ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'Récupération de la requête dans ARCHIVE.mdb
    Dim RequeteSql As DAO.QueryDef  
    Set RequeteSql = CurrentDb.QueryDefs("MaRequete")  
    'Execution de cette requete sur une autre base de données
    set PREMIEREBASE = Opendatabase(BaseSource).OpenRecordset(RequeteSql.SQL)
    voilà, ceci marche parfaitement tant que ma requête ne contient pas de paramètre... parce que si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    'Récupération de la requête dans ARCHIVE.mdb
    Dim RequeteSql As DAO.QueryDef  
    Set RequeteSql = CurrentDb.QueryDefs("MaRequete")  
    'Modification du paramètre
    RequeteSql.Parameters("Date") = #01/01/2006#
    'Execution de cette requete sur une autre base de données
    set PREMIEREBASE = Opendatabase(BaseSource).OpenRecordset(RequeteSql.SQL)
    et bien ça ne fonctionne pas évidemment. La solution serait de mettre mes requêtes dans les bases de données concernées mais j'aimerai éviter ça justement...
    Merci d'avance

  8. #8
    Expert éminent
    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
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    tu peux créer une requête temporaire dans l'autre base
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'Récupération de la requête dans ARCHIVE.mdb
    Dim RequeteSql As DAO.QueryDef
    Dim DB1 As DAO.Database, Qd1 As DAO.QueryDef, PREMIEREBASE As DAO.RecordSet
     
    Set RequeteSql = CurrentDb.QueryDefs("MaRequete")
    ' Ouverture base 1
    Set DB1 = Opendatabase(BaseSource)
    ' Creation requête temporaire paramétrée dans Base 1 avec le même
    ' SQL que celui de "MaRequete"
    Set Qd1 = DB1.CreateQueryDef("", RequeteSql.SQL)
    'Modification du paramètre
    Qd1.Parameters("Date") = #01/01/2006#
    'Execution de cette requete sur une autre base de données
    set PREMIEREBASE = Qd1.OpenRecordset
    ou bien remplacer le paramètre par sa valeur dans le SQL de la requête
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'Récupération de la requête dans ARCHIVE.mdb
    Dim RequeteSql As DAO.QueryDef, strSQL As String
    Set RequeteSql = CurrentDb.QueryDefs("MaRequete")  
    strSQL = RequeteSql.SQL
    ' Au cas où la requête est de la forme PARAMETERS ...; SELECT ...
    l = InStr(strSQL, "SELECT")
    If l > 1 Then
       strSQL = Mid(strSQL, l, Len(strSQL) + 1 - l)
    End If
    'Modification du paramètre
    strSQL = Replace(strSQL, "[Date]", "#01/01/2006#")
    'Execution de cette requete sur une autre base de données
    set PREMIEREBASE = Opendatabase(BaseSource).OpenRecordset(strSQL)
    A+

  9. #9
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut
    La solution des requêtes temporaires me va très bien !
    Merci beaucoup !!!

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

Discussions similaires

  1. Paramètres dans une requête SQL en Sybase
    Par mdjobongo dans le forum SQL Anywhere
    Réponses: 1
    Dernier message: 05/08/2011, 22h54
  2. Réponses: 13
    Dernier message: 21/05/2010, 16h54
  3. [WD9] Passer un paramètre dans une requête SQL
    Par gbzmt dans le forum WinDev
    Réponses: 2
    Dernier message: 03/01/2009, 07h14
  4. Paramètre d'une requête SQL
    Par Chtulus dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 17/04/2008, 19h29
  5. 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

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