OVH Cloud OVH Cloud

Requête Mise à jour UPDATE

4 réponses
Avatar
Dominique
Bonjour,

J'ai une table "AMD" avec entre autres 2 champs "RefOpe"=20
et "DernierStatut".
j'ai une requ=EAte s=E9lection "Rq_DernierStatut" qui=20
m'affiche 2 champs "RefOpe" et "StatutConf".

Je veux mettre =E0 jour le champ DernierStatut de la table=20
AMD par la requ=EAte Ajout suivante :
UPDATE AMD INNER JOIN Rq_DernierStatut ON AMD.RefOpe =3D=20
Rq_DernierStatut.RefOpe SET AMD.DernierStatut =3D=20
[Rq_DernierStatut].[StatutConf];

Lorsque j'ex=E9cute la requ=EAte j'ai l'erreur "L'op=E9ration=20
doit utiliser une requ=EAte qui peut =EAtre mise =E0 jour".

Par contre si =E0 la place de la requ=EAte j'ai une=20
table "Tbl_DernierStatut" contenant les m=EAmes informations=20
que la dite requ=EAte, la requ=EAte mise =E0 jour suivante=20
fonctionne tr=E8s bien :
UPDATE AMD INNER JOIN Tbl_DernierStatut ON AMD.RefOpe =3D=20
Tbl_DernierStatut.RefOpe SET AMD.DernierStatut =3D=20
[Tbl_DernierStatut] .[Statutconf];

Pourquoi ?

Merci de votre aide
Dominique

4 réponses

Avatar
Michel Walsh
Salut,


Jet marque comme ne pouvant plus être mis-à-jour une requête ayant
un aggrégat (MAX, MIN, AVG, SUM, COUNT, ... ) soit directement, soit
indirectement (via un join sur une requête ayant un aggrégat). Lorsqu'on
utilise une table réelle, la table ne fait plus référence à l'aggrégat et la
requête ne vois pas sa mise-à-jour ainsi compremise.

Microsoft POURRAIT modifier cet état de choses, c'est faisable.
Microsoft a simplement de besoin d'un signal en ce sens, de "plusieurs"
utilisateur d'Access (JET). On sait où est la boîte à suggestion, sur le
site de Microsoft? c'est là qu'il faut "suggérer" qu'on désire la
possibilité de pouvoir mettre à jour une table avec une valeur aggrégée
provenant d'une autre table, sous JET SQL (c'est déjà faisable avec MS SQL
Server).



Espérant être utile,
Vanderghast, Access MVP


"Dominique" wrote in message
news:19e9b01c44dfd$9a59d660$
Bonjour,

J'ai une table "AMD" avec entre autres 2 champs "RefOpe"
et "DernierStatut".
j'ai une requête sélection "Rq_DernierStatut" qui
m'affiche 2 champs "RefOpe" et "StatutConf".

Je veux mettre à jour le champ DernierStatut de la table
AMD par la requête Ajout suivante :
UPDATE AMD INNER JOIN Rq_DernierStatut ON AMD.RefOpe Rq_DernierStatut.RefOpe SET AMD.DernierStatut [Rq_DernierStatut].[StatutConf];

Lorsque j'exécute la requête j'ai l'erreur "L'opération
doit utiliser une requête qui peut être mise à jour".

Par contre si à la place de la requête j'ai une
table "Tbl_DernierStatut" contenant les mêmes informations
que la dite requête, la requête mise à jour suivante
fonctionne très bien :
UPDATE AMD INNER JOIN Tbl_DernierStatut ON AMD.RefOpe Tbl_DernierStatut.RefOpe SET AMD.DernierStatut [Tbl_DernierStatut] .[Statutconf];

Pourquoi ?

Merci de votre aide
Dominique
Avatar
Eric
"Michel Walsh" écrivait
news::

Salut,


Jet marque comme ne pouvant plus être mis-à-jour une requête
ayant
un aggrégat (MAX, MIN, AVG, SUM, COUNT, ... ) soit directement, soit
indirectement (via un join sur une requête ayant un aggrégat).
Lorsqu'on utilise une table réelle, la table ne fait plus référence à
l'aggrégat et la requête ne vois pas sa mise-à-jour ainsi compremise.

Microsoft POURRAIT modifier cet état de choses, c'est faisable.
Microsoft a simplement de besoin d'un signal en ce sens, de
"plusieurs" utilisateur d'Access (JET). On sait où est la boîte à
suggestion, sur le site de Microsoft? c'est là qu'il faut "suggérer"
qu'on désire la possibilité de pouvoir mettre à jour une table avec
une valeur aggrégée provenant d'une autre table, sous JET SQL (c'est
déjà faisable avec MS SQL Server).



