OVH Cloud OVH Cloud

Jointure entre tables

7 réponses
Avatar
Warrio
Bonjour,

Pourquoi en faisant une requête access sur plusieurs tables, il devient par
fois impossible de modifier le résultat de cette requête. Je sais que c'est
en relation avec les indexes, qui doivent peut-être paramétrés pour ne pas
permettre des valeurs nulles...

Comment ça fonctionne exactement? pour s'assurer de toujours être capable
d'éditer le recordset.

Merci pour toute suggestion.

7 réponses

Avatar
Tisane
Bonjour Warrio,

Pourquoi en faisant une requête access sur plusieurs tables, il
devient par fois impossible de modifier le résultat de cette requête.
Je sais que c'est en relation avec les indexes, qui doivent peut-être
paramétrés pour ne pas permettre des valeurs nulles...
Comment ça fonctionne exactement? pour s'assurer de toujours être
capable d'éditer le recordset.


L'objectif d'une requête est d'abord la recherche, pas la
saisie/modification des données, (exceptées les requêtes "action" : mise à
jour, suppression, ajout).
Si tu fais une requête sur une seule table, pas de problème. C'est comme si
tu étais dans la table.
Si tu as 2 tables dans ta requête, liées avec l'intégrité réferentielle, tu
ne feras en effet pas ce que tu veux.

Je n'expliquerai pas mieux que ce qui est dit ici :
http://office.microsoft.com/fr-fr/assistance/HP030702011036.aspx
Chapitre "Type de requêtes spécifiques"
Rubrique "Requêtes de sélection"
Sous-rubrique "Je ne parviens pas à mettre à jour les données d'une requête"
Développe les sous-sous-rubriques ;-)

--
Tisane

Avatar
Warrio
Hello Tisane!
Merci de ta réponse! le but d'une requete select et d'afficher les résultat
si on veut jouer avec les mots...
Tu peux également faire une requete d'execution en faisant :

UPDATE Table1 SET Field1 = (SELECT Field1 FROM Table2 WHERE ...)
ou encore..
INSERT INTO Table1 (Field1) SELECT Field1 FROM Table2 WHERE ...

Ma question est comme je l'expliqait dans mon message est d'utiliser une
requete de type SELECT comme recordset dans un recordsource d'une fenêtre.
Aisni donner à l'utilisateur la possibilité de modifier les données
directement dans les champs qui sont liés à ce recordset.

Seulement, je sais qu'on utilisant des requetes contenant par exemple
DISTINCT, SUM(, LAST( ..., ou GROUP BY, la requette pert son editabilité.

Une requete sur des tables ou une liaison 'Many to Many' n'est pas updatable
non plus. et c'est la ou j'aimerais des précisions exactement...

Merci pour toute suggestion





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

Bonjour Warrio,

Pourquoi en faisant une requête access sur plusieurs tables, il
devient par fois impossible de modifier le résultat de cette requête.
Je sais que c'est en relation avec les indexes, qui doivent peut-être
paramétrés pour ne pas permettre des valeurs nulles...
Comment ça fonctionne exactement? pour s'assurer de toujours être
capable d'éditer le recordset.


L'objectif d'une requête est d'abord la recherche, pas la
saisie/modification des données, (exceptées les requêtes "action" : mise
à jour, suppression, ajout).
Si tu fais une requête sur une seule table, pas de problème. C'est comme
si tu étais dans la table.
Si tu as 2 tables dans ta requête, liées avec l'intégrité réferentielle,
tu ne feras en effet pas ce que tu veux.

Je n'expliquerai pas mieux que ce qui est dit ici :
http://office.microsoft.com/fr-fr/assistance/HP030702011036.aspx
Chapitre "Type de requêtes spécifiques"
Rubrique "Requêtes de sélection"
Sous-rubrique "Je ne parviens pas à mettre à jour les données d'une
requête"
Développe les sous-sous-rubriques ;-)

--
Tisane



Avatar
3stone
Salut,

"Warrio"
[...]
| Une requete sur des tables ou une liaison 'Many to Many' n'est pas updatable
| non plus. et c'est la ou j'aimerais des précisions exactement...


Tu sais, mais ne comprend pas...

Le problème vient du fait qu'il n'est pas (toujours) possible d'attribuer une
valeur à un enregistrement précis, malgré que l'on connait parfaitement
le _champ_ concerné.

La comparaison foireuse...
Laisse tomber une goutte au dessus d'un entonnoir, elle finira par sortir par
le petit trou... mais la même goutte qui tombe dans le petit trou ne peut
retrouver le chemin précédemment parcouru ;-)

