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 :

Requête SQL en VBA


Sujet :

VBA Access

  1. #1
    Membre confirmé Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut Requête SQL en VBA
    Bonjour, le cherche à appeller un requête SQL par un code VBA

    ma requête est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO T_Bilan (Client, [Annee] )
    SELECT T_Clients.NumClient, [Annee ?] AS Expr1
    FROM T_Clients;
    En vba j'ai ça mais ça me met un message d'erreur : Trop peu de parmètres, un attendu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Commande0_Click()
     Dim db As DAO.Database
        Set db = DBEngine.OpenDatabase("C:\Documents and Settings\stagiaire1\Bureau\Modeles\EssaiBilan.mdb")
        ' Exécution de la requête
        db.Execute "INSERT INTO T_Bilan ([Client], [Annee]) SELECT [T_Clients.NumClient],[Annee ?]AS Expr1 FROM T_Clients ;"
        Debug.Print "Records Affected = " & db.RecordsAffected
        db.Close
    End Sub
    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Par défaut
    Bonjour,
    A quoi correspond le champ [annee ?] ?

  3. #3
    Membre confirmé Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut
    En fait le lui demande d'ajouter dans la table T_Bilan un enregistrement pour chaque Numclient de la table T_Clients en renseignant aussi le champ "Annee", d'où le [Annee?], je demande à l'utilisateur de préciser pour quelle année il souhaite ajouté ces enregistrements !!

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Par défaut
    Fais un debug.print du texte de ta requête, cela te permettra de visualiser ce que tu exécutes.

  5. #5
    Membre confirmé Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut
    Avec Debug.print il me donne ça :

    INSERT INTO T_Bilan Set Annee = [Annee ?] T_Clients.NumClient

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Par défaut
    Y'a un souci là ta requête ne passe pas en entier.
    En plus, il y a un gros mélange d'instructions SQL.
    Normalement un INSERT tout seul ça donne
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO table (champ, champ) VALUES (valeur, valeur)
    Là tu te retrouves avec un 'set' qui correspond à un UPDATE.

    De plus si tu as fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.print "INSERT INTO T_Bilan ([Client], [Annee]) SELECT [T_Clients.NumClient],[Annee ?]AS Expr1 FROM T_Clients ;"
    Je ne vois pas comment tu peux te retrouver avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO T_Bilan Set Annee = [Annee ?] T_Clients.NumClient
    Enfin un petite remarque : pense aux balises de code.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Par défaut
    Différentes question :
    Tu lances ce code par un bouton, logiquement, ce bouton est sur un formulaire.
    Pourquoi ne pas faire saisir l'année sur le formulaire ou par une input box?

    Ton insert doit-il se faire sur une base distante ?

  8. #8
    Membre confirmé Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut
    OK j'ai refait Debug.print, et j'avais du me planter quelques part car là il me donne çà :

    INSERT INTO T_Bilan ([Client], [Annee]) SELECT [T_Clients.NumClient],[Annee ?]AS Expr1 FROM T_Clients ;

    Effectivement il serait intéressant de préciser l'année par une input box, mais comment faire passer la variable dans la requête ?
    Et non mon insert se faire sur la base actuelle

  9. #9
    Membre émérite Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Par défaut
    Salut,

    Un exemple:

    Ta requête:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PARAMETERS Année text;
    INSERT INTO T_Bilan ( Client, Année )
    SELECT T_Clients.NumClient, T_Clients.Année
    FROM T_Clients
    WHERE (((T_Clients.Année)=[Année]));

    Dans un formulaire:

    Une zone de texte nommée "Année" et un bouton nommé "bouton"

    Sur l'évènement Click de ton bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Bouton_Click()
    Dim db As DAO.Database
    Dim qd As DAO.QueryDef
     
    Set db = CurrentDb
    Set qd = db.QueryDefs("TaRequête")
          With qd
             .Parameters("année") = Forms![TonFormulaire]![année]
             End With
    qd.Execute
     
    End Sub

  10. #10
    Membre confirmé Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut
    Je ne comprend pas tous désolé!!

    Le code SQL, où est-ce qu'il faut que je le rentre ? Dans la procédure vba ou ailleurs???

    Merci de votre patience!

  11. #11
    Membre émérite Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Par défaut
    Citation Envoyé par e040098k
    Le code SQL, où est-ce qu'il faut que je le rentre
    Ce code est à placer dans une simple requête.

    Nouveau/Mode création/Fermer/Sql/coller

  12. #12
    Membre confirmé Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut
    Ok,

    C'est vrai que comme ça ca va être beaucoup plus simple !! Merci

    Seulement avec maintenant sur clique du bouton il me met une erreur d'éxecution :

    " Trop peu de paramètres attendu"

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Par défaut
    Tu as bien adapté le Sql à tes tables ?

  14. #14
    Membre confirmé Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut
    C'est ok ça marche merci beaucoup,

    Il s'agissait d'une simple erreur sur un accent !!

    Merci à vous pour votre aide !
    A bientôt

  15. #15
    Membre émérite Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Par défaut
    Dans
    Set qd = db.QueryDefs("TaRequête")
    tu as bien mis le nom de ta requête?

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

Discussions similaires

  1. Problème avec requête SQL dans VBA
    Par Mimisio dans le forum VBA Access
    Réponses: 10
    Dernier message: 13/07/2007, 11h00
  2. Requête SQL en VBA
    Par taisherg dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/06/2007, 15h36
  3. Réponses: 6
    Dernier message: 15/02/2007, 13h46
  4. 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
  5. Conversion d'une requête SQL en VBA
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 26/10/2004, 17h33

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