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 calculée à partir d'une autre requete


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Requête calculée à partir d'une autre requete
    Bonjour à tous,

    Je fais face à un problème qui me parait simple, mais que je n'arrive pourtant pas à résoudre. Je m'excuse si c'est trivial pour vous.

    Je m'explique: j'aimerais réaliser une requête de mise à jour, qui a besoin d'une autre requête pour effectuer le calcul pour obtenir la valeur à mettre à jour.

    J'ai donc une première requête, qui compte le nombre de ligne qui correspondent à un critère dans une table. Ma deuxième requête prends une valeur à partir d'un formulaire, et doit diviser cette valeur par la valeur retournée par la première requête. je me dis que ça doit fonctionner, mais dans les faits, non.

    Quand je lance la requête, access me demande de rentrer comme paramètre la valeur qui aurait du être retournée par la première requête, comme si elle ne fonctionnait pas. Or, quand je l'exécute, elle me retourne le nombre correct.

    Quelqu'un aurait-il une idée pour m'aider?

    Merci d'avance!

  2. #2
    Expert éminent sénior
    bonsoir,
    Quelqu'un aurait-il une idée pour m'aider?
    pour cela, il faudrait au moins que l'on puisse voir le code SQL des 2 requêtes
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

  3. #3
    Futur Membre du Club
    Bonsoir,

    Code de la première requête:

    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Count(T_BudgetImputation.Budget_ID) AS CompteDeBudget_ID
    FROM T_OrdersContent INNER JOIN T_BudgetImputation ON T_OrdersContent.ID = T_BudgetImputation.AssociatedItem
    GROUP BY T_OrdersContent.ID
    HAVING (((T_OrdersContent.ID)=[Formulaires]![F_Orders]![T_OrdersContent].[Formulaire]![ID]));



    Code de la seconde requête:

    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    UPDATE T_BudgetImputation SET T_BudgetImputation.PriceAdjustedPerBudget = [Formulaires]![F_Orders]![T_OrdersContent].[Formulaire]![SubTotal]/[R_BudgetImputNumber]![CompteDeBudget_ID]
    WHERE (((T_BudgetImputation.AssociatedItem)=[Formulaires]![F_Orders]![T_OrdersContent].[Formulaire]![ID]));



    Merci à vous,

    Nicolas

  4. #4
    Expert éminent sénior
    il faut savoir que les requêtes de regroupement ne sont pas utilisables pour de la mise à jour, Access ne le gère pas, il faut passer par les fonctions de domaine pour récupérer une valeur de la requête.
    Tu peux utiliser la fonction DLookup():
    Utilise ta requête enregistrée (R_BudgetImputNumber) dans le second paramètre de la fonction mais il faut enlever la clause HAVING de ta requête, on l'utilisera plutôt dans la partie critère de la fonction (3ème paramètre) et il faut donc ajouter le champ ID pour permettre de faire cette sélection:

    contenu de la requête R_BudgetImputNumber:
    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Count(T_BudgetImputation.Budget_ID) AS CompteDeBudget_ID, T_OrdersContent.ID
    FROM T_OrdersContent INNER JOIN T_BudgetImputation ON T_OrdersContent.ID = T_BudgetImputation.AssociatedItem
    GROUP BY T_OrdersContent.ID;


    Contenu de ta requête de mise à jour:

    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    UPDATE T_BudgetImputation SET T_BudgetImputation.PriceAdjustedPerBudget = [Formulaires]![F_Orders]![T_OrdersContent].[Formulaire]![SubTotal]/(DLookup("[CompteDeBudget_ID]","[R_BudgetImputNumber]","T_OrdersContent.ID)=" & [Formulaires]![F_Orders]![T_OrdersContent].[Formulaire]![ID])
    WHERE (((T_BudgetImputation.AssociatedItem)=[Formulaires]![F_Orders]![T_OrdersContent].[Formulaire]![ID]));
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

  5. #5
    Futur Membre du Club
    Merci beaucoup pour les explications claires et précises. Ca marche très bien, et je retiendrai pour l'avenir.

    Merci pour ton temps et ta réponse rapide!

    Nicolas

###raw>template_hook.ano_emploi###