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 :

Requête Mise à jour avec Somme


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    610
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 610
    Points : 213
    Points
    213
    Par défaut Requête Mise à jour avec Somme
    Bonjour,
    Je souhaite effectuer une requête de mise à jour sur une table avec des valeurs calculées qui sont des sommes obtenues à partir d'une autre table.

    J'ai réalisé une première requête "R1" qui porte sur une table "table1" et qui somme les valeurs pour dirons-nous un même objet avec un ID donné.
    Je souhaite mettre à jour dans une Table, "Table2" un champ appelé "QtéTotale" d'un enregistrement pour un objet du même ID.

    Cette deuxième requête fait intervenir "Table2" et R1 avec un lien sur le champ ID et je mets à jour le champ "QtéTotale" de "Table2" avec la somme calculée de R1 ([R1]![SommeCalculée]).

    J'obtiens un message d'erreur "L'opération doit utiliser une requête qui peut être mises à jour"

    Je suis preneur d'explications ... si j'ai été assez clair !

    J'ai essayé tous les types de relations possibles, sans effet.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonsoir,

    C'est un grand classique, mais je ne retrouve pas de file qui en parle

    En résumé la requête utilisée n'est pas considérée modifiable par access, pour contourner une solution consiste à placer la requete somme dans une fonction publique (dans un module) et de l'appeler dans la requete update, comme dans cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update MaTable set MonChamp=MaSomme(monID) where ...

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    610
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 610
    Points : 213
    Points
    213
    Par défaut
    Merci pour ta réponse,

    Actuellement le traitement dont je parle est effectué par code VBA mais pour essayer d'optimiser les temps de réponse j'aurai souhaité tester une solution à partir de requêtes Access.

    Donc à mon problème, je peux trouver une solution mais je suis obligé de fonctionner en deux étapes.

    Première étape :
    Requête INSERT INTO SELECT dans une table temporaire dans laquelle j'insère pour certains ID d'articles les sommes sur certains champs de Table2.

    Deuxième étape :
    Requête UPDATE de ma table Table1 avec les valeurs enregistrées dans ma table temporaire.

    Maintenant une nouvelle question :

    En fait au lieu d'avoir à effectuer des calculs des sommes uniquement sur des champs d'une table Table2, je dois aussi le faire sur des champs de tables Table3, Table4, etc.

    Évidemment je peux répéter les mêmes traitements en multipliant les requêtes sur une table temporaire, etc... mais,

    Est-il possible d'insérer en une seule fois, dans une table temporaire, des sommes portant sur des champs de plusieurs tables différentes ?

  4. #4
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Bonjour.

    Ca me semble normal de ne pas pouvoir mettre a jour une table lorsque la requete chargee de la mettre a jour prend cette meme table comme source.

    Pourquoi pas ne pas faire une requete partant de la table 2 et de la requete 1 et rajoutant les donnees dans une table momentanee ("table 2bis" par exemple) ?
    Puis une 3eme requete ayant comme source la table "table 2bis" et mettant a jour la table 2 ?

    Puis faire la meme chose pour les autres tables. Par contre, ca risque de faire deux requetes Access pour chaque table a mettre a jour.

    Dans ce cas, mieux vaut passer par VBA avec requetes SQL.
    Ou avoir une seule table contenant toutes les donnees plutot que table2, table3 etc.

    Ne connaissant pas le contenu exact de la base et le fonctionnement exact, je ne suis pas capable de repondre autrement.

    Cdlt

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    610
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 610
    Points : 213
    Points
    213
    Par défaut
    En fait je ne prends pas comme source une table dans laquelle je voudrai aussi effectuer une mise à jour.

    Pour prendre un cas similaire, voici un exemple que ce que je souhaiterai faire :

    Je gère des articles. Une table T1 enregistre les approvisionnements des articles (IDArticle, QtéAppro) et une autre table T2 les livraisons (IDArticle, QtéLivrée).

    Je veux réaliser une synthèse et donc dans une table Synthèse je veux pour chaque article : ID Article, SommeQtéAppro, SommeQtéLivrees

    Et dans mon cas la construction de cette synthèse porte sur plusieurs tables sources de données.

  6. #6
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Une requete rapprochant T1 et T2 par ID, n'affichant que ID (regroupement sur ID), SommeQtéAppro et SommeQtéLivrees.
    On rajoute les donnees a une table synthese.

    Ou alors :
    - une 1ere requete a partir de T1 avec regroupement sur ID et somme sur QtéAppro
    - une 2eme requete a partir de T2 avec regroupement sur ID et somme sur
    QtéLivrees
    - une 3eme requete rapprochant les 2 autres requetes sur ID et mettant a jour la table synthese avec champ ID (pris dans T1), SommeQtéAppro et SommeQtéLivrees.

    Ca devrait marcher.

    Cdlt

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    610
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 610
    Points : 213
    Points
    213
    Par défaut
    Ok, il faut que fasse les différents essais ce que je n'ai pas pu faire

    [Edit]
    Je vais faire des essais ce que je n'ai pu faire pour le moment.
    A présent tout est fait en VBA mais je souhaite tester une autre solution pour comparer les performances.
    [/Edit]

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 138
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Peux tu partager ton code VBA stp ?

    J'ai une table "DepenseTousLesMois" qui contient toutes les lignes de factures mensuelles avec le champs "TTC" et une table "Facture" qui contient un champ "TotalTTC". Les deux sont liés via le n° de facture.

    Je souhaite faire la somme du champs "TTC" de la table "DepenseTousLesMois" pour chaque n° de facture. Puis mettre à jour le champs "TotalTTC" de la table "Facture" avec les sommes obtenues précédemment.

    Bien à vous.

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/12/2013, 16h10
  2. [AC-2007] requête mise à jour avec deux paramètres
    Par gerarddurand dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 15/01/2010, 11h07
  3. [AC-2003] Requête mise à jour avec condition IN
    Par buzz73 dans le forum VBA Access
    Réponses: 19
    Dernier message: 30/07/2009, 12h03
  4. Requête mise à jour avec jointure interne
    Par joquetino dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/01/2008, 17h41
  5. [Requête/SQL]Mise à jour avec condition
    Par atlantideD dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 22/04/2007, 23h14

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