OVH Cloud OVH Cloud

Pb requête avec totaux

3 réponses
Avatar
Didier
Bonjour

J'ai 2 tables contenant les champs suivant
Tab1 : N=B0;Quantit=E9;Livraison
Tab2 : N=B0BL;N=B0;Qt=E9L

Les tables sont en relation par N=B0 de 1 =E0 plusieurs (1de=20
Tab1 et plusieurs Tab2) donc pour 1 N=B0 de tab1 on peut=20
avoir plusieurs N=B0 de quantit=E9
Je veux remplir le champs Livraison (Oui/Non) lorsque=20
Qt=E9L=3DQuantit=E9
J'ai cr=E9=E9 une requ=EAte1 qui me calcul le total de Qt=E9L=20
pour un N=B0 (aucun probl=E8me)
J'ai cr=E9=E9 une 2eme requ=EAte de la facon suivante

SELECT [Tab1].Livraison, [Tab1].Quantit=E9
FROM [Tab1] INNER JOIN [Req=EAte1] ON [Tab1].[N=B0] =3D=20
[Requ=EAte1].[N=B0]
WHERE ((([Tab1].Quantit=E9)=3D[SommeDeQt=E9L]));

Le probl=E8me est que tant que j'ai cette relation avec=20
requ=EAte1(contenant une fonction somme) je ne peut=20
modifier aucun champs

Avez-vous une solution pour mettre =E0 jour le champs=20
livraison lorsque [SommeDeQt=E9L]=3DQuantit=E9]

Merci

3 réponses

Avatar
Michel Walsh
Salut,


En effet, un aggrégat marque toute la requête (principale, ou imbriquée
via la clause FROM) comme n'étant plus modifiable (exception, dans ... WHERE
f=(SELECT MAX( ... ) ... ) , le MAX ne rend pas la requête externe non
modifiable).

Une solution de contournement est d'utiliser DSUM( ..., ..., ... ) au
lieu de SUM.


C'est pas la joie, nécessairement. Il y a le site de Microsoft, et dans
le site de Microsoft, il y a contactez-nous, puis, boîte à suggestion. Plus
il y aura de suggestions, dans cette boîte, qui iront dans le sens de rendre
possible des mises à jour avec aggrégat, genre UPDATE table1 SET f1=SUM(f2)
WHERE ..., alors plus il y a de possibilités que Microsoft daigne
implémenter cette possibilité dans une future version.



Espérant être utile,
Vanderghast, Access MVP


"Didier" wrote in message
news:1819b01c44a0f$f5713b20$
Bonjour

J'ai 2 tables contenant les champs suivant
Tab1 : N°;Quantité;Livraison
Tab2 : N°BL;N°;QtéL

Les tables sont en relation par N° de 1 à plusieurs (1de
Tab1 et plusieurs Tab2) donc pour 1 N° de tab1 on peut
avoir plusieurs N° de quantité
Je veux remplir le champs Livraison (Oui/Non) lorsque
QtéL=Quantité
J'ai créé une requête1 qui me calcul le total de QtéL
pour un N° (aucun problème)
J'ai créé une 2eme requête de la facon suivante

SELECT [Tab1].Livraison, [Tab1].Quantité
FROM [Tab1] INNER JOIN [Reqête1] ON [Tab1].[N°] [Requête1].[N°]
WHERE ((([Tab1].Quantité)=[SommeDeQtéL]));

Le problème est que tant que j'ai cette relation avec
requête1(contenant une fonction somme) je ne peut
modifier aucun champs

Avez-vous une solution pour mettre à jour le champs
livraison lorsque [SommeDeQtéL]=Quantité]

Merci
Avatar
didier
Re comment utilise-ton la fonction Dsum, je n'ai rien
trouver sur l'aide en ligne
-----Message d'origine-----
Salut,


En effet, un aggrégat marque toute la requête
(principale, ou imbriquée

via la clause FROM) comme n'étant plus modifiable
(exception, dans ... WHERE

f=(SELECT MAX( ... ) ... ) , le MAX ne rend pas la
requête externe non

modifiable).

Une solution de contournement est d'utiliser DSUM
( ..., ..., ... ) au

lieu de SUM.


C'est pas la joie, nécessairement. Il y a le site de
Microsoft, et dans

le site de Microsoft, il y a contactez-nous, puis, boîte
à suggestion. Plus

il y aura de suggestions, dans cette boîte, qui iront
dans le sens de rendre

possible des mises à jour avec aggrégat, genre UPDATE
table1 SET f1=SUM(f2)

WHERE ..., alors plus il y a de possibilités que
Microsoft daigne

implémenter cette possibilité dans une future version.



Espérant être utile,
Vanderghast, Access MVP


"Didier" wrote in
message

news:1819b01c44a0f$f5713b20$
Bonjour

J'ai 2 tables contenant les champs suivant
Tab1 : N°;Quantité;Livraison
Tab2 : N°BL;N°;QtéL

Les tables sont en relation par N° de 1 à plusieurs (1de
Tab1 et plusieurs Tab2) donc pour 1 N° de tab1 on peut
avoir plusieurs N° de quantité
Je veux remplir le champs Livraison (Oui/Non) lorsque
QtéL=Quantité
J'ai créé une requête1 qui me calcul le total de QtéL
pour un N° (aucun problème)
J'ai créé une 2eme requête de la facon suivante