Autrement dit, dès que la requête remonte plutôt un "résultat", elle
devient non updatable...

La solution est toujours de modifier/simplifier la requête pour qu'elle
permette la mise à jour... et réfléchir sur la bonne organisation des tables.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Tisane
[...]
Une requete sur des tables ou une liaison 'Many to Many' n'est pas
updatable non plus. et c'est la ou j'aimerais des précisions
exactement...


As-tu au moins pris la peine de lire les explications données sur la page
que je t'ai indiquée précédemment ?

--
Tisane


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

Bonjour Warrio,

Pourquoi en faisant une requête access sur plusieurs tables, il
devient par fois impossible de modifier le résultat de cette
requête. Je sais que c'est en relation avec les indexes, qui
doivent peut-être paramétrés pour ne pas permettre des valeurs
nulles... Comment ça fonctionne exactement? pour s'assurer de toujours
être
capable d'éditer le recordset.


L'objectif d'une requête est d'abord la recherche, pas la
saisie/modification des données, (exceptées les requêtes "action" : mise
à jour, suppression, ajout).
Si tu fais une requête sur une seule table, pas de problème. C'est
comme si tu étais dans la table.
Si tu as 2 tables dans ta requête, liées avec l'intégrité
réferentielle, tu ne feras en effet pas ce que tu veux.

Je n'expliquerai pas mieux que ce qui est dit ici :
http://office.microsoft.com/fr-fr/assistance/HP030702011036.aspx
Chapitre "Type de requêtes spécifiques"
Rubrique "Requêtes de sélection"
Sous-rubrique "Je ne parviens pas à mettre à jour les données d'une
requête"
Développe les sous-sous-rubriques ;-)

--
Tisane





Avatar
Warrio
Salut Pierre!
Merci pour ta réponse, tu m'as donné un début de réponse en disant qu'il
fallait simplifier la structure des données pour pouvoir simplifier l'accès
aux données. c'est bien juste, mais comment? quelles sont les choses à faire
et à ne pas faire?
ma base est conçue selon le modèle merise, qui est un système de bdd
relationnel. donc si j'ai une jointure n2n, c'est parce que les flux
d'information doit avoir un tel schéma.

j'ai obtenu une réponse qui s'approche un peu plus de Jeff L. sur un autre
forum (voir ci-dessous), et je vais tenter d'approfondir un peu.

Often times when you join fields together, one of the fields should be
the primary key of one of the tables. If one or more of the tables you
are using either does not have a primary key, or you are not using the
primary key in the join, then in a lot of cases you cannot edit the
data. Another thing, if you are using outer joins, then that could be
a cause to not being able to update the data.


Merci encore

"3stone" a écrit dans le message de news:
%
Salut,

"Warrio"
[...]
| Une requete sur des tables ou une liaison 'Many to Many' n'est pas
updatable
| non plus. et c'est la ou j'aimerais des précisions exactement...


Tu sais, mais ne comprend pas...

Le problème vient du fait qu'il n'est pas (toujours) possible d'attribuer
une
valeur à un enregistrement précis, malgré que l'on connait parfaitement
le _champ_ concerné.

La comparaison foireuse...
Laisse tomber une goutte au dessus d'un entonnoir, elle finira par sortir
par
le petit trou... mais la même goutte qui tombe dans le petit trou ne peut
retrouver le chemin précédemment parcouru ;-)

Autrement dit, dès que la requête remonte plutôt un "résultat", elle
devient non updatable...

La solution est toujours de modifier/simplifier la requête pour qu'elle
permette la mise à jour... et réfléchir sur la bonne organisation des
tables.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/



Avatar
Warrio
Hello Tisane!

Oui j'ai lu ce qu'il y était écrit et je pourrais récrire son contenu les
yeux fermés.






