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

  1. #1
    Membre confirmé
    Problème de mise à jour de table par requêtes imbriquées
    Bonjour,

    J'ai une table "Formation" qui est liée à une tables "Sessions" en 1 à plusieurs
    Dans ma table "Formation" je voudrais mettre à jour le champ "TauxRealisation" en comptabilisant les "Sessions" réalisées
    J'ai créé une première requête de sélection qui fait le calcul du taux de réalisation pour chaque formation et ça fonctionne
    J'ai créé une seconde requête de mise à jour qui reprend la requête précédente liée à la table formation par la clé primaire
    Et je demande une mise à jour du champ "TauxRealisation" de la table "Formation" avec la valeur "Taux" de la requête 1

    Mais ça ne marche pas. Le message d'erreur dit "L'opération doit utiliser une requête qui peut être mise à jour"
    Mes tables ne sont pas en lecture seule
    Le seul champ à mettre à jour vient de la table "Formation"

    Je ne comprend pas pourquoi j'ai se message.

    Merci de votre aide
    Les solutions les plus simples sont les plus efficaces

  2. #2
    Membre expérimenté
    Je reprend votre devise "Les solutions les plus simples sont les plus efficaces"
    Pourquoi ne pas ajouter un champ calculé nommé "Taux de réalisation" (dans 'Formations') dans lequel vous mettez la formule utilisée dans votre première requête.
    La formule du champ calculé n'est pas toujours acceptée par Access, auquel cas, vous pouvez transformez votre requête en requête de mise à jour pour alimenter le champ nouvellement ajouté.

  3. #3
    Expert confirmé
    Bonjour,

    Le message
    Citation Envoyé par lololebricoleur Voir le message
    "L'opération doit utiliser une requête qui peut être mise à jour"
    est un grand classique mais n'est pas simple à analyser/expliquer. En pratique cela veut dire que la jointure désignée dans l'update est construite sur des relations ambigües et est donc en lecture seule.

    C'est d'autant plus compliqué qu'access accepte des update sur jointure alors que ce n'est pas standard en SQL

    Pour corriger cela plusieurs solutions :
    - modifier la nature des relations entre les tables pour que la jointure soit en écriture (si c'est possible)
    - utiliser dans l'update une fonction publique (définie dans un module) qui calcule le taux de réalisation ce qui permet d'écrire un truc du genre :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    update matable set TauxRealisation=mafonction(maformation) where ...
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  4. #4
    Membre confirmé
    Merci pour votre aide,

    J'ai trouvé une parade en créant une table temporaire mais je vais explorer vos pistes.

    Merci ;-)
    Les solutions les plus simples sont les plus efficaces

  5. #5
    Modérateur

    Bonjour
    Je suppose que dans ta Requete1 tu a ajouté le champ id_Formation alors tu fais un truc comme çà:
    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE Formation F, Requete1 R
    SET F.TauxRealisation = R.Taux
    WHERE (F.id_formation = R.id_Formation);

    Pensons à améliorer nos compétences en toute humilité car aucune oeuvre faite par un humain n'est parfaite!!!

###raw>template_hook.ano_emploi###