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

Modélisation Discussion :

Relations Plusieurs a Plusieurs et Sous Formulaire


Sujet :

Modélisation

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 113
    Points : 52
    Points
    52
    Par défaut Relations Plusieurs a Plusieurs et Sous Formulaire
    Bonjour Tout le monde, j'ai un petit souci avec mes tables.

    Ma premiere Table s'appele tblRequete, et contient le numero de la requete(cle primaire), sa date de creation, son auteur, et la raison de sa creation.

    L'autre Table s'appele tblCuir et contient une liste de types de cuir : cuirNumber (cle primaire), son pays de provenance, son adherence. Bref, Une requete peut contenir plusieurs types de cuirs, et dans une meme logique, un type de cuir peut etre demandé dans plusieurs differentes requetes.
    Relations plusieurs a plusieurs.
    J'ai crée une table intermedaire qui contient deux champs (la cle primaire de chaque table) pour remedier a ce probleme

    Le souci est au niveau de la creation de mon sous formulaires, qui va me permettre de choisir les types de cuir demandé par une requete. Je peux avoir jusqu'a 100 cuir par requetes.

    Commenr faire ça ?

    merci

  2. #2
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Je me demande s'il faut vraiment envisager une relation de plusieurs à plusieurs.

    Je n'arrive pas à expliquer, mais j'ai l'intuition qu'une simple relation un à plusieurs devrait suffire.

    Avez vous essayer de me mettre la référence au cuir dans la table requête?

    Pierre

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonjour.

    @ pier.antoine
    Personnellement, je ne vois pas comment éviter la relation m:n. On se situe dans un cas similaire à celui d'une facturation d'articles (une table pour les factures, une pour les articles, et une pour les lignes de facture avec l'ID de la facture, l'id de l'article et les qtés et autres données)

    @Amne26
    Quel est le souci au niveau du sous-formulaire? En quoi le fait qu'il y ait une centaine de lignes pour une requête pose-t-il problème?

  4. #4
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Oui évidemment. Beau loupé.

    Merci de l'info

    Pierre

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 113
    Points : 52
    Points
    52
    Par défaut
    Je ne vois pas comment faire la suite.

    Quel formulaire je dois creer en premier et lequel doit etre le sous-formulaire.
    Moi ce que je voudrais avoir, c est qu'un utilisateur ouvre ma database et la il ecrit un nouveau numero de requete (cle primaire) avec tous les details necessaire (date de creation, demandeur..). A partir de la, je voudrais avoir un sous-formulaire dans lequel l'utilisateur va pouvoir choisir les types de cuir qu'il veut, or si un type de cuir n'existe pas dans la table je voudrais qu'il puisse l'inserer (avec les details necessaires) et que ca se stock dans la tabe tblCuir, pour qu'on puisse l'utiliser dans d'autres requetes.

    Que dois-je faire

  6. #6
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Pour moi :
    - il faut créer un formulaire (f_Cuir_Choix) à partir de la table intermédiaire, avec l'ID de cette table non visible, juste pour faire le lien avec la table tblRequete), et un contrôle Liste déroulante, pour choisir les cuirs.

    - ensuite, dans le formulaire de saisie de la table tblRequete, on insère un sous formulaire dans lequel on mets le formulaire f_Cuir_Choix. Bien indiquer les champs père et fils dans le contrôle sous-formualire du formulaire de saisie de la table tblRequete.

    Normalement cela fonctionne.

    Pour pouvoir ajouter des valeurs dans la table cuirs, il faut se servir de l'évenement "Sur absence de liste", du contrôle liste déroulante "Cuir" du formulaire f_Cuir_Choix. Pour lévenement, soit ouvrir un formulaire de saisie des cuirs, soit demander les info en vba (par inputbox, puis écrire directement dans la table cuir).

    Pierre

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 113
    Points : 52
    Points
    52
    Par défaut
    Merci pour le coup de main les gas...mais un problem subsiste encore, Comment ajouter un nouveau enregistrement directement dans la table tblCuir. J'ai lu le topic sur ajout d'un enregistrement sur l'evenement Not In List du forum, mais j'ai les deux messages suivant qui apparaissent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    You are  about to append 1 row(s)..
    ce qui est correct, car cela veut dire qu'il va me l'ajouter dans la table, l'autre message me dit ce qui suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The text you entered is not an item in the list
    .

    C'est vraiment la derniere touche...pouvez vous m'aider avec ca. Merci

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 113
    Points : 52
    Points
    52
    Par défaut
    C'est correcte tout le monde, je viens de trouver le moyen d'ajouter directement dans ma table tblcuir de nouveaux enregistrements.

    Mais un probleme subsite, comment faire en sorte que si je selectionne un type de cuir dans une requete, je ne puisse pas le selectionner encore fois et qu'il n'apparaisse plus dans le droplist.

    Merci

  9. #9
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour amne26

    Juste une piste. C'est purement de la théorie, je n'ai absolument pas appliqué, et ne connaît pas assez ni VBA ni SQL pour t'aider plus après.

    Voilà.

    Je pense que pour que la liste des cuirs ne fassent apparaître que ceux qui n'ont pas encore été choisis, il faut que la source de cette liste soit non pas la table "cuir", mais une expression SQL. Le but est de modifier cette expression en fonction des cuirs déjà choisi.

    Je mettrai donc un code dans l'événement "On focus" du contrôle de ta liste.

    Aucune idée du code, mais je te donne le déroulement que j'envisagerai.

    L'expression SQL devrait être de la forme

    SELECT (code de l'ID cuir / Intitulé du cuir) de la table cuir WHERE ID cuir est différent d'une chaîne XXXX

    Mes connaissances en syntaxe SQL ne peuvent pas me permettre de certifier que c'est possible mais j'espère que si.

    Dans XXXX on va concaténer les différentes valeurs d'ID cuir déjà présente pour la requête considérée.

    Pour fabriquer cette chaîne XXXX, j'envisagerai comme solution de faire une boucle sur les enregistrements de la table intermédiaires qui concernent la requête

    Quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    dim  NB 'le nombre d'enregistrement de la table intermédiaire concernant la requête
     
     
    for z to NB
    XXXX = XXXX & " and " & IDCuir
    Next
     
    'SQL = Select ..... FROM.... WHERE ID Cuire n'est pas égal à WWW
     
    lstCUIR.rowsource = SQL
    lstCUIR requery
    Voiilà.

    Je rappelle que j'ai des connaissances en SQL très parcellaires.

    Si ça a pu aider...

    Pierre

    PS :

    Cette idée de créer une chaîne SQL à mettre dans la source d'une liste, je l'ai trouvé dans le tutoriel sur la recherche multi critère, dans la partie concernant l'affichage des résultats.

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour, Pier.Antoine et Amne26 l'idée est de placer le code SQL dans la propriété Contenu de la zone de liste modifiable du sous-formulaire :

    Il s'agît de selectionner tous les enregistrements de la table Tblcuirs pour lesquels la valeur de cle n'est pas dans la sélection des enregistrements de la table intermédiaire Requetes-Cuirs pour lesquels la cle est celle de la requête en cours.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT TblCuirs.* FROM TblCuirs
    WHERE TblCuirs.ID NOT IN 
    (SELECT IDCuir FROM TblRequeteCuirs 
    WHERE TblRequeteCuirs.IDRequete=[TblRequetes.ID])
    Bien sûr le problème majeur est qu'il est nécessaire que l'enregistrement de la requête soit déjà créé dans la table TblRequêtes, il faut peut-être passer par l'événement BeforeUpdate du sous-formulaire dans lequel sera tester la valeur de la clé de la requête si cette valeur est différente de 0 alors la requête exite déjà et tout est OK sinon ajouter la requête à la table TblRequetes puis positionner le formulaire principal sur cet enregistrement ( ou alors récupérer la valeur de la nouvelle clé) et mettre à jour la zone de liste modifiable des types de cuir.
    De cette manière normalement à chaque nouvel ajout dans le sous-formulaire d'un type de cuir, la liste propose les types de cuirs restants.

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je proposerais une solution "simple" qui laisserait le cuir déjà sélectionné apparaître dans la liste déroulante, mais qui bloquerait l'enregistrement.

    C'est de prévoir comme clé primaire de la table intermédiaire une clé basée sur les deux clés externes.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 113
    Points : 52
    Points
    52
    Par défaut
    Messieurs j'ai trouve la requete qui me verifie la liste de types de cuir non encore selectionne pour une demande donné. Mais la, j'ai un probleme: comment mettre a jour la drop list a chaque fois que je selectionne un type de cuir. Pour le moment pour voir les types de cuirs non encore selectionne dans ma table, je dois fermer le formulaire et le ré ouvrir.

    Comment appeler ou mettre à jour ma requete dès que je fais un choix depuis ma droplist.

    Merci

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Amne26, je crois que tu peux placer cette instruction dans l'événement AfterUpdate de la zone de liste
    NomDeTalistBox.Requery

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

Discussions similaires

  1. [AC-2003] Exporter plusieurs enregistrements d'un sous-formulaire
    Par valy_442 dans le forum IHM
    Réponses: 8
    Dernier message: 16/11/2010, 11h01
  2. [AC-2007] Test sur plusieurs enregistrements d'un sous-formulaire
    Par Crachover dans le forum IHM
    Réponses: 4
    Dernier message: 18/01/2010, 16h38
  3. Réponses: 1
    Dernier message: 19/11/2007, 17h18
  4. Réponses: 3
    Dernier message: 19/04/2007, 17h19
  5. Formulaire regroupant plusieur fois le meme sous-formulaire?
    Par Goldenduck4000 dans le forum Access
    Réponses: 2
    Dernier message: 18/04/2006, 15h57

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