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 :

INSERT INTO vba


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut INSERT INTO vba
    Bonsoir,

    j'essaie de remplir une table intermédiaire avec une requête en vba mais sans succès

    J'ai un formulaire Contrat site dans lequel je place deux zones de liste pour associer à ce contrat, les compagnons du sous traitant qui vont travailler sur le site. En cliquant sur le bouton unadroite, cela fait passer le nom du compagnon de la zone de liste de gauche vers la zone de liste à droite

    je voudrais completer la T_contratsite_compagnon qui comporte deux champs, l'id_contratsite et l'id_compagnon qui proviennent respectivement de la t_contratsite et la t_compagnon

    voici mon code
    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
    Private Sub cmdUnADroite_Click()
    Dim sql
     
      If Not IsNull(Me.Tous_les_compagnons) Then
        sql = "INSERT INTO T_contratsite_compagnon SELECT Id_compagnon,Id_contrat_site FROM T_compagnon,T_contrat_site WHERE ID_compagnon = " & Me.Tous_les_compagnons & ID_CONTRAT_SITE = " & Me.ID_CONTRAT_SITE"
     
     
        DoCmd.SetWarnings False
     
        DoCmd.RunSQL sql
        Me.Tous_les_compagnons.Requery
        Me.Compagnons_affectés.Requery
       '    End If
     
        DoCmd.SetWarnings True
    End Sub
    c'est mon sql qui ne fonctionne pas

    savez vous comment je peux associer les deux champs des deux tables dans la table intermédiaire ?

    merci à vous
    isabelle

  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 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour Isabelle,
    cela fait passer le nom du compagnon de la zone de liste de gauche vers la zone de liste à droite
    Si id_contratsite et id_compagnon sont de type "texte" alors il faudrait les encadrer de guillemets comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "INSERT INTO T_contratsite_compagnon ( id_compagnon, id_contratsie ) SELECT """ & Me.[Tous_les_compagnons] & """ AS Expr1, """ & Me.[Id_contrat_site] & """AS Expr2;    "
    Les champs eussent été(*) numériques, alors simples guillemets à la place des triples guillemets.

    Bonne journée.

    (*) il y a des jours comme cela !

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Re
    Proposition de recette pour créer ton sql

    1° créer la requête avec l’aide Access
    2° copier le « sql brut » et le coller dans la fenêtre d’exécution pour y apporter quelques retouches
    3° mettre tout sur une ligne ( se positionner sur la première ligne et End tab Delete)
    4° remplacer les données statiques dans la requête par le nom des variables
    Exemple
    Formulaires![LeFormulaireDsLequelJeTravaille]![Tous_les_compagnons] --> Me. [Tous_les_compagnons]
    5° trancher le « sql brut » en parties fixes (encadrées de simples guillemets) et parties variables en les reliant par des ‘ & ’
    6° si une tranche variable est de type texte, tripler le guillemet final de la tranche qui le précède et le guillemet initial de la tranche qui le suit.
    7° traduire le reste en syntaxe Vba : Formulaires - - -> Forms, les points virgules - - - > virgules (dans les fonctions par exemple)
    8° insérer le « sql toiletté » dans le code
    9° croiser les doigts


    A l’inverse
    Proposition de recette pour comprendre pourquoi ton sql ne fonctionne pas

    1° dans le code, créer le sql dans une variable avant de l’utiliser
    2° placer un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug .print  CetteVariable
    juste avant l’instruction où on l’utilise
    3° provoquer l’exécution du code litigieux
    4° récupérer dans la fenêtre d’exécution le sql généré par le programme
    5° ouvrir une nouvelle requête en mode création
    6° à l’invite « ajouter une table », cliquer sur FERMER
    7° cliquer sur sql dans la barre menu
    8° remplacer « Select ; » par le copier coller du sql ci-dessus.
    9° cliquer sur affichage dans le menu et constater le contenu de l’exécution du sql.
    10° rougir de confusion et essayer de faire mieux la prochaine fois.

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

    @ClaudeLELOUP

    Je rajouterais cela : http://cafeine.developpez.com/access...el/debugprint/

    Starec

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Merci Starec
    C'est manifestement beaucoup mieux !
    C'est toute la différence entre un Vulgus Homo numeris(*) et Léonard de Vinci ! cafeine

    (*) un comptable ordinaire

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Merci pour ces infos j'en ai pris bonne note

    j'ai réussi à glisser les noms individuellement de droite à gauche et vice versa, j'ai même réussi à passer tous les noms de gauche à droite, mais je n'arrive pas à faire le "Tous à droite".

    J'ai bien lu le tuto et utiliser la recette maison ce qui m'a bien aidé, mais je n'arrive pas à lui dire d'insérer tous les enregistrements de ma liste de gauche en un click dans ma liste de droite (et par la même dans ma table intermédiaire)

    faut il glisser une astérix quelque part ?

    voici le code utiliser pour unAdroite que je voudrais modifier pour TousAdroite

    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
    Private Sub cmdTousADroite_Click()
    Dim sql
     
      If Not IsNull(Me.Tous_les_compagnons) Then
      sql = "INSERT INTO T_contratsite_compagnon (Id_compagnon, Id_contrat_site) values (" & Me.Tous_les_compagnons & ", " & Me.ID_CONTRAT_SITE & ")"
     
     
        DoCmd.SetWarnings False
     
        DoCmd.RunSQL sql
        Me.Tous_les_compagnons.Requery
        Me.Compagnons_affectés.Requery
            End If
     
        DoCmd.SetWarnings True
    End Sub
    merci beaucoup
    isabelle

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

Discussions similaires

  1. [AC-2007] Problème syntaxe requete INSERT INTO VBA
    Par afrogwada dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/07/2013, 09h44
  2. [VBA]INSERT INTO et récupération d'id auto
    Par norkius dans le forum Access
    Réponses: 8
    Dernier message: 24/02/2013, 19h17
  3. prob insert into vba
    Par croke dans le forum VBA Access
    Réponses: 6
    Dernier message: 19/02/2012, 16h54
  4. [VBA-A] INSERT INTO en vérifiant les données avant !!
    Par Rumeurs dans le forum VBA Access
    Réponses: 9
    Dernier message: 12/04/2006, 14h07
  5. [VBA-A] INSERT INTO + PBL DE DOUBLONS
    Par forsay1 dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/04/2006, 11h45

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