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 :

[ACCESS] Bouton Requete SQL INSERT INTO


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 31
    Points
    31
    Par défaut [ACCESS] Bouton Requete SQL INSERT INTO
    Bonjour à tous, j'ai actuellement une grosse base de donnée pour la gestion d'une épicerie sous access que je dois rendre Lundi et j'aimerai qu'elle soit nickel pour ma présentation au Prof.

    J'ai crée plusieurs formulaires et là j'aimerai créer un formulaire de saisie avec execution de la saisie en appuyant sur un bouton.

    Voici ma table en MLDR : CATALOGUE (Ref_Catalogue, #N_Fournisseur, Libelle_Catalogue, Date_Catalogue)

    Mon Formulaire "A_Catalogue" contien 3 champs de saisie pour la ref, le libellé et la date et une liste déroulante représentant la requete SQL suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Libelle_Fournisseur FROM FOURNISSEUR;
    Là pas de soucis.

    Voici maintenant mon bouton Command4 avec la commande VB suivante:



    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Command4_Click()
        var1 = Forms!A_Catalogue!Ref_Catalogue
        var2 = (DoCmd.RunSQL("SELECT FOURNISSEUR.N_Fournisseur FROM FOURNISSEUR WHERE FOURNISSEUR.Libelle_Fournisseur=forms!A_Catalogue!Libelle_Fournisseur;" ))
        var3 = Forms!A_Catalogue!Libelle_Catalogue
        var4 = Forms!A_Catalogue!Date_Catalogue
        DoCmd.RunSQL ("INSERT INTO CATALOGUE VALUES ('var1','var2','var3','var3');" )
        DoCmd.Save
        DoCmd.Close
        DoCmd.OpenForm "Gestion_Catalogue"
    End Sub

    Je suis novice en vba et je ne sais pas si mes déclarations de variables ni mes fonctions sont bonnes.

    Lorsque j'appuis sur le bouton, il me donne le mésage d'érreur suivant:
    Compile Error: Expected Fonction or Variable

    Et le .RunSQL de var2 est en surbrillance.

    Pouvez vous l'aider à affiner mon code?

    Merci d'avance

    EDIT
    ---------------
    J'ai modifié la commande, je pense que je ne suis pas très loin, je ne pense pas avoir besoin de déclarer mes variables, je pense que inserer les saisies de chaques champs dans la requete insert est suffisant mais je m'y prend peut etre mal car j'ai un message d'erreur.

    Voici ma commande:



    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Command4_Click()
        DoCmd.RunSQL "INSERT INTO CATALOGUE (Ref_Catalogue,N_Fournisseur,Libelle_Catalogue,Date_Catalogue) VALUES ('& Forms!A_Catalogue!Ref_Catalogue &','(SELECT FOURNISSEUR.N_Fournisseur FROM FOURNISSEUR WHERE FOURNISSEUR.Libelle_Fournisseur='& Forms!A_Catalogue!Libelle_Fournisseur &')','& Forms!A_Catalogue!Libelle_Catalogue &','& Forms!A_Catalogue!Date_Catalogue &');"
        DoCmd.Save
        DoCmd.Close
        DoCmd.OpenForm "Gestion_Catalogue"
    End Sub

    La requete s'execute mais il y a un message d'avertissement:


  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour et bienvenue Harry ,
    voici le code que tu devrais associer à ton bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim sql As String
    sql = "INSERT INTO Catalogue ( Ref_Catalogue, [#N_Fournisseur], Libelle_Catalogue, Date_Catalogue ) SELECT """ _
           & Me.Ref_Catalogue & """ AS Expr1, """ _
           & Me.FOURNISSEUR & """ AS Expr2, """ _
           & Me.Libelle_Catalogue & """ AS Expr3, """ _
           & Me.Date_catalogue & """ AS Expr4;"
    DoCmd.RunSQL (sql)
    Vérifie l'orthographe des noms de contrôles de ton formulaire (ici dans le code "Me.xxx") , j'ai dû les deviner en lisant ta tentative de code.
    Reviens si problème.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    Merci pour la réponce c'est très gentil.

    J'ai un peu du mal à comprendre ton explication:

    Je déclare une variable sql qui va contenir mon insert, je dois également mettre VALUES (ce que tu as pas mis)?

    De plus je ne comprend pas les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    & Me.Contrôle & """ AS Expr1"""
    C'est vraiment le coeur de ma base de donnée, sans ca je ne peux pas faire de saisie dynamique .

    Merci d'avance

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Tu as d'abord donné ceci
    Private Sub Command4_Click()
    DoCmd.RunSQL "INSERT INTO CATALOGUE (Ref_Catalogue,N_Fournisseur,Libelle_Catalogue,Date_Catalogue) VALUES ('& Forms!A_Catalogue!Ref_Catalogue &','(SELECT FOURNISSEUR.N_Fournisseur FROM FOURNISSEUR WHERE FOURNISSEUR.Libelle_Fournisseur='& Forms!A_Catalogue!Libelle_Fournisseur &')','& Forms!A_Catalogue!Libelle_Catalogue &','& Forms!A_Catalogue!Date_Catalogue &');"
    DoCmd.Save
    DoCmd.Close
    DoCmd.OpenForm "Gestion_Catalogue"
    End Sub
    J'ai deviné que ce code était associé à l'évènement "sur clic" du bouton qui s'appelle "Command4" dans ton formulaire "A_Catalogue"

    Je t'ai proposé de remplacer ce code par celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Command4_Click()
    Dim sql As String
    sql = "INSERT INTO Catalogue ( Ref_Catalogue, [#N_Fournisseur], Libelle_Catalogue, Date_Catalogue ) SELECT """ _
           & Me.Ref_Catalogue & """ AS Expr1, """ _
           & Me.FOURNISSEUR & """ AS Expr2, """ _
           & Me.Libelle_Catalogue & """ AS Expr3, """ _
           & Me.Date_catalogue & """ AS Expr4;"
    DoCmd.RunSQL (sql)
    end sub
    Dans ce code, on y construit l'équivalent d'une requête qui, en français dirait ceci :
    INSERT INTO Catalogue ( Ref_Catalogue
    Dans la table "Catalogue", ajouter un enregistrement ...
    INSERT INTO Catalogue( Ref_Catalogue
    ... avec dans le champ "Ref_catalogue" ...
    SELECT """ & Me.Ref_Catalogue & """ AS Expr1, """
    ... le contenu du contrôle qui s'appelle "Ref_Catalogue" ...
    SELECT """ & Me.Ref_Catalogue & """ AS Expr1, """
    ... du formulaire dans lequel on se trouve ...

    Et ainsi de suite :
    dans le champ de la table "#N_Fournisseur", le contenu du contrôle "FOURNISSEUR" ....

    J'attirais ensuite ton attention sur le fait que tu devais bien vérifier l'orthographe des noms de contrôles que j'ai indiqué.

    Aller, bonne chance.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    J'ai lu d'autres posts résolus il y a peut sur le même modèle que mon soucis et j'ai trouvé la solution sa marche à merveille!

    J'ai eut du mal à comprendre surtout que dans mon formulaire A_Catalogue, je ne choisisait pas le N_Fournisseur mais le Libelle_Fournisseur dans une liste déroulante, tu va pouvoir le voir dans mon code.

    Je te montre mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Command4_Click()
        Dim sql As String
            sql = "INSERT INTO Catalogue ( Ref_Catalogue, N_Fournisseur, Libelle_Catalogue, Date_Catalogue ) SELECT  """ & Me.Ref_Catalogue & """ AS Expr1, FOURNISSEUR.N_Fournisseur,""" & Me.Libelle_Catalogue & """ AS Expr3,""" & Me.Date_Catalogue & """ AS Expr4 FROM FOURNISSEUR WHERE (((FOURNISSEUR.Libelle_Fournisseur)=forms.[A_Catalogue].[Libelle_Fournisseur]));"
        DoCmd.RunSQL (sql)
        DoCmd.Save
        DoCmd.Close
        DoCmd.OpenForm "Gestion_Catalogue"
    End Sub
    En tout cas, merci beaucoup car je me suis embété toute l'après midi d'hier pour trouver ce code, maintenant je vais pouvoir l'appliquer à tout mes autres formulaires de saisie, je reviendrai peut etre vous voir pour un formulaire d'appercu avec tri mais on verra bien.

    Merci encore.

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    J'en suis ravi, Harry !
    Au plaisir

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    Décidément j'ai du mal!

    J'ai pu faire un deuxième formulaire de saisie sans aucun soucis mais maintenant je veux en faire un troisème légèrement plus compliqué en saisissant des informations provenant de 3 listes réroulantes de 3 tables différentes et deux masques de saisie et un bouton ajouter.


    Listes réroulantes:
    Libelle_Produit
    Libelle_Catalogue
    Libelle_Conditionnement

    Masques de saisie:
    Reference
    Prix_Unitaire_Reference

    Voici mon code de bouton Command4

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Command4_Click()
        Dim sql As String
            sql = "INSERT INTO REFERENCE ( Reference, N_Produit, N_Catalogue, N_Conditionnement, Prix_Unitaire_Reference ) SELECT  " & Me.Reference & " AS Expr1, N_Produit, N_Catalogue, N_Conditionnement," & Me.Prix_Unitaire_Reference & " AS Expr2 FROM CATALOGUE, CONDITIONNEMENT, PRODUIT WHERE (((PRODUIT.Libelle_Produit)=[forms].[A_Reference].[Libelle_Produit]) AND ((CATALOGUE.Libelle_Catalogue)=[forms].[A_Reference].[Libelle_Catalogue]) AND ((CONDITIONNEMENT.Libelle_Conditionnement)=[forms].[A_Reference].[Libelle_Conditionnement]));"
        DoCmd.RunSQL (sql)
        DoCmd.Save
        DoCmd.Close
        DoCmd.OpenForm "Gestion_Reference"
    End Sub
    Voici le méssage d'erreur



    J'ai testé la requete sur les requetes Access en copiant le code SQL et sa marche bien pour mes trois liste déroulantes mais on dirait qu'il y a un soucis pour les masques de saisie.

    Merci encore une fois d'avance.

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Le message te dit simplement qu'il ne veut pas ajouter ce que tu lui demandes parce que, dans la table, il y a déjà un enregistrement avec la même clé.

    d'autre part à quoi sert ceci ?
    DoCmd.Save
    DoCmd.Close

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    DoCmd.Save permet de sauvegarder l'objet en cours (je le fait quand je fait des saisies simples mais je l'ai appliqué à chaque bouton de changement de formulaire)

    DoCmd.Close permet de fermer le formulaire en cours (sa donne l'illusion de passer d'un formulaire à un autre directement mais en fait je ferme l'un pour passer à l'autre)


    Par contre je ne pense pas avoir de contrainte de clé car je n'ai aucun enregistrement pour l'instant dans ma table c'est sa qui m'étonne....

    Si vous avez une autre solution je suis prenneur

Discussions similaires

  1. [AC-2010] Requete SQL INSERT INTO .. VALUES
    Par phoon dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/07/2012, 10h05
  2. [XL-2010] Erreur sur requete sql insert into
    Par rvtoulon dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/09/2011, 18h03
  3. [MySQL] Requetes SQL INSERT INTO WHERE
    Par makamine dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 22/05/2011, 10h05
  4. Syntaxe requete SQL insert into dans VBA
    Par @rkane dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 12/12/2006, 22h03
  5. erreur SQL ...INSERT INTO
    Par naidinp dans le forum ASP
    Réponses: 20
    Dernier message: 18/09/2003, 11h38

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