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 :

VBA probleme de requete


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 226
    Points : 72
    Points
    72
    Par défaut VBA probleme de requete
    Bonjour j'ai un porbleme pour exécuter ma commande SQL en VBA j'ai tapé ce code la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL = "SELECT getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__, "2005_T3" AS année FROM getTable WHERE (((getTable.CBQD)="total") And ((getTable.MOIS)="total") And ((getTable.CMOP)="total"));"
     
    DoCmd.RunSQL Sql
    C'est la meme que la commande qu'une requete selection SQL de Access j'ai fait un copier coller ensuite je compte intégrer une variable

    il me met une erreur a ma ligne de commande SQL je ne comrpends pas pourquoi ela fonctionne pas si quelqu'un peut m'aider il veut pas s'exécuter ca doit etre une erreur de syntaxe mais je vois pas laquelle
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    DoCmd.RunSQL ne s'applique qu'à une requête action.

    Si tu veux voir le résultat utilise plutôt :
    Starec

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 226
    Points : 72
    Points
    72
    Par défaut
    J'y avais pensé mais cette commande me pose probleme.
    Le truc c'est que je compte mettre une comme nom de table une variable c'est pourquoi je voulais éxécuter une commande car avec DoCmd.OpenQuery ma table devra etre fixe or c'est pas ce que je veux

  4. #4
    Membre régulier Avatar de lerico
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 115
    Points : 90
    Points
    90
    Par défaut
    Bonjour,

    J'ai vu que tu avais laissé le ; à la fin de ton SQL.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 226
    Points : 72
    Points
    72
    Par défaut
    maintenant j'ai une erreur

    Une action exécuter SQL nécessite un argumentconsistant en une instruction SQL

    j'ai fais un msgbox pour vérifier ma ligne est bien dedans

  6. #6
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__, '2005_T3' AS année FROM getTable WHERE (((getTable.CBQD)='total') And ((getTable.MOIS)='total') And ((getTable.CMOP)='total'));"


    Pour ouvrir une requête, il faut que celle-ci existe. Tu peux aussi la créer temporairement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub ap_OpenSQL(ByVal sSQL As String)
        On Error Resume Next
        Dim oqry As DAO.QueryDef
        Dim odb As DAO.Database
     
        Set odb = CurrentDb
        Set oqry = New DAO.QueryDef
        oqry.Name = "tmpOpenQuery"
        oqry.SQL = sSQL
        odb.QueryDefs.Append oqry
        DoCmd.OpenQuery oqry.Name
        odb.QueryDefs.Delete oqry.Name
    End Sub
    La requête étant supprimée aussitot, elle n'est pas modifiable (je parle de la requête et non des données qu'elle présente) par l'utilisateur.


    Et tu appelles ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQL = "SELECT getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__, '2005_T3' AS année FROM getTable WHERE (((getTable.CBQD)='total') And ((getTable.MOIS)='total') And ((getTable.CMOP)='total'));"
     
    ap_OpenSQL SQL

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 226
    Points : 72
    Points
    72
    Par défaut
    Merci beaucoup pour ton code ca m'avance énormément
    en fait mon select va servir a etre ajouté avec une requete ajout dont la commande est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim Var as String
    Var = "ReqSelect"
     
    Sql="INSERT INTO TableTest ( année, OPPO, MPE, MPF, MRE, MRF, M__ ) SELECT  " & Var & ".année, " & Var & ".OPPO, "& Var & ".MPE," & Var & "..MPF," & Var & "..MRE," & Var & "..MRF," & Var & "..M__ FROM" & Var & ";"
    DoCmd SQL
    ReqSelect serait la requete précédente et je ne vois pas ou on récupère le nom

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 226
    Points : 72
    Points
    72
    Par défaut
    Sinon j'ai essayé ce code mais il m'affiche un msgbox avec écrit trop peu de paramètre 9attendu je sais pas si le code est bon mais il s'exécute

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    Private Sub Commande13_Click()
    On Error GoTo Err_Commande13_Click
     
    Set db = CurrentDb
     
     
    Dim m As String
    Dim a As String
    Dim name As String
     
        m = Me!mois
        a = Me!année
     
     
    DoCmd.SetWarnings False
     
    'Affectation du lieu de récupération  des fichiers
     
    Dim NomDir As String
     
    NomDir = "D:\Test\"
     
    'On atteint le répertoire concerné où se trouvent les fichiers
     
    ChDir (NomDir)
     
    Dim XL As Excel.Application
    Dim nomClasseur1 As String
     
     
    Set XL = CreateObject("Excel.Application")
    nomClasseur1 = "Essai" & a & m & ".xls"
     
    DoCmd.TransferSpreadsheet acImport, , "TableTest" & a & m, "D:\Test\" & nomClasseur1, 0
    name = "TableTest" & a & m
     
    Dim dbCourante As DAO.Database
    Dim rstRequete As DAO.Recordset
     
    Dim strOPPO As String
     
    'Définir la base de travail comme la base actuelle
    Set dbCourante = CurrentDb
     
    'Définir la requête
    Sql = "SELECT " & name & ".OPPO, " & name & ".MPE, " & name & ".MPF, " & name & ".MRE, " & name & ".MRF, " & name & ".M__, '2005_T3' AS année FROM " & name & " WHERE getTable.CBQD='total' And " & name & ".MOIS='total' And " & name & ".CMOP='total';"
     
    'Exécuter la requête définie par SQL
    Set rstRequete = dbCourante.OpenRecordset(Sql)
     
    'Récupérer la valeur OPPO pour l'enregistrement de la requête pour la placer dans une variable (pour un usage futur)
    strOPPO = rstRequete!OPPO
    'Se déconnecter de la requête et de la base
    Set rstRequete = Nothing
    Set dbCourante = Nothing
     
    Dim Var As String
     
     
    'Sql = "INSERT INTO TableTest ( année, OPPO, MPE, MPF, MRE, MRF, M__ ) SELECT  " & strOPPO & ".année, " & strOPPO & ".OPPO, " & strOPPO & ".MPE," & strOPPO & ".MPF," & strOPPO & ".MRE," & strOPPO & ".MRF," & strOPPO & ".M__ FROM " & strOPPO & ";"
    'DoCmd.RunSQL Sql
     
     
     
    Exit_Commande13_Click:
        Exit Sub
     
    Err_Commande13_Click:
        MsgBox Err.Description
        Resume Exit_Commande13_Click
    End Sub

  9. #9
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par darkspoilt
    en fait mon select va servir a etre ajouté avec une requete
    ! Dans ce cas, le code que je t'ai proposé ne correspond pas puisque tu ne cherches pas à ouvrir la requête pour l'utilisateur!

    Si je comprends bien.. pourquoi ne mets tu pas directement le INSERT dans la requête initiale?

    Je pense que tu devrais prendre le temps de finaliser ta requête à l'aide du QBE avant de tenter de la transcrire en VBA.

    Un conseil en passant: utilises les alias pour simplifier ta syntaxe. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    'Sql="INSERT INTO TableTest ( année, OPPO, MPE, MPF, MRE, MRF, M__ ) SELECT  " & Var & ".année, " & Var & ".OPPO, "& Var & ".MPE," & Var & "..MPF," & Var & "..MRE," & Var & "..MRF," & Var & "..M__ FROM" & Var & ";"
     
    Sql="INSERT INTO TableTest ( année, OPPO, MPE, MPF, MRE, MRF, M__ ) SELECT  MaSource.année, MaSource.OPPO, MaSource.MPE, MaSource.MPF,MaSource.MRE,MaSource.MRF,MaSource.M__ FROM " & Var & " as MaSource;"

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 226
    Points : 72
    Points
    72
    Par défaut
    Je fait ma premiere requête pour ajouter une colonne année que je rempli a trvers le code d'ou la raison de mon premier Select c'est pour filtrer et ajouter une colonne (année) a ma premiere table si c'est possible de faire cela en une fois je veux bien la solution ncar je ne vois pas comment

    ma premiere idée est de faire
    nom de la requete Req2005_T3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT PJPF2005_T3.OPPO, PJPF2005_T3.MPE, PJPF2005_T3.MPF, PJPF2005_T3.MRE, PJPF2005_T3.MRF, PJPF2005_T3.M__, "2005_T3" AS année
    FROM PJPF2005_T3
    WHERE (((PJPF2005_T3.CBQD)="total") AND ((PJPF2005_T3.MOIS)="total") AND ((PJPF2005_T3.CMOP)="total"));
    et ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO Test ( année, OPPO, MPE, MPF, MRE, MRF, M__ )
    SELECT Req2005_T3.année, Req2005_T3.OPPO, Req2005_T3.MPE, Req2005_T3.MPF, Req2005_T3.MRE, Req2005_T3.MRF, Req2005_T3.M__
    FROM Req2005_T3;
    total étant une valeur
    Req2005_T3 une requete selection

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 226
    Points : 72
    Points
    72
    Par défaut
    La solution est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL = "INSERT INTO Test ( OPPO, MPE, MPF, MRE, MRF, M__, année) " & _
        "SELECT OPPO, MPE, MPF, MRE, MRF, M__, " & d & " AS année " & _
        "FROM" & name & _
        "WHERE CBQD=""total"" AND MOIS=""total"" AND CMOP=""total"";"

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

Discussions similaires

  1. VBA: Probleme exécution requete Update
    Par jeo13 dans le forum Requêtes et SQL.
    Réponses: 19
    Dernier message: 10/09/2008, 08h14
  2. [BO 6.5.1][VBA] probleme de requete
    Par olivier45fr dans le forum SDK
    Réponses: 15
    Dernier message: 22/01/2008, 11h06
  3. SQL VBA probleme de requete ajout
    Par darkspoilt dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/05/2007, 15h55
  4. probleme de requetes VBA/ACESS. erreur execution 3251
    Par schwinny dans le forum Access
    Réponses: 9
    Dernier message: 05/07/2006, 10h11
  5. [VBA] probleme requete
    Par snaxisnake dans le forum Access
    Réponses: 3
    Dernier message: 02/05/2006, 17h49

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