Bonjour,

Envoyé par
DocDen
Livres est une table à laquelle j'attribue l'alias livr par le mot clé As
donc, normalement, livr.ID est le champ ID de mon alias livr.
Effectivement, il n'y avait pas d'erreur, j'avais mal lu. 

Envoyé par
DocDen
Toute syntaxe pour me permettre d'y arriver sera la bienvenue, parce que ça fait un moment que j'y suis, au point de me demander si c'est possible avec Access ?
Heureusement que tu es prêt à tout... parce que tu n'as pas le choix ! 
Il te faut contourner le problème en utilisant la fonction de domaine DCount().
1 2
| UPDATE Livres as livr
SET livr.Cdes_An_Passé = DCount("*", "Commandes", "Livre_ID=" & livr.ID); |
Ton code SQL est pourtant correct, mais JET (le moteur de bases de données d'Access) souffre d'une très génante limitation:
Les données d'une requête ne peuvent être mises à jour que si toutes les colonnes sont "modifiables".
Or la sous-requête SELECT COUNT(*) est une aggrégation qui ne peut pas être modifiée.
Bien sûr, nous savons que c'est sans importance puisqu'elle est placée du côté droit de l'affectation.
Mais JET s'arrête là pour décréter que la requête n'est pas modifiable.
En fait, je pense que JET travaille en 2 temps:
(1) il construit une requête SELECT intermédiaire,
(2) il applique les mises à jour dans le jeu de données provenant de cette requête..
Dans le cas présent, la requête SELECT intermédiaires pourrait être:
1 2 3
| SELECT livr.*,
(SELECT COUNT(*) FROM Commandes WHERE Commandes.Livre_ID = livr.ID) AS nCount
FROM Livres AS livr ; |
Et le jeu de données retourné par cette requête SELECT intermédiaire n'est pas modifiable.
Dommage. 
_
Partager