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 :

ComboList, Passage de paramètres SQL en SQL


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 443
    Par défaut ComboList, Passage de paramètres SQL en SQL
    Bonjour à tous et merci de votre temps.

    J'ai une combolist (liste déroulante) dont le contenu dépend d'un champ dans mon formulaire.

    Je connais 3 méthodes pour passer le paramètre à la query sous-jacente de ma combolist.

    1) Par référencement direct du type [forms]![moForms]![monChamp]
    2) Par du SQL dans du code VBA du type SQL="SELECT ... "
    3) Par utilisation d'un table de paramétrage

    (Merci la FAQ :-)

    Le problème avec les 2 première solutions c'est que le lien est fort et comme je suis en phase de développement je change souvant mes noms de forms et la structure de mes requètes. Deplus conceptuellement parlant, deux objets ne devraient pas se connaitre en dehors de leurs interfaces (ici les paramètres).

    La troisième n'est pas applicable dans l'environnement multi-utilisateur qui est le mien.

    Ce que j'aimerai faire c'est passer des paramètres SQL en SQL.

    Voici ma requète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PARAMETERS prmCodePeriode Text ( 255 ), prmCodeTypeElementFacturation Text ( 255 );
     
    SELECT PrixUnitaireElement.Clef, PrixUnitaireElement.CodePeriode, PrixUnitaireElement.ClefElementFacturation, TypeElementFacturation.Code AS CodeTypeElementFacturation, TypeElementFacturation.Libelle AS LibelleTypeElementFacturation, TypeElementFacturation.CoefficientApplicaple AS CoefficientApplicapleTypeElementFacturation, ElementFacturation.Code AS CodeElementFacturation, ElementFacturation.Libelle AS LibelleElementFacturation, PrixUnitaireElement.PrixUnitaire
    FROM TypeElementFacturation INNER JOIN (ElementFacturation INNER JOIN PrixUnitaireElement ON ElementFacturation.Clef = PrixUnitaireElement.ClefElementFacturation) ON TypeElementFacturation.Code = ElementFacturation.Type
     
    WHERE (((PrixUnitaireElement.CodePeriode)=[prmCodePeriode]) AND ((TypeElementFacturation.Code)=[prmCodeTypeElementFacturation]))
    ORDER BY ElementFacturation.Code;
    L'important ici ce sont les 2 params de la clause Where.

    Voici le code que j'ai essayé pour ajouter la valeur de mes param à la clause SQL de ma requète. L'avantage de cette solution est une immense souplesse de travail car ma requète et mon formulaire ne sont pas reliés directement. Je peux facilement vérifier l'un et l'autre en bénéficiant de tous les contrôles d'Access.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Dim SQL As String
        SQL = CurrentDb.QueryDefs("rChoixPrixUnitaire").SQL & "'" & Me.ChoixCodePeriode & "' '" & Me.ChoixCodeTypeElementFacturation & "'"
        Me.ChoixPrixUnitaire.RowSource = SQL
    Donc je récupère le SQL de la requète et j'ajoute les param à la fin et idéalement j'aimerai avoir des paramètres nommés plutôt que positionnels.

    mais j'ai l'erreur :

    'Caractères trouvés après la fin de l'instruction SQL.'

    Je pense que c'est simplement un erreur de syntaxe de ma part mais je n'arrive pas à trouver la bonne façon de l'écrire.

    Quelqu'un a déjà fait cela ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  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 148
    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 148
    Par défaut
    Le mieux pour comprendre ton erreur est de faire.

    à la fin de ton code.

    Tu t'apercevra que tu as insérer test valeurs après le caractère de fin. Les requêtes utilise le ; pour indiquer qu'elles sont finies.

    Par expérience une chaine SQL renvoyer par querydefs comporte des caractères parasite (comme les puces, poux et autre tiques)
    Regarde donc mon tuto sur la recherche il y a quelques explications sur ce genre de problème.

    à+

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 443
    Par défaut
    Citation Envoyé par loufab
    Le mieux pour comprendre ton erreur est de faire.

    Tu t'apercevra que tu as insérer test valeurs après le caractère de fin. Les requêtes utilise le ; pour indiquer qu'elles sont finies.
    J'ai essayé de mettre la valeur de mes paramètres avant le dernier ; mais ça fait une erreur de syntaxe.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 443
    Par défaut
    Bon voilà la solution que j'ai trouvé.

    1) J'ai supprimé les définitions de paramètre de ma requète
    2) J'ai modifié le code comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Dim db As Database: Set db = CurrentDb
        Dim SQL As String
        SQL = Db.QueryDefs("rChoixPrixUnitaire").SQL
        SQL = Replace(SQL, "[prmCodePeriode]", """" & Me.ChoixCodePeriode & """")
        SQL = Replace(SQL, "[prmCodeTypeElementFacturation]", """" & Me.ChoixCodeTypeElementFacturation & """")
        Me.ChoixPrixUnitaire.RowSource = SQL
        db.Close: Set db = Nothing
    Comme cela j'ai mes params nommés et pas un gramme de SQL dans mon code. Bon j'ai plus de contrôle de type par la query mais je peux vivre avec.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 148
    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 148
    Par défaut
    si ce sont des paramètres de requêtes interesses-toi à la propriété Parameters de Querydefs. C'est ce qui permet d'affecter les valeurs aux paramètres (si mes souvenirs sont exacts)

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

Discussions similaires

  1. [XL-2013] Passage de paramètre sur connexion SQL
    Par PrinceCorwin dans le forum Excel
    Réponses: 0
    Dernier message: 11/06/2014, 10h15
  2. [AC-2007] Passage de paramètre à une instruction SQL
    Par fbourdon dans le forum VBA Access
    Réponses: 3
    Dernier message: 25/07/2011, 13h21
  3. Réponses: 4
    Dernier message: 21/02/2009, 17h37
  4. Réponses: 7
    Dernier message: 10/02/2005, 13h44
  5. passage de paramètres à un fichier SQL
    Par philfont dans le forum Administration
    Réponses: 5
    Dernier message: 30/08/2004, 15h01

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