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

IHM Discussion :

Comment créer des enregistrements à partir de deux tables vers une troisième table


Sujet :

IHM

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Comment créer des enregistrements à partir de deux tables vers une troisième table
    Bonjour,
    Voici une partie de la structure de ma base: Cf. PJ

    Mon besoin:
    1. Dans un formulaire: choisir des contacts via les filtres à disposition dans la barre de menu,
    2. Choisir dans une liste déroulante une campagne
    3. Créer les enregistrements dans [Participants_aux_campagnes] à partir de ces deux choix.
    Je souhaite y arriver via une requête création.
    Ma difficulté est lorsqu'il faut que cette requête création ne retienne que les enregistrements que j'aurai sélectionnés via les filtres.
    Faut-il que mon formulaire soit basé sur la table [Contacts]? Et ensuite?...Merci de vos conseils!
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 285
    Points : 19 484
    Points
    19 484
    Billets dans le blog
    64
    Par défaut
    Bonjour,

    Il s'agit d'une relation plusieurs-à-plusieurs :

    Pour la saisie, vous pouvez avoir un formulaire d'inscription basé sur la table Campagnes, et contenant un sous-formulaire, basé sur la table [Participants aux campagnes], sur lequel vous enregistrez les participants à l'aide d'une liste déroulante.

    C'est un peu comme les inscriptions à un examen.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    Merci de cette réponse aussi rapide. Effectivement il y a une similarité.

    Seulement, les inscrits le sont un par un. J'ai besoin d'inscrire d'un seul coup plusieurs étudiants, si je poursuis l'analogie.

    Exemple: Sélectionner tous les étudiants qui ont 18 ans (ou autres critères) et tous les inscrire à l'examen 3 en un clic. C'est là où je cale un peu...

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 285
    Points : 19 484
    Points
    19 484
    Billets dans le blog
    64
    Par défaut
    Il faudrait essayer avec une requête insertion :

    https://docs.microsoft.com/fr-fr/off...oft-access-sql
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 285
    Points : 19 484
    Points
    19 484
    Billets dans le blog
    64
    Par défaut
    Bonjour,

    J'essaierai ce type de code, par exemple pour ajouter les contacts nés en 2000, pour la campagne dont le numéro a été sélectionné sur le formulaire actif (champ Id_Campagne) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim dbs As Database, strSQL as string
     
    Set dbs = currentdb
     
    strSQL = " INSERT INTO [Participants aux campagnes](ID_Contacts, ID_Campagnes) " & _ 
                      "SELECT ID, " & Me.[Id_Campagne] & " As ID_Campagne " & _ 
                      "FROM [Contacts] " & _
                      "WHERE Year([Date de naissance]) = 2000;"
     
    dbs.Execute  strSQL, dbfailonerror
     
    set dbs = Nothing
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Merci de ces suggestions. Le problème est que le filtre varie d'une campagne à l'autre (tel ou tel paramètre sur tel ou tel champ, 6 champs possibles), c'est pour cela que je souhaite utiliser le(s) filtre(s) de la barre de menu, car il n'y a rien à programmer, les outils sont là. J'arrive alors à une liste qui résulte du filtrage. C'est cette liste entière que je veux inscrire dans la campagne.

    Lorsque je crée une requête Ajout, il faudrait qu'elle ne s'applique que sur cette liste filtrée: c'est là où je n'y arrive pas: toute la table est retenue dans la requête, sans qu'elle ne prenne en compte le filtre.
    Y aurait-il un moyen de récupérer ce filtre et de l'appliquer dans la requête Ajout? Ou une autre solution.

    Encore merci de votre aide!

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 285
    Points : 19 484
    Points
    19 484
    Billets dans le blog
    64
    Par défaut
    Pouvez-vous poster une image du filtre de la barre de menu ?

    S'il s'agit de filtrer un formulaire alors le filtre est récupérable à l'aide de sa propriété filter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    strSQL = " INSERT INTO [Participants aux campagnes](ID_Contacts, ID_Campagnes) " & _ 
                      "SELECT ID, " & Me.[Id_Campagne] & " As ID_Campagne " & _ 
                      "FROM [Contacts] " & _
                      "WHERE " & Me.Filter
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Si je peux récupérer le filtre, alors je crois que j'approche de la solution.
    Quand je parle du filtre de la barre de menu, c'est les options qui sont entourées en rouge ci-dessous.


    1. Dans le ss formulaire de gauche je choisis mes contacts avec les filtres du menu (entourés en rouge).
    2. Je choisis une campagne dans le sous formulaire à droite (que je vais sûrement changer en liste déroulante. On est ici dans un brouillon de mon formulaire)
    3. Je crée la requête ajout en SQL selon votre suggestion, car sans le SQL je ne sais pas comment récupérer le filtre.

    Je pense d'ailleurs créer un formulaire directement basé sur la table Contact, plutôt qu'un sous formulaire comme c'est le cas actuellement.
    Je vais essayer!
    Images attachées Images attachées  

  9. #9
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Suite.. Du plus et du moins
    Bonjour,
    Un immense merci!
    Je n'ai pas pu avancer sur le sujet depuis un certain temps.
    MAIS: J'ai fait un essai sur une autre base et cela fonctionne!!! Un immense merci car le code est indispensable et je ne m'y connais pas assez à ce niveau-là.

    MALHEUREUSEMENT: Lorsque je suis passé sur ma base réelle (sur un autre ordi, est-ce que cela joue?!?) qui a besoin de cela, lorsque je lance la procédure événementielle, apparaît:

    Nom : BDD PB compil.png
