Access requête mise à jour multi tables..

21/05-2007 à 19:02Bien le bonjour à toutes et tous en ce joli lundi ! [:)(]

j'espère que le long week end a profité a certains.
Je viens avec une petite question facile :
j'ai 2 tables, liées par une relation Un à N qui respecte l'intégrité référentielle.
image

Je dispose du nombre d'habitants par communes, et j'aimerais que le nombre d'habitants par départements soit caluculé à partir du nombre d'habitants des communes du département concerné...

Je souhaite donc remplir le champ "pop_dpmt" (qui correspond au nombre d'habitants et qui est actuellement vide) en faisant une requête mise à jour qui prenne la somme du champ habitants "pop_comm" (rempli) de la table des communes, afin que le résultat soit dynamique avec les données de la table communes et qu'une éventuelle modification se répercute sur le nombre d'habitants dans le champ "pop_dpmt" de la table département..
J'ai fais de nombreuses tentatives mais un message d'erreur apparait quand je lance ma requête mise à jour : image

quelqu'un d'entre vous aurait il l'étincelle de génie pour m'aider à sortir de cette désagréable impasse ??
merci d'avance et bonne soirée à chacun(e) ! [;)]

Sophie


21/05-2007 à 21:01Bonjour Sophie,

J'avoue ne pas y arriver. Le principe est le suivant :

1/ Une 1ere requete calcule le nbre d'habitants par département :
select idDepartement, sum(pop_comm) as nb_population from commune group by idDepartement

2/ Il faut ensuite croiser les résultats de cette requête avec les idDepartement de la table DEPARTEMENT
UPDATE departement INNER JOIN
(select idDepartement, sum(pop_comm) as nb_pop from commune group by idDepartement) REQUETE
ON REQUETE.idDepartement = DEPARTEMENT.idDepartement
SET DEPARTEMENT.pop_comm = REQUETE.nb_pop

Mais !!! :
access renvoie l'erreur suivante : l'opération doit utiliser une requete qui peut etre mise à jour

En fait, après de multiples essais, une requete update doit pouvoir se servir de 2 tables qui peuvent être mises à jour. C'est abérant car on se sert uniquement du résultat de la requete.

La solution de contournement :
Créer la première requete : select idDepartement, sum(pop_comm) as nb_population from commune group by idDepartement

Copier les résultats dans le presse papier, et créer une nouvelle table (attention, les champs doivent correspondre avec les champs de la requete).
Il faut ensuite coller les résultats de la requete dans la nouvelle table. On va par exemple appeler la nouvelle table RES.

Et enfin, il faut exécuter cette requete :
UPDATE departement INNER JOIN RES
ON RES.idDepartement = DEPARTEMENT.idDepartement
SET DEPARTEMENT.pop_comm = RES.nb_pop

Et là, ça fonctionne...

Mais je vais quand même me renseigner pour voir s'il n'est pas possible de tout faire en une seule requête.
Si je suis pas clair (et ça ne m'étonnerait pas), n'hésites pas à me poser des questions.


----------
image


Access requête mise à jour multi tables..
22/05-2007 à 15:20Bonjour Bart64 (pyrenees atlantiques ??) [;)] et autres connectés...


en fait je suis embêtée car je voudrais bien trouver une solution en une seule manip tu vois..
sinon ne t'en fais pas tu es très clair et je te remercie pour ton aide rapide cette fois encore...

puisque c'est toi qui m'avais déjà aidée lors de ma précédente demande je te fais passer le code qui a finalement permis de lier mon formulaire à ma cellule cliquée d'une zone de liste (elle même issue d'une requête paramétrée)...image

au cas où tu ne te souviennes plus du sujet voici le lien :http://www.memoclic.com/forum/technique/229567/accessfiltresformulaires_requetes.html

Je garde ta solution sous le coude et je vais réfléchir mais je te remercie encore.

bonne fin de journée [:)(] à tous

Sophie

22/05-2007 à 21:21

(pyrenees atlantiques ??)



Oui, Pyrénées Atlantiques [:)(] Finalement, c'est plus connu que ce que je pensais.
Mais je suis maintenant exilé à paris depuis 3 ans ...

en fait je suis embêtée car je voudrais bien trouver une solution en une seule manip tu vois..



Je comprends bien. Après d'autres recherches, j'en arrive à penser que c'est une limitation d'access et qu'il n'existe pas de solution [:o] Mais ça serait quand même étonnant que access ne puisse pas faire ça...
Sinon, est-ce qu'un script access te conviendrait ? A partir d'un script, tout devient possible...


----------
image


23/05-2007 à 12:25Bonjour Bart des Pyrénées [;)]

on dirait que "l'expatriation" à Paris est nécessaire pour pas mal de personnes...

Comme tu dis un script pourrait régler ça mais si je choisis cette option ne t'inquiète pas nous (mes collègues et moi) sous-traiterons cette demande à une boîte spécialisée. Tu m'as déjà beaucoup aidée.

Un grand merci à toi et bonne journée image

Sophie

Access requête mise à jour multi tables..
25/05-2007 à 16:09OK, si tu as d'autres besoins de ce type, ce sera plus simple de sous-traiter.
Mais le script qui permet de faire ce dont tu as besoin ici ne prend pas plus de 10 lignes de code.

Bonne journée.


----------
image


25/05-2007 à 17:52Merci pour ce mail Bart64 [:)(]

