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 :

Requete mise à jour avec un champ calculé


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 136
    Points : 89
    Points
    89
    Par défaut Requete mise à jour avec un champ calculé
    Bonjour,
    Après avoir lu les tutos, et cherché sur le forum, je n'arrive pas à trouver la réponse à ma question:
    Je sais qu'on ne peux pas mettre à jour un champ calculé d'une table avec une requete.
    Mais peut-on faire une requete mise à jour en utilisant un champ calculé (Opération: Somme)? J'ai essayé en écrivant [Table2].[SommeDeChamp] dans Mise à jour, en vain...
    Merci pour vos idées!

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    Il y a plusieurs voies à explorer selon le cas (sous-requêtes, VBA ...).

    Donnes-nous plus de précisions: le code SQL de ta requête notamment.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 136
    Points : 89
    Points
    89
    Par défaut
    Salut,

    Voilà le code SQL de ma requete (création), à partir de là, je veux que la valeur de la somme du champ 'quantité (en T)' de la table 'apports de vendange' serve à mettre à jour le champ 'vendange en tonnes' de la table 'Mise en cuve'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT [Mise en cuve].[nom mise en cuve], [Mise en cuve].[tonnes de vendange], 
    Sum([apports de vendange].[quantité (en tonnes)]) AS [SommeDequantité (en tonnes)]
     
    FROM [Mise en cuve] LEFT JOIN [apports de vendange] 
    ON [Mise en cuve].[id_mise en cuve] = [apports de vendange].[id mise en cuve]
     
    GROUP BY [Mise en cuve].[nom mise en cuve], [Mise en cuve].[tonnes de vendange];
    Merci d'avance pour l'aide!

  4. #4
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Tu ne peux pas faire en une seule requête une requête de regroupement et une requête de mise à jour.

    L'ennui c'est que même en passant par une sous-requête, le moteur se comporte de telle sorte qu'il verrouille la table que l'on veut modifier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE [Mise en cuve] AS asMC 
    SET asMC.[tonnes de vendange] = (SELECT Sum(asAV.[quantité (en tonnes)]) AS QtéTotale FROM [apports de vendange] AS asAV WHERE asAV.[ID_mise en cuve]=asMC.[ID_mise en cuve]);
    Si quelqu'un sait comment rendre cette syntaxe possible ... je suis preneur ...


    En attendant, tu peux t'en sortir comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE [Mise en cuve] AS asMC 
    SET asMC.[tonnes de vendange] = DSum("[quantité (en tonnes)]","[apports de vendange]","[ID_mise en cuve]=" & [asMC].[ID_mise en cuve]);
    Bonnes vendanges

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 136
    Points : 89
    Points
    89
    Par défaut
    Salut,

    Merci pour ton idée de code, ça marche partiellement!
    Le problème c'est que je souhaite rajouter un critère:

    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((asMC.[id_mise en cuve])=Formulaires![Gestion des apports de vendange]![id_mise en cuve]))
    dans la requete, sinon j'ai l'addition de tous les 'apports de vendange' dans mon champ 'tonnes de vendange' (or, je ne veux additionner que les apports de vendange concernant la mise en cuve du formulaire 'Gestion des apports de vendange').
    Le problème, c'est qu'il ne marche pas, j'ai un message d'erreur: 'Impossible pour Microsoft Office Access de trouver le critère id_mise en cuve dans l'expression'...

    Pourrais-tu me donner des informations sur la table 'asMC' que tu as crée?
    Si tu as une explication pour mon message d'erreur, je suis aussi preneur!!

    Merci d'avance

    ps: pour les vendanges, je m'y prépare, j'ai encore un peu de temps (6 mois environ!) j'ai hâte!

  6. #6
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Désolé, pas le temps de détailler mais

    - tu devrais pouvoir ajouter un critère dans la troisième partie du DSUM
    - asMC n'est pas une table mais un alias au nom de ta table, afin notamment de clarifier et alléger le code SQL.

  7. #7
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    question con (peut-être !) :

    ne peut-on pas avoir le résultat recherché avec une requete croisée dynamique ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 136
    Points : 89
    Points
    89
    Par défaut
    Salut,

    Merci pour vos idées!

    Malheureusement, je n'arrive pas à rajouter un critère au Dsum de mout1234, et la requete croisée dynamique ne marche pas non plus...

    Voici mon code en mode sélection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Est constitué].[id mise en cuve], Sum([Est constitué].volume) AS SommeDevolume, [Mise en cuve].[volume total (hl)]
    FROM [Mise en cuve] LEFT JOIN [Est constitué] ON [Mise en cuve].[id_mise en cuve] = [Est constitué].[id mise en cuve]
    GROUP BY [Est constitué].[id mise en cuve], [Mise en cuve].[volume total (hl)]
    HAVING ((([Est constitué].[id mise en cuve])=[Formulaires]![Saisie Transferts]![id mise en cuve]));
    Je souhaite mettre à jour le champ 'volume total (hl)' avec SommeDevolume.

    J'ai regardé des solutions proposées sur les forums (http://www.developpez.net/forums/sho...d.php?t=498769 et http://www.developpez.net/forums/sho...hlight=xorbane)
    mais aucun de résout mon problème...

    Si vous avez une idée...

    Bonne journée à vous.

  9. #9
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    tu peux surement obtenir ce que tu souhaite en passant par vba

    regarde ici, ça te donnera une idée de la marche à suivre et tu ne devrais pas avoir l'erreur sur laquelle on bute en ce moment...

    dans ton cas, str = str + rst.fields(n)

    l'idée est de te créer une nouvelle table contenant les champ que tu souhaite voir apparaitre

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par gberthier Voir le message
    Malheureusement, je n'arrive pas à rajouter un critère au Dsum de mout1234,
    la syntaxe de DSUM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DSum("Unchamp";"UneTable";"((Critère1) And/Or (Critère1) ... )"

  11. #11
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Tu peux aussi essayé ça : tu crées 2 requetes, une sélection et une mise à jour

    Requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [id mise en cuve], Sum([volume) AS SommeDevolume
    FROM [Est constitué]
    WHERE [id mise en cuve]=forms.[Gestion des apports de vendange]![id_mise en cuve];
    MAJ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE [Mise en cuve]
    SET [Volumem total (hl)]=(SELECT SommeDevolume FROM Requete JOIN [Mise en cuve] ON [Mise en cuve].[id_mise en cuve]=Requete.[id mise en cuve])
    tu crées ensuite une macro qui appelle successivement ces deux requetes

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 136
    Points : 89
    Points
    89
    Par défaut
    Salut,
    Merci pour votre aide, mais pour l'instant je bloque toujours:

    Le DSum ne marche pas puisque j'ai un message d'erreur du type 'l'opération doit utiliser une requete qui peut être mise à jour'

    Pour la proposition d'ancel17, avec deux requetes, ça ne marche pas non plus, le code n'a pas l'air bon, il y a une erreur de syntaxe sur la seconde que je n'ai pas trouvé...

    ci joint mes tables, et une ébauche de requete. Pour résumer, je souhaite 'juste' avoir la somme de 'quantité (en tonnes)' dans le champ 'tonnes de vendanges'...

    par avance merci pour vos idées...
    Fichiers attachés Fichiers attachés
    • Type de fichier : zip bd1.zip (22,9 Ko, 130 affichages)

  13. #13
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    pour la 2e requete, tu as corrigé la faute de frappe ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET [Volume total (hl)]...
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET [Volumem total (hl)]...
    il n'y a pas non plus de ";" à la fin de la requete MAJ

  14. #14
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    tu peux tenter ça aussi en remplacement de la deuxième requete :

    MAJ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE [Mise en cuve]
    SET [Volumem total (hl)]=(SELECT SommeDevolume FROM Requete WHERE [Mise en cuve].[id_mise en cuve]=Requete.[id mise en cuve])
    WHERE EXISTS (SELECT SommeDevolume FROM Requete WHERE [Mise en cuve].[id_mise en cuve]=Requete.[id mise en cuve]);

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 136
    Points : 89
    Points
    89
    Par défaut
    Salut,
    Merci pour tes idées, mais pour l'instant j'ai une erreur de syntaxe sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SommeDequantité (en tonnes)  FROM Requete1 WHERE [Mise en cuve].[id_mise en cuve]=Requete1.[id_mise en cuve])
    ...

  16. #16
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Si tu as bien mis le ";" à la fin de la requete sql, rajoute la table [mise en cuve] dans ta clause FROM

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 136
    Points : 89
    Points
    89
    Par défaut
    Re
    Mettre [Mise en cuve] dans le FROM de la requete?
    A la place de Requete1?
    Là je ne comprends plus du tout!...

  18. #18
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SommeDequantité (en tonnes)  FROM Requete1, [mise en cuve] WHERE [Mise en cuve].[id_mise en cuve]=Requete1.[id_mise en cuve]);

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 136
    Points : 89
    Points
    89
    Par défaut
    Merci.
    Mais ça ne marche toujours pas, j'ai toujours une erreur de syntaxe sur cette section...

  20. #20
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Et là ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Requete1.[SommeDequantité (en tonnes)]
    FROM Requete1, [mise en cuve]
    WHERE [Mise en cuve].[id_mise en cuve]=Requete1.[id_mise en cuve]);

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Mise à jour d'un champ calculé dans un recordset
    Par pdata dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 21/10/2009, 10h28
  2. Requete Mise à jour avec données décimales
    Par Bernardtapis dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 25/11/2007, 14h47
  3. Pb requete mise à jour avec paramètre issu d'un formulaire
    Par ver_for dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 21/11/2007, 19h23
  4. Mise à jour d'un champs année et calcul d'un âge
    Par Didine1801 dans le forum Toad
    Réponses: 7
    Dernier message: 20/11/2007, 09h16
  5. Réponses: 3
    Dernier message: 08/12/2006, 20h08

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