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 :

Conversion d'une requête SQL en VBA


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 33
    Points : 35
    Points
    35
    Par défaut Conversion d'une requête SQL en VBA
    Bonjour à toutes et à tous,

    Je souhaiterais ecrire une requète en vba inspirée d'une requête SQL (normal jusque là me direz vous... )
    Par contre le code vba que j'ai écris bug car il ne prend pas la clause "where".
    Pourriez vous m'aider à corriger la syntax de ce code SVP ?

    Voici la requête SQL :

    'SELECT DISTINCT Tbleagent.Idagent, Tbleagent.Nom, Tbleagent.Prénom FROM ((Tbleagent
    INNER JOIN Tblemétier ON Tbleagent.Idagent = Tblemétier.Idagent) INNER JOIN Tblemission ON Tbleagent.Idagent = Tblemission.Idagent)
    INNER JOIN Tbletechnique
    ON Tbleagent.Idagent = Tbletechnique.Idagent
    WHERE ((Tbletechnique.[intituléA1])>=[Val1])
    OR (Tbletechnique.[intituléA2]>=[Val1])
    OR (Tbletechnique.[intituléA3])>=[Val1]))
    AND ((Tblemétier.[intituléB1])>=[Val2])
    OR (Tblemétier.[intituléB2])>=[Val2])
    OR (Tblemétier.[intituléB3])>=[Val2]);

    Voici sa grande soeur en VBA :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Condition = ""
    Requête = "SELECT DISTINCT Tbleagent.Idagent,
    Tbleagent.nom, Tbleagent.Prénom" & _
    " FROM Tbleagent" & _
    " INNER JOIN Tbletechnique ON Tbleagent.Idagent =
    Tbletechnique.Idagent" & _
    " INNER JOIN Tblemission ON Tbleagent.Idagent =
    Tblemission.Idagent" & _
    " INNER JOIN Tblemétier ON Tbleagent.Idagent =
    Tblemétier.Idagent"
     
    If (Valeur1 > 0) And (Condition <> "") Then
    Condition = Condition & " AND " & "(" & "(" & "Tbletechnique.[intituléA1] >= " & Valeur1 & ")" & _
    " OR " & "(" & "Tbletechnique.[intituléA2] >= " & Valeur1 & ")" & _
    " OR " & "(" & " bletechnique.[intituléA3] >= " & Valeur1 & ")" & _
    " OR " & "(" & "Tbletechnique.[intituléA4]>= " & Valeur1 & ")" & ")"
    Else
    If (Valeur1 > 0) Then
    Condition = "(" & "Tbletechnique.[intituléA1] >= " & Valeur1 & ")" & _
    " Or " & "(" & "Tbletechnique.[intituléA25] >= " & Valeur1 & ")" & _
    " Or " & "(" & "Tbletechnique.[intituléA3] >= " & Valeur1 & ")" & _
    " Or " & "(" & "Tbletechnique.[intituléA4] >= " & Valeur1 & ")"
    End If
    End If
     
    If (Valeur2 > 0) And (Condition <> "") Then
    Condition = Condition & " AND " & "(" & "(" & "Tbletechnique.[Utiliser XML] >= " & Valeur2 & ")" & _
    " OR " & "(" & "Tbletechnique.[intituléB1] >= " & Valeur2 & ")" & _
    " OR " & "(" & "Tbletechnique.[intituléB2] >= " & Valeur2 & ")" & _
    " OR " & "(" & "Tbletechnique.[intituléB3] >= " & Valeur2 & ")" & _
    " OR " & "(" & "Tbletechnique.[intituléB4] >= " & Valeur2 & ")" & ")"
    Else
    If (Valeur2 > 0) Then
    Condition = "(" & "Tbletechnique.[intituléB1] >= " & Valeur2 & ")" & _
    " OR " & "(" & "Tbletechnique.[intituléB2] >= " & Valeur2 & ")" & _
    " OR " & "(" & "Tbletechnique.[intituléB3] >= " & Valeur2 & ")" & _
    " OR " & "(" & "Tbletechnique.[intituléB4] >= " & Valeur2 & ")"
    End If
    End If
     
    Requête = Requête & " WHERE " & Condition & ";"
     
    Set Db = CurrentDb
    Set rst = Db.OpenRecordset(Requête)
    ...
    C'est sur dernière ligne que le debuger s'arrète et marque en jaune. Par avance merci !

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour

    Il y a beaucoup trop de "
    Il y a une erreur ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     OR " & "(" & " bletechnique.[intituléA3] >= " & Valeur1 & ")" & _
    Evite les _
    Ecris une requête comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Requete="SELECT..."
    Requete=Requete & vbcrlf & "FROM..."
    Requete=Requete & vbcrlf & "WHERE..."
    Voilà un bout corrigé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Condition = ""
    Requête = "SELECT DISTINCT Tbleagent.Idagent, Tbleagent.nom, Tbleagent.Prénom"
    Requête = Requête & vbCrLf & "FROM Tbleagent INNER JOIN Tbletechnique ON Tbleagent.Idagent = Tbletechnique.Idagent INNER JOIN Tblemission ON Tbleagent.Idagent Tblemission.Idagent INNER JOIN Tblemétier ON Tbleagent.Idagent = Tblemétier.Idagent "
     
    If (Valeur1 > 0) And (Condition <> "") Then
    Condition = "AND ((Tbletechnique.[intituléA1] >= " & Valeur1 & ")"
    Condition = Condition & " OR (Tbletechnique.[intituléA2] >= " & Valeur1 & ")"
    Condition = Condition & " OR (Tbletechnique.[intituléA3] >= " & Valeur1 & ")"
    Condition = Condition & " OR (Tbletechnique.[intituléA4]>= " & Valeur1 & "))"
    Else
    Enfin si Valeur1, Valeur2... sont numériques c'est bon sinon il faut ajouter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .[intituléA3] >= " & """ & Valeur1 & """ & ")"
    Bon courage

    Argy

  3. #3
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Quel est le message d'erreur ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 33
    Points : 35
    Points
    35
    Par défaut
    Tout d'abord merci beaucoup !

    Après avoir modifier le code suivant tes conseils, j'en suis malheureusement toujours au même point, avec le même message d'erreur suivant :

    Erreur d'execution '3075'
    Syntax error (missing operator) in query expression ' Tbleagent.Idagent = Tbletechnique.Idagent INNER JOIN Tblemission ON Tbleagent.Idagent = Tblemission.Idagent INNER JOIN Tblemétier ON Tbleagent.Idagent = Tblemétier.Idagent'.

  5. #5
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Modifie ton code comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Requête = Requête & " WHERE " & Condition & ";" 
    Debug.Print Requête
    Rem Set Db = CurrentDb 
    Rem Set rst = Db.OpenRecordset(Requête)
    Copie le contenu de la fenêtre de debogage (Ctrl+G)
    Ouvre le QBE en mode SQL
    Colle (Ctrl+V)
    Exécute et là il va te dire où ça ne va pas...

    Argy

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 33
    Points : 35
    Points
    35
    Par défaut
    Merci pour la formation à debug.print car cela m'a permis de corriger mon erreur. ne me demander quelle est elle car je ne l'ai pas vue.

    le debuger me montrait une erreur au niveau de "nt.No" de Tbleagent.Nom
    J'ai donc reconstruit la requête en SQL puis l'ais "copié/colé" telle quelle dans mon code.

    MAINTENANT CELA MARCHE !!!! encore merci beaucoup !!!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/11/2008, 12h04
  2. D'une requête SQL au VBA
    Par Fabrice7627 dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 22/02/2008, 17h40
  3. écriture d'une requête SQL en VBA, pb lié à '
    Par Marie_2116 dans le forum VBA Access
    Réponses: 6
    Dernier message: 20/08/2007, 15h43
  4. Réponses: 6
    Dernier message: 15/02/2007, 13h46
  5. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29

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