Espérant être utile,
Vanderghast, Access MVP


Bonjour/Bonsoir Michel,

je rebondis sur la question.

J'ai 2 tables pour simplifier:
Une table tclient avec entre autres un champs NumClient et un champs
CumulAchat (monétaire)
Une table tFacture avec entre autres un champs NumFacture, NumClient,
MontantHT.

Je veux mettre à jour le CumulAchat de la table Client par une requête de
mise à jour.(CumulAchat=somme des MontantHT des différentes factures d'un
client donné)

Quel sql me proposes-tu ? car tous les cas de figure que j'ai testés me
retourne :
soit le message "L'opération
doit utiliser une requête qui peut être mise à jour".
soit "Inconnu" !!! quand j'utilise un DSum(...) pour la MAJ

Merci
Eric

Avatar
Eric
Eric écrivait
news::

Bonjour/Bonsoir Michel,

je rebondis sur la question.

J'ai 2 tables pour simplifier:
Une table tclient avec entre autres un champs NumClient et un champs
CumulAchat (monétaire)
Une table tFacture avec entre autres un champs NumFacture, NumClient,
MontantHT.

Je veux mettre à jour le CumulAchat de la table Client par une requête
de mise à jour.(CumulAchat=somme des MontantHT des différentes
factures d'un client donné)

Quel sql me proposes-tu ? car tous les cas de figure que j'ai testés
me retourne :
soit le message "L'opération
doit utiliser une requête qui peut être mise à jour".
soit "Inconnu" !!! quand j'utilise un DSum(...) pour la MAJ

Merci
Eric




C'est bon Michel, j'ai trouvé :
UPDATE tClient SET tClient.CumulHT = DSum
("[Montantht]","tfacture","tfacture.NumClient=" & tclient.NumClient);
suffisait mais j'avais mal placé les " car j'encadrai le champ
tclient.numclient.

Merci

Avatar
dOMINIQUE
Bonjour,

Merci pour tes explications claires.
Dominique
-----Message d'origine-----
Salut,


Jet marque comme ne pouvant plus être mis-à-jour
une requête ayant

un aggrégat (MAX, MIN, AVG, SUM, COUNT, ... ) soit
directement, soit

indirectement (via un join sur une requête ayant un
aggrégat). Lorsqu'on

utilise une table réelle, la table ne fait plus référence
à l'aggrégat et la

requête ne vois pas sa mise-à-jour ainsi compremise.

Microsoft POURRAIT modifier cet état de choses, c'est
faisable.

Microsoft a simplement de besoin d'un signal en ce sens,
de "plusieurs"

utilisateur d'Access (JET). On sait où est la boîte à
suggestion, sur le

site de Microsoft? c'est là qu'il faut "suggérer" qu'on
désire la

possibilité de pouvoir mettre à jour une table avec une
valeur aggrégée

provenant d'une autre table, sous JET SQL (c'est déjà
faisable avec MS SQL

Server).



Espérant être utile,
Vanderghast, Access MVP


"Dominique" wrote
in message

news:19e9b01c44dfd$9a59d660$
Bonjour,

J'ai une table "AMD" avec entre autres 2 champs "RefOpe"
et "DernierStatut".
j'ai une requête sélection "Rq_DernierStatut" qui
m'affiche 2 champs "RefOpe" et "StatutConf".

Je veux mettre à jour le champ DernierStatut de la table
AMD par la requête Ajout suivante :
UPDATE AMD INNER JOIN Rq_DernierStatut ON AMD.RefOpe =
Rq_DernierStatut.RefOpe SET AMD.DernierStatut =
[Rq_DernierStatut].[StatutConf];

Lorsque j'exécute la requête j'ai l'erreur "L'opération
doit utiliser une requête qui peut être mise à jour".

Par contre si à la place de la requête j'ai une
table "Tbl_DernierStatut" contenant les mêmes informations
que la dite requête, la requête mise à jour suivante
fonctionne très bien :
UPDATE AMD INNER JOIN Tbl_DernierStatut ON AMD.RefOpe =
Tbl_DernierStatut.RefOpe SET AMD.DernierStatut =
[Tbl_DernierStatut] .[Statutconf];

Pourquoi ?

Merci de votre aide
Dominique


.