[SQL Access] : update d'après résult de count

Fermé
jean-françois - 15 sept. 2005 à 11:49
 guest - 26 oct. 2007 à 10:31
bonjour,
je cherche sans succès depuis quelque jour à écrire une requete qui met à jour un champ d'une table access à partir d'un comptage avec critère de sélection d'enregistrement d'une autre table. (inscription dans une table récapitulative du nombre d'élève d'une école primaire pour chaque niveau).
la requête de sélection (select count(*) from eleve where condition_ remplie) affiche bien le résultat escompté, mais lorsqu'il s'agit d'écrire ce résultat dans une autre table, cela devient exotique :
UPDATE enq19, eleve SET [enq19].[nbps] = (SELECT Count(*)
FROM eleve
WHERE ((([eleve].[section])="PS1" Or ([eleve].[section])="PS2") AND (([eleve].[date de sortie]) Is Null))); aboutit à l'affichage de 131 valeurs de 0 (?!), mais pas à la mise à jour d'un champ de la table "enq19" -131 étant le nombre d'enregistrement de la table "eleve"-. des modifs de la même requete aboutissent elles à des messages d'erreurs divers et variés.
si quelqu'un pratique leSQL Access et peut m'aider sur le sujet, cela m'aiderait fortement. à défaut, un script équivalent en VBA ?
merci d'avance
A voir également:

5 réponses

Normale, le where conditionne le select mais pas le update ce qui donne zero pour chaque valeur. C'est une erreur courante avec cette forme de mise à jour. Le format est plutot : update t set t.c = (selec tt.c from tt where tt.b = t.b) where exist (selec tt.c from tt where tt.b = t.b), enfin c'est plutot une forme sous informix, il y en a d'autres. Par contre sous Access je ne sais pas et je cherche aussi. Ce qu'il faut bien comprendre c'est la portée des where respectifs.

Cordialement.
2
jean-françois
16 sept. 2005 à 11:37
bonjour et merci de l'intérêt porté à mon problème.

je cherche en réalité à remplir une feuille de statistique, dont les données sont le résultat de comptage de données d'une table selon différents critère : nombre d'enfant scolarisés dans une école par niveau, provenance géographique des élèves, nombre d'élève d'age normal, en retard d'un an, en avance d'un an, proprtion de garçons et de filles ...
c'est la raison pour laquelle je souhaite mettre à jour une table (enq19) avec les résultats de requêtes qui effectuent des comptages sur une autre table (eleve).

merci
1
Bonjour,

Pour satisfaire votre besoin, je vous suggère de créer une table spécifique via une requête "création de table"
La nouvelle table sera toujours à jour, car à chaque lancement de la requête, elle sera recréée en prenant en compte les informations less plus récentes des 2 tables en jeu :

Voir l'aide access {F1} et Saisir "création de table"

En mode Création de requête, cliquer sur la flèche à côté de Type de requête dans la barre d'outils, puis sur Création de table. La boîte de dialogue Requête création de table s'affiche.

Cordialement
La science se limite à trouver ce qui existe depuis toujours
Hubert REEVES
1
Bonsoir,
Une idée qui vaut ce qu'elle vaut :

avez-vous essayé de renvoyer le résultat de la requete count dans une variable, et de faire ensuite l'update avec cette variable ?

Cordialement,

Heureux soient les fêlés, car ils laisseront passer la lumière (Audiard)
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonsoir,

Je ne suis pas sûr d'avoir bien compris.

Ma première réaction est de me demander quel est l'intérêt de mettre à jour une table avec des informations en provenance d'une autre table.
Une requête avec jointure entre les 2 tables concernées suffit pour obtenir le résultat recherché.

Il faut éviter d'une part les manipulations et, d'autre part, d'avoir plusieurs tables contenant les mêmes informations.

Cordialement
La science se limite à trouver ce qui existe depuis toujours
Hubert REEVES
0