SELECT [Tab1].Livraison, [Tab1].Quantité
FROM [Tab1] INNER JOIN [Reqête1] ON [Tab1].[N°] =
[Requête1].[N°]
WHERE ((([Tab1].Quantité)=[SommeDeQtéL]));

Le problème est que tant que j'ai cette relation avec
requête1(contenant une fonction somme) je ne peut
modifier aucun champs

Avez-vous une solution pour mettre à jour le champs
livraison lorsque [SommeDeQtéL]=Quantité]

Merci


.



Avatar
Michel Walsh
Salut,


Les 3 arguments sont des chaînes de caractères, le troisième est
optionnel.

Le premier argument est l'énoncé d'une expression à sommer. Exemple, le
nom du champ.

Le second arguement est le nom d'une table ou d'une requête déjà
sauvegardée.

Le troisième argument est l'énoncé d'un critère. Un "paramètre" du genre
FORMS!formname!controlName est automatiquement résoud (du moins, devrait
l'être) et n'a pas à être "sorti". Par contre, les variables VBA doivent
être "sorties"

DSUM("f1" , "table1", "f2=FORMS!formulaire1!controle2")

DSUM("f1", "table1", "f2=" & maVariableEnitèreNumérique )

DSUM( "f1", "table1", "f2 >=" & Replace( CStr(maVariableFlottante),
",", "." ) )



dans le dernier cas, il est à noter que le format attendu est un format US
(de date, mais également, le point est décimal, pas la virgule). De plus,
comme le résultat apparaît comme une constante, dans la chaîne ainsi
concaténée, il faut agrémenter des délimiteurs requis ( si la constante est
une chaîne, ou un date).


DSUM(" f1 * f3 ", "table1", "monChamDate>=" & Format( maVariableDate,
"#mm-dd-yyyy hh:nn:ss#") )

DSUM(" f1 * f3 ", "table1", "monChampAlpha=""" & Replace(
maVariableAlphaNum, """" , """""" ) & """")



Attention:

DSUM( f1, "table1")


est différent de

DSUM( "f1" , "table1")


Dans le premier cas, le contenu ACTUEL de f1 sera interprété comme
l'expression devant être évaluée pour chaque enregistrement de la table
table1, dans le processus de sommation.


DSUM("f2", "table1", "f1=" & f1 )


de même, capture la valeur actuelle de f1, le troisième argument devient
donc, après concaténation, quelque chose comme: "f1"2", en autant que la
valeur actuelle de f1 est 222, et donc, la sommation s'effectue sur tous les
enregistremetns ayant la valeur de f1 égale à la valeur actuelle.

Pareillement, si la valeur actuelle de f1 est NULL, la dernière expression
produit une lamentable erreur de syntaxe, car le troisième argument est
alors, après évaluation de la concaténation: "f1="

tout bête, tout fin seul, ce qui est de très mauvaise goût, syntaxiquement,
car on ne dit pas égal à quoi... ( en effet, "f1=" & f1, avec f1 null,
donne "f1=" & NULL, ce qui retrourne bien "f1=" et comme c'est cela
qui est passé comme troisième argument, il y a que Access trouve à s'en
plaindre.)



Espérant être utile,
Vanderghast, Access MVP




"didier" wrote in message
news:1814b01c44a37$b9f25660$
Re comment utilise-ton la fonction Dsum, je n'ai rien
trouver sur l'aide en ligne
-----Message d'origine-----
Salut,


En effet, un aggrégat marque toute la requête
(principale, ou imbriquée

via la clause FROM) comme n'étant plus modifiable
(exception, dans ... WHERE

f=(SELECT MAX( ... ) ... ) , le MAX ne rend pas la
requête externe non

modifiable).

Une solution de contournement est d'utiliser DSUM
( ..., ..., ... ) au

lieu de SUM.


C'est pas la joie, nécessairement. Il y a le site de
Microsoft, et dans

le site de Microsoft, il y a contactez-nous, puis, boîte
à suggestion. Plus

il y aura de suggestions, dans cette boîte, qui iront
dans le sens de rendre

possible des mises à jour avec aggrégat, genre UPDATE
table1 SET f1=SUM(f2)

WHERE ..., alors plus il y a de possibilités que
Microsoft daigne

implémenter cette possibilité dans une future version.



Espérant être utile,
Vanderghast, Access MVP


"Didier" wrote in
message

news:1819b01c44a0f$f5713b20$
Bonjour

J'ai 2 tables contenant les champs suivant
Tab1 : N°;Quantité;Livraison
Tab2 : N°BL;N°;QtéL

Les tables sont en relation par N° de 1 à plusieurs (1de
Tab1 et plusieurs Tab2) donc pour 1 N° de tab1 on peut
avoir plusieurs N° de quantité
Je veux remplir le champs Livraison (Oui/Non) lorsque
QtéL=Quantité
J'ai créé une requête1 qui me calcul le total de QtéL
pour un N° (aucun problème)
J'ai créé une 2eme requête de la facon suivante

SELECT [Tab1].Livraison, [Tab1].Quantité
FROM [Tab1] INNER JOIN [Reqête1] ON [Tab1].[N°] >[Requête1].[N°]
WHERE ((([Tab1].Quantité)=[SommeDeQtéL]));

Le problème est que tant que j'ai cette relation avec
requête1(contenant une fonction somme) je ne peut
modifier aucun champs

Avez-vous une solution pour mettre à jour le champs
livraison lorsque [SommeDeQtéL]=Quantité]

Merci


.