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

Access Discussion :

Utilisation des mêmes données d'une table à 2 reprises dans un seul formulaire


Sujet :

Access

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien Géomatique
    Inscrit en
    Janvier 2016
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien Géomatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 181
    Points : 101
    Points
    101
    Par défaut Utilisation des mêmes données d'une table à 2 reprises dans un seul formulaire
    Bonjour à tous!

    Mon titre n'est pas très clair et je vais tenter de l'expliquer mieux ici

    Donc je veux faire la création d'un formulaire pour des mandats d'arpentages. Dans ce formulaire il y aura les champs de la table Clients et j'aimerais avoir les mêmes champs pour une seconde parti du formulaire ERSONNE À CONTACTER.

    Client: KEVIN CANADA GJG JDF

    CONTACT: ALBERT CANADA GKG JDJ

    J'aimerais pouvoir choisir mon client dans un premier temps et mon contact dans un second temps. Le problème c'est que les 2 proviennent de la table CLIENTS. À noter que chaque nouveau contact pourrait devenir un futur client. Donc ALBERT CANADA deviendrait un nouvel enregistrement dans la table client.

    Pour se faire je ne vois pas d'autres solutions que la création de 2 tables soit: CLIENT ET CONTACT. Mais si un jour un contact devient un client ce serait intéressant d'avoir déjà les infos dans la table CLIENT.

    Bien entendu, si je met le champs NOM de CLIENT de la table CLIENT à 2 reprises sur un même formulaire, il n'est pas possible de changer d'enregistrement individuellement.

    J'espère avoir été le plus clair possible.
    Merci de votre aide, je suis certain que je passe à côté d'un explication trop simple.

  2. #2
    Membre régulier Avatar de DJOUFOU
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 167
    Points : 90
    Points
    90
    Par défaut
    personnellement je n'ai pas compris grand chose. Essai d’être plus explicite mais déjà pourquoi ne pas dissocier les clients des contacts.
    quel est l’intérêt pour que les clients et les contacts soient dans la même table?
    le problème ne semble pas être compliqué mais essai de bien expliquer sinon a priori tu dois avoir un table client avec les champs code, nom, adresse, contact, etc. Puis une autre table Contact avec les champs code, nom, adresse, etc.
    puis dans tes relations le champ "contact" de la table client est lié au champ "code" de la table contact.
    le champ contact de la table client peut être une liste déroulante ou l'on choisira le contact du client.
    Je suppose qu'un contact peut avoir plusieurs clients mais l'opposé ne serait pas possible?

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien Géomatique
    Inscrit en
    Janvier 2016
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien Géomatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 181
    Points : 101
    Points
    101
    Par défaut
    merci de ta réponse.

    Un mandat comporte 1 client.
    1 client comporte 1 ou plusieurs contacts.

    Lors de l'ouverture du mandat, j'entre mon client (de la table tblClients)
    J'ai commencé en utilisant un bouton sur le formulaire Mandat pour ajouter Clients, qui m'ouvre le formulaire Client. Dans celui-ci je choisi mon client dans les enregistrements ou je fais la création d'un nouvel enregistrement Client. Ensuite un bouton retourne à mon formulaire Mandat.

    Dans mon formulaire Mandat, j'ai les textbox qui sont associés à l'enregistrement sélectionné dans le formulaire précédent.

    Ensuite, un bouton Ajout Contact ouvre le formulaire Contact avec les même champs de la table Client et je procède de la même façon.

    Le but de vouloir mettre les contacts dans la table Client est d'avoir le plus d'information possible sur tout les personnes qui auront eu services avec l'entreprise.

    Si un client possède 4 contacts, il ne sera pas très long pour que la table contact sera plus garni que celle Client. Peut-être faire un sélect sur les 2 tables?

    Création table temporaire et supression suite au merge dans la table client?

    Est-ce que je t'éclaire un peu plus?

    De la façon dont je gère présentement.... je devrais avoir un formulaire pour chaque client et probablement 4 formulaires pour contact1 contact2 contact3 contact4.
    Ensuite j'ajouterai le referenceNoClient,referenceNoContact1,referenceNoContact2,...noMandat,Employé,temps dans une table tblMandat.
    Très peu optimisé
    Nom : Capture.PNG
