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

Requêtes et SQL. Discussion :

Insérer des données à partir d'un formulaire basé sur une requête sélection


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mai 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mai 2014
    Messages : 19
    Points : 13
    Points
    13
    Par défaut Insérer des données à partir d'un formulaire basé sur une requête sélection
    Bonjour,

    Ma question est la suivante (j'ai beau chercher depuis qqs jours et je n'arrive pas à régler ce problème..) : cf notamment le post dans ce même forum "Impossible de remplir des champs à partir d'une requête..."

    Je repose donc un peu autrement ma question : Peut-on insérer des nouvelles données dans un formulaire qui est lui-même basé sur une requête sélection, qui est elle-même basée sur 5 tables en relation ??

    La seule 'solution' que j'ai trouvé jusqu'à présent c'est de mettre dans les propriétés de la requête, la propriété "TypeRecordset" = "Feuille rép.dyn.(MAJ globale)" au lieu de mettre cette propriété à "Feuille de réponse dynamique"..


    J'ai lu aussi sur le site de Microsoft, qu'on ne peut insérer des données dans une requête sélection s'il y a plus de trois tables en relation, etc.. Mais ce n'est pas très approfondi comme explication et bizarre aussi cô limitation (enfin, je pense..)

    Merci de votre aide !

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour,

    La réponse probable et courte est non.

    Quand tu as des jointures dans une requête, dès que tu as une relation de 1 à plusieurs, généralement Access passe les données en "mode lecture seule".

    Parfois changer la propriété "Enregistrement unique" de la requête permet d'éviter cela mais c'est rare.

    Ce que tu peux faire :

    Si tes jointures servent à afficher des données mais pas à la saisie (ex : afficher le nom d'une personne, le stock d'un produit), tu peux sans doute remplacer la jointure par un appele à la fonction DFirst() .

    Tu peux peut-être aussi utiliser dans ton formulaire une liste déroulante qui 'décodera' ta clef pour afficher la donnée en claire (ex : dans ta table tu as l'Id d'une personne et dans l'écran tu affiches son nom). Là aussi cela supprime le besoin de jointure dans la source de données.

    Si tes jointures servent à saisir des données, tu devras sans doute te tourner vers les sous-formulaires. Par exemple dans une commande le formulaire principal affiche l'entête de la commande (ex : date, adresse du client) et le sous-formulaire affiche les lignes de la commande.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mai 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mai 2014
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    et avant tout, merci d'avoir répondu à ma question !

    Je comprends ce que vous venez d'expliquer mais il y a quand même qq chose qui pose problème :

    en effet, un formulaire basé sur une requête constitué de plusieurs tables est quand même une chose courante (même, sans sous-formulaire), non ? Sinon, nous serions condamnés dans un formulaire à n'encoder que les données d'une seule et unique table.

    Exemple : imaginons simplement une table de jonction "Liste de présences au cours" (une table vide, donc). Elle est elle-même reliée, d'un côté, à une table "Professeurs", et de l'autre, à une table "Elèves" - toute deux dans une relation de <un à plusieurs> vers la table "Liste de présences au cours". Créons maintenant une requête sélection sur base de ces 3 tables que l'on va appeler "Requ_Résultats".

    Je l'ai expérimenté : il n'y pas de problème pour insérer - à partir de "Requ_Résultats" - de nouvelles données qui iront remplir la table "Liste des présences au cours". Je crois donc que jusque-là nous sommes d'accord pour dire que c'est possible (au moins avec 3 tables).

    Le problème se pose si j'attache, par exemple à la table "Elèves", une autre table (la table "Section") qui comporte par ex des informations sur la section fréquentée par l'élève et qui est, elle, dans une relation de <plusieurs> (côté table "Section") à <un> (côté table "Elèves"). Là, c'est fini, plus moyen d'encoder quoi que ce soit de nouveau, ou, même, de modifier quoi que ce soit sur les résultats affichés par "Requ_Résultats".

    Et, là je me dit c'est vraiment bizarre que je ne puisse encoder un simple nom d'élève + un simple nom de professeur tout en ce que la section de l'élève s'affiche automatiquement grâce à ma requête - il ne s'agit même pas d'encoder le nom de la section, mais juste qu'elle s'affiche suite au choix de l'élève et du prof à partir de "Requ_Résultats"???

    Et je n'arrive pas à me résoudre à l'idée qu'au-dessus de 3 tables cela ne marche plus..

    Voilà, si tu vois mieux mon souci, n'hésite pas. Merci d'avance.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour,

    Désolé c'est malheureusement comme cela et je suis d'accord avec toi, c'est parfois TRÈÈÈÈÈÈÈÈÈÈÈS frustrant.

    Généralement tu n'as pas à entrer des données dans 3 tables ou plus en parallèle. Tu devrais habituellement faire des entrées dans une table d'association et utiliser l'interface pour présenter les données. Les autres tables dites "de référence" ont leur propre écran de saisie, rien que pour elle.

    Le scénarion classique est :

    ajouter les éléments dans les tables de référence.
    combiner ces éléments dans une table d'association.

    Un effet de bord intéressant de cette contrainte c'est qu'il est très facile de vérouiller une table en mode lecture seule. Il suffit de la rendre accessible via une requête qui utilise 2 tables. La table qui nous interesse et une table bidon qui ne contient qu'un seul enregistrement.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mai 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mai 2014
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Toujours d'accord avec toi, trèèèès frustrant !!

    Mais malgré tout, je suis entêté , dans mon (petit) cas.... il ne faut même pas entrer des données dans 3 ou 4 tables, il s'agit seulement de rentrer des infos dans ce que tu appelles une table d'association (ou de jonction, etc..), la table "Présences au cours" en l'occurrence, en prenant (cô tu le dis) les infos des 2 tables de références qui sont autour ('"Elèves" et "Professeurs")..

    La 4ème table ("Section") n'est là que pour afficher un attribut de la table "Elèves", qu'on ne peut mettre dans la table "Elèves" elle-même (sinon on ne respectera pas les règles d'analyse qui veut que des objets distincts soient dans des tables distinctes)..

    Mais alors ma question est : comment faire pour que - dans mon formulaire des "Présences" afficher à la fois les infos Elèves et Professeurs sur la même ligne d'enregistrement (formulaire "Feuille de donnée") que la section à laquelle l'élève appartient ???

    Ahlalalalala :-)
    Merci toujours..

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    que la section à laquelle l'élève appartient
    à priori j'irai avec quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DFisrt("NomChampNomSection"; "NomTableSection"; "IdSection=" &  DFirst("NomChampIdSection"; "NomTableEleve"; "[IdEleve]=" & IdEleve))
    Note que DFirst() va être traduit en français automatiquement.

    Bon c'est un peu lourd pour récupérer le nom de la section de l'élève mais cela doit donner le resultat voulu.

    Il se peut aussi que ce soit lent donc vérifie rapidement avec un volume de données qui correspond à ta prod.

    Si c'est trop lent on pourra sans doute passer par une table temporaire qui te donnera

    • IdEleve
    • IdSection
    • NomSection


    Et qui servira pour le DFisrt() évitant le double appel.

    Une autre possibilité, ne pas afficher la section dans la saisie mais fournir une fiche détaillée de l'élève au double clique sur son ID.

    Et une dernière idée :

    Une liste déroulante qui présente concaténé :
    • Le Nom de l'élève
    • Le Prénom de l'élève
    • La Section de l'éléve


    basée sur une requête qui fait la jointure entre élève et section.

    cela pourrait donner un truc du genre : René MAROT (Terminal A1).

    Si tu n'as pas de sélection à faire sur la section cela peut marcher très bien.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mai 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mai 2014
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    je suis impressionné par la qualité et l'amabilité des réponses que tu donnes!

    Je viens donc de lire ta réponse et je vais l'essayer demain (heure belge)...

    Je reviendrai bien entendu vers toi, pour t'informer du résultat, mais à première vue il me semble que cela permet de résoudre mon souci.

    Bonne journée à toi !

  8. #8
    Membre à l'essai
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mai 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mai 2014
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Bonjour René Marot,


    Je n'ai pas encore testé tes propositions, mais dès que cela sera fait je ferai part des résultats (juste pour dire que c'est pour cela qu'il n'y a pas encore de réponse...

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/01/2008, 13h54
  2. [MySQL] Insérer des données à partir d'un formulaire
    Par super-java dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/10/2007, 11h01
  3. Dupliquer enregistrement formulaire basé sur une requête
    Par fredpeca dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/02/2007, 12h40
  4. Sous-Formulaire basé sur une requête nécessitant des paramètes
    Par nicou50 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 02/09/2006, 22h18
  5. Ouvrture Formulaire basé sur une requête paramétrée
    Par teffal dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 10/07/2006, 16h04

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