Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requête UPDATE et sous-requête

2 réponses
Avatar
DENAIN Freddy
Bonjour à tous et meilleurs voeux pour cette nouvelle année,

Je tente vainement de faire une requête sql sous access depuis quelque temps
et je me pose une question :

- Est-il possible d'avoir une sous-requête dans le SET d'un update ?

Dans l'exemple de la requête A , j'ai mis la sous-requête suivante dans le
SET "(SELECT Auteurs.NoAuteur FROM Auteurs WHERE Auteurs.Nom = 'Adamski')"
Hors access n'en veut pas il m'affiche cette erreur "L'opération doit
utiliser une requête qui peut être mise à jour. (Erreur 3073)"

Si je supprime la sous-requête et que je mets le numéro en dur (numéro que
doit me ramener la requête). Là ca marche...
Or j'ai besoin de faire un select avant pour connaitre le numéro d'où ma
question sur la possibilité de mettre une sous-requête dans le SET d'un
UPDATE.
Je tiens à preciser que la requête select renvoit qu'un seul résultat.

- Si ce n'est pas possible y a t'il un autre moyen de réaménager cette
requête afin de faire un select préalable pour récupérer un numéro afin de
pouvoir le réutiliser dans le SET de l'update ?


A ) Requête avec sous-requêtes dans le SET (version qui marche pas -->
Erreur 3073) :

UPDATE Ecrit_Par SET Ecrit_Par.NoAuteur = (SELECT Auteurs.NoAuteur FROM
Auteurs WHERE Auteurs.Nom = 'Adamski')
WHERE Ecrit_Par.NoLivre = (SELECT Livres.NoLivre FROM Livres WHERE
Livres.Titre="Database Systems");


B) Requête qui marche sans sous-requêtes dans le SET :

UPDATE Ecrit_Par SET Ecrit_Par.NoAuteur = 8
WHERE Ecrit_Par.NoLivre = (SELECT Livres.NoLivre FROM Livres WHERE
Livres.Titre="Database Systems");


D'avance merci pour vos lumières

DENAIN Freddy

2 réponses

Avatar
david
salut,

remplace ta sous-requête par la fonction DLookUp (rechDom en
français) :
... SET NoAuteur = DLookUp("NoAuteur", "Auteurs", "Nom='Adamski'") ...

Ca devrait fonctionner.
Sinon, en SQL pur, ce que tu avais écrit est correct, mais access ne
fait pas dans le "pur"...

A+
Avatar
DENAIN Freddy
Bonsoir,

Merci beaucoup pour ta réponse David. Ta réponse fonctionne parfaitement :-)

Bonne fin de soirée et encore merci,

DENAIN Freddy


"david" a écrit dans le message de news:

salut,

remplace ta sous-requête par la fonction DLookUp (rechDom en
français) :
... SET NoAuteur = DLookUp("NoAuteur", "Auteurs", "Nom='Adamski'") ...

Ca devrait fonctionner.
Sinon, en SQL pur, ce que tu avais écrit est correct, mais access ne
fait pas dans le "pur"...

A+