En fait, je crois bien qu'on ne devrait pas avoir beaucoup d'autres demandes similaires et si tu penses que c'est assez simple à réaliser je ne suis pas contre un coup de main car je ne maîtrise pas du tout le développement....
Le problème c'est que je ne veux pas que ça te demande trop de temps. Je sais qu'on est tous bien occupés alors inutile d'en rajouter [;)]

A toi de me dire si tu penses avoir un chouilla de disponibilité pour ça
et si oui, c'est génial et je te donnerais toutes les précisions nécessaires mais ne te sens pas obligé.

Quoiqu'il en soit, je te remercie beaucoup encore. C'est vraiment agréable de trouver des personnes
disponibles et compétentes !
Bonne soirée et bon week end !! image
sOphie

Modifie par Modifié par sophie.dupont le 2


28/05-2007 à 17:06Ca ne me prendra pas beaucoup de temps.
Et je pense que c'est beaucoup mieux que de se faire voler par une société de services ! [°)]

je te donnerais toutes les précisions nécessaires



Ok


----------
image


Access requête mise à jour multi tables..
28/05-2007 à 17:27Finalement, il y a une solution !!!! C'est du access tout craché, c'est pas propre du tout !
Dans access, il y a possibilité d'utiliser du vb6 dans les requêtes SQL :

UPDATE departement
SET departement.pop_comm = DSum("[nb_hab_comm]", "commune", "[commune.idDepartement] = " & departement.idDepartement)

Et cette requête te sauve !


----------
image


28/05-2007 à 18:13Waouh !

d'une part : merci pour ta gentillesse, ça c'est de la classe vraiment ! image
d'autre part : quelle rapidité ! (+)

tu es vraiment une aide précieuse, je te remercie beaucoup.

Je vais essayer de me débrouiller grâce à ce bout de code magique et je te tiens vite au courant.

Bonne soirée !!!
sOphie [:)(]

Modifie par Modifié par sophie.dupont le 2


29/05-2007 à 20:58OK, j'attends de tes nouvelles [;)] Ce bout de code répond directement à ta première question. Ca évite de passer par un script vb.
Si tu as un souci, n'hésites pas.

Bonne soirée également !


----------
image


Access requête mise à jour multi tables..
30/05-2007 à 11:08Bonjour "Bart" !
image
Alors voici les nouvelles :
j'ai essayé de faire tourner cette jolie requête en créant une requête mise à jour sur ma table Département et en entrant le code que tu m'as donné :
image


juste une petite question pendant que j'y suis : n'est ce pas plutôt departement.pop_dpmt dans le code ??
UPDATE departement
SET departement.pop_comm = DSum("[nb_hab_comm]", "commune", "[commune.idDepartement] = " & departement.idDepartement)

merci de me le confirmer ...

je reprends donc : voici la tête de la requête qui est ainsi créée :
image


quand je valide pour l'éxécuter : voici la réponse :
image

j'essaye de comprendre et de recommencer depuis tout à l'heure mais je ne trouve pas..
j'ai vérifié les formats des champs et les types de données dans les 2 tables...et à priori ça n'est pas le souci..je te mets la structure et le nom des champs des 2 tables histoire que ce soit plus clair :
image
...
(?)
Merci pour ton avis... [;)]
à plus!

sOphie

Modifie par Modifié par sophie.dupont le 3


30/05-2007 à 11:29Bonjour Sophie,

n'est ce pas plutôt departement.pop_dpmt dans le code ??



Oui, c'est plutôt pop_dpmt .. J'avais mal lu tes tables..

Pour le message d'erreur, je pense que cela vient du fait que pop_comm et pop_dpmt ne sont pas du même type. Il faudrait vérifier si les deux champs sont de type numérique avec pour taille de champ "entier long".

image

En faisant des tables comme celles-ci, la requête fonctionne.
C'est dans le "Mode Création" dans la partie des Tables.


----------
image


30/05-2007 à 12:25Effectivement, j'étais en champs Réel double pour les 2 tables car on souhaite avoir les décimales.

Mais bon, j'ai essayé tout de même en passant les champs en entier long comme tu le suggères..
pourtant ça ne fonctionne pas. Même message d'erreur de conversion de type..
J'ai ensuite essayé de créer une nouvelle base dépouillée en ne conservant que les 2 tables concernées et j'ai recommencé mais de nouveau la même chose..

je continue à réfléchir et si j'ai l'illumination [;)] je t'informe !

à plus..
merci en tout cas pour ta disponibilité ! [:)(]

sOphie

j'ai une autre question qui n'a rien à voir mais tant pis : tu utilises une tablette graphique pour entourer les infos sur tes .gif ?

Modifie par Modifié par sophie.dupont le 3


Access requête mise à jour multi tables..
30/05-2007 à 15:05Pour la requête, il y a forcément une solution. Je t'envoie mon mail par MP et si tu me transfère la base access dépouillée et sans données, je pourrai jeter un coup d'oeil.

Sinon pour entourer les infos, je n'utilise rien de bien intéressant. Je fais une copie d'écran, je la colle sous paint, je ne garde que la partie d'écran que je souhaite et j'entoure avec le pinceau de paint [:)(]


----------
image


Le post anonyme est désactivé.
Merci de vous identifier

« Forum technique (liste des messages)15 enregistrements / page 1/1

À la Une de MemoClic

Le saviez vous ? Vous pouvez installer cette bannière ↑ gratuitement sur votre site !