"Tisane" a écrit dans le message de news:
%
[...]
Une requete sur des tables ou une liaison 'Many to Many' n'est pas
updatable non plus. et c'est la ou j'aimerais des précisions
exactement...


As-tu au moins pris la peine de lire les explications données sur la page
que je t'ai indiquée précédemment ?

--
Tisane


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

Bonjour Warrio,

Pourquoi en faisant une requête access sur plusieurs tables, il
devient par fois impossible de modifier le résultat de cette
requête. Je sais que c'est en relation avec les indexes, qui
doivent peut-être paramétrés pour ne pas permettre des valeurs
nulles... Comment ça fonctionne exactement? pour s'assurer de toujours
être
capable d'éditer le recordset.


L'objectif d'une requête est d'abord la recherche, pas la
saisie/modification des données, (exceptées les requêtes "action" : mise
à jour, suppression, ajout).
Si tu fais une requête sur une seule table, pas de problème. C'est
comme si tu étais dans la table.
Si tu as 2 tables dans ta requête, liées avec l'intégrité
réferentielle, tu ne feras en effet pas ce que tu veux.

Je n'expliquerai pas mieux que ce qui est dit ici :
http://office.microsoft.com/fr-fr/assistance/HP030702011036.aspx
Chapitre "Type de requêtes spécifiques"
Rubrique "Requêtes de sélection"
Sous-rubrique "Je ne parviens pas à mettre à jour les données d'une
requête"
Développe les sous-sous-rubriques ;-)

--
Tisane








Avatar
Warrio
voilà un peu de matière pour ceux que ca interresse:
--------------------
In Access Help type the following in the Answer Wizard tab
When can I update data from a query
Select that from the list for an explanation of some of the causes and
alternative solutions.

Access MVP Allen Browne has summarized **many** of the reasons:

Query results will be read-only if any of the following apply:
. It has a GROUP BY clause (totals query).
. It has a TRANSFORM clause (crosstab query).
. It contains a DISTINCT predicate.
. It uses First(), Sum(), Max(), Count(), etc. in the SELECT clause
(performs aggregation).
. It involves a UNION.
. It has a subquery in the SELECT clause.
. It uses JOINs of different directions on multiple tables in the FROM
clause.
. The query's Recordset Type property is set to Snapshot.
. The query is based on another query that is read-only (stacked query.)
. Your permissions are read-only (Access security.)
. The database is opened read-only, or the file attributes are read-only, or
the database is on read-only media (e.g. CD-ROM, network drive without write
privileges.)

--
Allen Browne - Microsoft MVP. Perth, Western Australia.


"Warrio" a écrit dans le message de news:
451cc84e$0$13446$
Hello Tisane!

Oui j'ai lu ce qu'il y était écrit et je pourrais récrire son contenu les
yeux fermés.






"Tisane" a écrit dans le message de news:
%
[...]
Une requete sur des tables ou une liaison 'Many to Many' n'est pas
updatable non plus. et c'est la ou j'aimerais des précisions
exactement...


As-tu au moins pris la peine de lire les explications données sur la page
que je t'ai indiquée précédemment ?

--
Tisane


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

Bonjour Warrio,

Pourquoi en faisant une requête access sur plusieurs tables, il
devient par fois impossible de modifier le résultat de cette
requête. Je sais que c'est en relation avec les indexes, qui
doivent peut-être paramétrés pour ne pas permettre des valeurs
nulles... Comment ça fonctionne exactement? pour s'assurer de toujours
être
capable d'éditer le recordset.


L'objectif d'une requête est d'abord la recherche, pas la
saisie/modification des données, (exceptées les requêtes "action" :
mise à jour, suppression, ajout).
Si tu fais une requête sur une seule table, pas de problème. C'est
comme si tu étais dans la table.
Si tu as 2 tables dans ta requête, liées avec l'intégrité
réferentielle, tu ne feras en effet pas ce que tu veux.

Je n'expliquerai pas mieux que ce qui est dit ici :
http://office.microsoft.com/fr-fr/assistance/HP030702011036.aspx
Chapitre "Type de requêtes spécifiques"
Rubrique "Requêtes de sélection"
Sous-rubrique "Je ne parviens pas à mettre à jour les données d'une
requête"
Développe les sous-sous-rubriques ;-)

--
Tisane