Affichages : 97
Taille : 15,5 Ko

    En faisant des recherches il faut semble-t-il aller dans outils -->références--> cocher microsoft dao3.6 object library. Mais lorsque j'essaie cette action, cela indique "Nom de Module, de projet ou de bibliothèque déjà utilisé"
    Et si j'essaie de décocher Microsoft Access 15.0 Objet library, il refuse en indiquant "Impossible de supprimer le contrôle ou la référence; en cours d'utilisation", même si je ferme toutes les fenêtres formulaire &Co
    Et là, je suis bloqué.
    Avez-vous une solution? Merci de votre soutien!!!

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 285
    Points : 19 484
    Points
    19 484
    Billets dans le blog
    64
    Par défaut
    Bonjour,

    Essayez de préfixer avec le nom de la librairie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim dbs As DAO.Database
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  11. #11
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Quelle réactivité! Merci.
    Et cela résoud ce problème.

    Maintenant voici le code utilisé:
    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
    Private Sub Commande312_Click()
    
    Dim dbs As DAO.Database, strSQL As String
    
    Set dbs = CurrentDb
     
    strSQL = " INSERT INTO [Participants aux campagnes](ID_Contacts, ID_Campagnes) " & _
                      "SELECT ID, " & Me.[ID_CampagneChoisie] & " As ID_Campagne " & _
                      "FROM [Contacts] " & _
                      "WHERE " & Me.Filter
     
    dbs.Execute strSQL, dbFailOnError
     
    Set dbs = Nothing
    
    
    End Sub
    Le bug: En gras dans le code: ce qui est surligné lors de l'arrêt

    Erreur d'execution '3061'
    Trop peu de paramètres. 1 attendu.

    Là aussi bizarre car je ne vois pas ce qui diffère de votre code, ni de mon essai réussi sur l'autre base.
    Le code n'est pas mon fort..
    Merci

  12. #12
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 285
    Points : 19 484
    Points
    19 484
    Billets dans le blog
    64
    Par défaut
    Il faudrait faire un :

    Avant la ligne de l'erreur pour voir ce qu'il y a dans la chaîne SQL, et verifier si les champs qui s'affichent sont bien présents dans les 2 tables.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  13. #13
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Bonjour,
    Voilà ce que cela donne:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO [Participants aux campagnes](ID_Contacts, ID_Campagnes) 
    SELECT ID, 132 As ID_Campagne 
    FROM [Contacts] 
    WHERE (((Contacts.CodePostal Is Null Or Contacts.CodePostal=""))) And ([Lookup_Type de contact].[Type de donateur]="Médias")

    Il y a donc à mon sens les deux paramètres attendus: ID et 132 (Identifiant de la campagne que j'ai retenue). Je ne vois pas l'erreur.

    Merci!

  14. #14
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 285
    Points : 19 484
    Points
    19 484
    Billets dans le blog
    64
    Par défaut
    Bonjour,

    Dans le critère je vois ([Lookup_Type de contact].[Type de donateur]="Médias"), qu'il ne reconnait pas dans la table [Contacts]. Ce qui me fait dire que la requête source du formulaire est basée sur les tables [Contacts] et [Lookup_Type de contact]. Cette requête devrait donc remplacer la table Contacts dans le select :

    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 Commande312_Click()
     
    Dim dbs As DAO.Database, strSQL As String
     
    Set dbs = CurrentDb
     
    strSQL = " INSERT INTO [Participants aux campagnes](ID_Contacts, ID_Campagnes) " & _
                      "SELECT ID, " & Me.[ID_CampagneChoisie] & " As ID_Campagne " & _
                      "FROM [LaRequêteSource] " & _
                      "WHERE " & Me.Filter
     
    dbs.Execute strSQL, dbFailOnError
     
    Set dbs = Nothing
     
    End Sub
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  15. #15
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Merci
    Après une longue interruption, j'ai pu reprendre le sujet.
    Et ça marche!
    Ceci pour vous remercier de cet accompagnement qui m'a permis d'aboutir.

    Je rencontre une autre difficulté désormais (un problème résolu en amène un autre...).
    Une fois créé sur un filtre les enregistrements souhaités (Par exemple A, B, C), je peux avoir besoin de créer un autre filtre qui va trouver d'autres enregistrements à ajouter (B, D, E, F). En lançant la procédure, celle-ci s'arrête car elle tente de créer un doublon puisque B existe déjà.
    Et comme il s'agit de code, je ne m'y retrouve pas...
    Encore merci si vous avez le courage de m'accompagner!!!

    Nom : Capture d’écran 2022-04-13 165230.jpg
Affichages : 64
Taille : 21,5 Ko

  16. #16
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 285
    Points : 19 484
    Points
    19 484
    Billets dans le blog
    64
    Par défaut Manque d'infos
    Bonsoir,

    ça manque d'info

    Pouvez-vous poster le code actuel, avec une description de la structure de vos tables ?

    Cdlt
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/12/2009, 15h56
  2. Comment faire un rapport à partir de deux tables !?
    Par linger dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 30/03/2009, 20h18
  3. comment créer des .lib à partir de fichiers DEF?
    Par YOUBOY dans le forum Visual C++
    Réponses: 5
    Dernier message: 15/06/2007, 09h54
  4. Réponses: 2
    Dernier message: 30/01/2007, 09h02
  5. Comment créer des relances à partir d'1 table
    Par Rod_75 dans le forum Access
    Réponses: 9
    Dernier message: 01/03/2006, 15h42

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