Affichages : 115
Taille : 19,6 Ko

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 548
    Points
    24 548
    Par défaut
    Bonjour,
    J'ai parcouru ton 1er post.

    Pour moi faire résider Client et Contact (futur client) dans la même table n'est pas une hérésie. Il suffit simplement de les taguer (booléen + case à cocher).
    Pour le Client qui est lié à un Contact (ou le contraire) :
    2 cas / 2 solutions :

    1) il n'y a qu'un pour un (un client = un contact potentiel) un champ Entier Long qui va reprendre l'Id de ton Contact. J'espère que tu n'as pas oublier le champ id en autoincrement
    Une zone de liste déroulante ou un sous-formulaire pour l'afficher devrait faire l'affaire.

    2) il y a un pour plusieurs (un client = un à +sieurs contact potentiel) il faut utiliser la même mécanique mais avec un table de liaison composé de 3 champ. L'id autoincrement, l'Id client, l'Id contact.
    L'interface est plus délicate à gérer puisque tu as une table intermédiaire à t'oocuper.

    Evidemment tout cela sans séparer tes clients et contacts.

    Cordialement,

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien Géomatique
    Inscrit en
    Janvier 2016
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien Géomatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 181
    Points : 101
    Points
    101
    Par défaut
    Bonjour et merci de votre aide

    La 2e solution est celle que je devrai utiliser voulant plusieurs contact pour chaque clients.

    La table intermédiaire contenant id, idclient et idcontact. J'imagine que si j'ai plusieurs contact je devrai prévoir plusieur champs idcontact1-2-3-4.
    ou bien la table intermédiaire servira à stocker client 1 avec contact A client 1 avec contact B et client 1 avec contact C.

    Est-ce que la possibilité d'avoir une table client et une table contact est une possibilité à envisager?
    Suite à mon dernier message j'ai pensé utiliser un select inner join pour sélectionner les enregistrements qui se trouveront dans la table contact ET dans la table client pour les faire afficher dans mon listbox. Est-ce quelque chose qui serait stable à moyen/long terme?

    Sinon j'essaierai de comprendre un peu plus la manière que tu me décris. Pourquoi le boolean dont tu parles?
    Une table avec IDauto,nom,prenom,téléphone,champs boolean
    à quoi me sert-il... désolé je ne vois pas l'Astuce

    Merci encore de votre aide

  6. #6
    Membre régulier
    Homme Profil pro
    Technicien Géomatique
    Inscrit en
    Janvier 2016
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien Géomatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 181
    Points : 101
    Points
    101
    Par défaut
    Franchement, je galere...
    Svp detail ton explication pour 1 a plusieurs contact.

    L'idee de partir d'un bouton qui ouvre un formulaire clients est la bonne. Enfin je crois, ensuite je met un bouton pour executer une requete ajout dans ma table temporaire.

    comment faire pour ajouter seulement le champs selectionner?

    Dans ma requete en mode creation, puis-je indiquer que la valeur voulue est celle du formulaire Client?

    Si oui quel serait la syntaxe?


    Je vous remercie grandement d'avance

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 548
    Points
    24 548
    Par défaut
    Bonjour,

    Le booléen :
    Pour différencier le type Client ou Contact. Par exemple Vrai pourrait indiquer Client. Mais si tu préfères une valeur plus explicite rien ne t'empêche de mettre un champ texte avec une zone liste de 2 valeurs (Client, Contact). Le booléen simplifie les requête cependant.

    La table intermédiaire :
    Admettons un client A.
    On veut lui lier un nombre inconnu de Contact.

    Si la table intermédiaire contient Id, IdClient, IdContact1 à IdContactn tu ne pourras joindre que 4 contacts et avec de nombreuses relations :
    n Join soit un Join pas Champ Contacts + autant de table alias Client que de jointure Contact. Il te manque quelques bases SGBD

    Alors qu'avec une table du type Id, IdClient, IdContact, un simple Left ou Right Join suffira à faire la liaison.

    Gérer la table intermédiaire :
    Je vais essayer de te trouver une série de requête qui montre le cas.

    Cordialement,

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 548
    Points
    24 548
    Par défaut
    Pour la requête d'affichage :
    Tclient_1 représente Contact
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tClient.Nom, tClient_1.Nom
    FROM (tClient LEFT JOIN tClientContact ON tClient.id = tClientContact.id_client) LEFT JOIN tClient AS tClient_1 ON tClientContact.id_contact = tClient_1.id
    WHERE (((tClient.Client)=True) AND ((tClient_1.Client)=False));

    A la sauvegarde d'un nouvel enregistrement contact (dans le sous-formulaire Contact) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO  tClientContact(Id_Client, Id_Contact) VALUES (" & Me.parent.Id & ", " & Me.id & ");"
    Pour la suppression d'un lien (ou d'un contact) à faire avant de délier/supprimer et depuis le sous-formulaire contact :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "DELETE * FROM tClientContact WHERE Id=" & me.id & ";"
    Avec ces 3 requêtes tu gères le principal.

  9. #9
    Membre régulier
    Homme Profil pro
    Technicien Géomatique
    Inscrit en
    Janvier 2016
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien Géomatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 181
    Points : 101
    Points
    101
    Par défaut
    Bonjour loufab

    Client client1
    _____ _______
    id id
    nom nom
    prenom prenom

    Ta fonction select permet de sélectionner les noms des 2 tables?

    Merci je vais faire quelques tests, je monte une base de donnée, si un client avait un seul contact, je m'y retrouvais facilement mais la j'avais grandement besoin d'aide.

  10. #10
    Membre régulier
    Homme Profil pro
    Technicien Géomatique
    Inscrit en
    Janvier 2016
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien Géomatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 181
    Points : 101
    Points
    101
    Par défaut
    BON, je commence à comprendre.

    MERCI

    Je vais surement avoir des bugs... mais je te remercie grandement pour l'exemple de code

  11. #11
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 548
    Points
    24 548
    Par défaut
    oui des 2 ensembles puisque physiquement c'est la même table.
    C'était pour l'exemple.

    Des bugs... nous en avons tous qui remontent.

  12. #12
    Membre régulier
    Homme Profil pro
    Technicien Géomatique
    Inscrit en
    Janvier 2016
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien Géomatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 181
    Points : 101
    Points
    101
    Par défaut
    Y'a t'il une section sur le forum pour les utilisations de base de access formulaire?
    Lorsque je fais des recherches, vous fonctionnez tous avec du SQL et du VBA alors que beaucoup de chose simple se font avec les options access.

    Exemple: Je veux faire lister mes contacts dans un listbox selon le client choisi dans un listbox précédent.

    j'ai fais ouvrir requête après mise à jour et rien ne s'affiche dans mon listbox alors que lorsque je double click sur la requête mes résultats sont la.

  13. #13
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 548
    Points
    24 548
    Par défaut
    Question très étrange qui me fait te conseiller de te munir d'un bouquin type "bible pour access". Il me semble que tu n'as pas les bases du produit.

    On utilises effectivement le SQL et VBA, mais également les formulaires, les états et leurs propriétés, très peu les macros (sauf pour les applications destinée à SharePoint).

    Mais ce ne sont pas des questions qui nécessite d'être (trop) commentées, vu que c'est la base du produit.

    Ce cas de zone liste en cascade par contre à largement était commenté dans le forum. Rubrique IHM.

  14. #14
    Membre régulier
    Homme Profil pro
    Technicien Géomatique
    Inscrit en
    Janvier 2016
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien Géomatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 181
    Points : 101
    Points
    101
    Par défaut
    Merci Loufab, je vais me munir d'un livre sur les formulaires. Y'a t-il un livre en particulier pour débuter que tu pourrais me conseiller?
    J'ai monté une base de donnée pour ajout/suppression recherche de borne incendie. Ajout entretient et j'ai fini par avoir un bon résultat.

    Avec l'éditeur de création de requête, une simple relation équivaut à un left join et je n'avais pas remarqué.
    Ce que j'essai de démêler davantage c'Est la syntaxe. À quel endroit doit-on utiliser [Formulaires]![idchamp]![elementduformulaire] ou bien [Formulaires].[idchamp].[elementduformulaire]
    Donc je dois faire plusieurs essai et erreur avant d'avoir le bon résultat.

  15. #15
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 548
    Points
    24 548
    Par défaut
    N'utilise pas le ! reste avec le .

    Le ! est l'ancienne syntaxe (ACCESS 1.0 / 1.1) ça reste d'une part pour la compatibilité et d'autre part parce que dans certain cas cela à une signification particulière : ça utilise la propriété pas défaut, il faut donc savoir qui elle est.

    Il vaut mieux toujours écrire tout, c'est plus verbeux mais quand tu y reviens un an ou deux après tu est content de pouvoir lire le code simplement.

    Et plus important avec le point, en VBA tu as accès à l'autocomplétion ce que ne permet pas le !

    Si tu as déjà monté une appli alors tu n'as pas besoin de bouquin, juste de quelques idées et de pistes pour réaliser.

  16. #16
    Membre régulier
    Homme Profil pro
    Technicien Géomatique
    Inscrit en
    Janvier 2016
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien Géomatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 181
    Points : 101
    Points
    101
    Par défaut
    Le plus complexe reste souvent de le visualiser, un coup sur la bonne piste c'est plus simple un peu.

Discussions similaires

  1. Réponses: 10
    Dernier message: 27/01/2015, 16h29
  2. Réponses: 3
    Dernier message: 23/03/2010, 17h55
  3. Réponses: 13
    Dernier message: 23/02/2010, 20h34
  4. [MySQL] Extraire des données d'une table si absentes dans une autre
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/03/2009, 18h39
  5. Données d'une table deviennent colonne dans autre table?
    Par christophe1245 dans le forum Access
    Réponses: 8
    Dernier message: 19/12/2005, 22h01

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