Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/01/2011, 02h02   #1
Invité de passage
 
Inscription : septembre 2008
Messages : 14
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : septembre 2008
Messages : 14
Points : 2
Points : 2
Par défaut Requête UPDATE ou AJOUT

Bonjour à tous,

Je travaille sur base Access2003 nommée "Examens" qui comporte entre autres une table Candidat dont les champs sont Nom, Prénom, NAS, Adresse_1, Adresse_2

Une base similaire est utilisée par d'autres avec des données plus à jour que les miennes.

Je souhaiterais pour les candidats dont le NAS est identique dans les 2 tables être capable de mettre à jour uniquement les champs Adresse_1 et Adresse_2 de ma table Candidat aves les données de la table Candidat de la base la plus récente afin de ne pas perdre les autres infos qui sont présentes dans ma table de destination. Pour encore faciliter le tout, il faudrait que si un candidat n'est pas présent dans ma base de destination celui-ci soit ajouté avec les données présentes dans l'ensemble des champs de la table source.

Personnellement, mais connaissances ne me permettent plus de répondre à mon besoin, j'en appelle donc à votre aide! Merci à ceux qui me réponderont!
LIMITE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 11h21   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour LIMITE,

Il te faudra deux requêtes : une de type "mise à jour" (UPDATE), l'autre de type "ajout" (INSERT).

D'après ce que j'ai compris, le champ "NAS" est la clé primaire de tes deux tables.

Soit la base Examens_LIMITE, ta base, et la base Examens_AJour, la base plus récente. Dans Examens_LIMITE, créer une table liée sur Candidat de Examens_AJour.

Via l'assistant, en type de requête "mise à jour" :
- ajouter Candidat de Examens_LIMITE (FROM) ;
- ajouter Candidat de Examens_AJour (FROM) ;
- lier Candidat de Examens_LIMITE à Candidat de Examens_AJour via NAS (JOIN) ;
- ajouter le champ Adresse_1 de Candidat de Examens_LIMITE, valeur Adresse_1 de Candidat de Examens_AJour (SET) ;
- ajouter le champ Adresse_2 de Candidat de Examens_LIMITE, valeur Adresse_2 de Candidat de Examens_Ajour (SET).
==> à tester.

Via l'assistant, en type de requête "ajout" :
- dans la table Candidat de Examens_LIMITE (INSERT) ;
- ajouter Candidat de Examens_AJour ;
- ajouter Candidat de Examens_LIMITE ;
- lier Candidat de Examens_AJour à Candidat de Examens_LIMITE via NAS avec flèche à droite ;
- ajouter le champ NAS de Candidat de Examens_LIMITE, critère "est null" (WHERE) ;
- ajouter tous les champs de Candidat de Examens_AJour dans Candidat de Examens_LIMITE.
==> à tester.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 22h25   #3
Invité de passage
 
Inscription : septembre 2008
Messages : 14
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : septembre 2008
Messages : 14
Points : 2
Points : 2
Par défaut SUITE

Merci Richard 35,

J'ai testé tes solutions et voilà les codes qui en résultent. Ils font ce que je voulais mais avant de modifier les quelques 550000 lignes de mon fichier en production, je te serais reconnaissant d'y jeter un oeil et peut-être me signaler si quelque chose te semble bizarre.

J'ai nommé SOURCE la table avec les données les plus récentes et DESTINATION ma table dans laquelle je souhaite importer les données

UPDATE:
Code sql :
1
2
3
UPDATE SOURCE, DESTINATION 
SET DESTINATION.Adresse_1 = SOURCE.Adresse_1, DESTINATION.Adresse_2 = SOURCE.Adresse_2, DESTINATION.Code_postal = SOURCE.Code_postal
WHERE (((DESTINATION.NAS)=[SOURCE].[NAS]));

AJOUT:
Code sql :
1
2
3
4
INSERT INTO DESTINATION ( Nom, Prénom, Adresse_1, Adresse_2, Code_postal, NAS )
SELECT SOURCE.Nom, SOURCE.Prénom, SOURCE.Adresse_1, SOURCE.Adresse_2, SOURCE.Code_postal, SOURCE.NAS
FROM SOURCE LEFT JOIN DESTINATION ON SOURCE.NAS = DESTINATION.NAS
WHERE (((DESTINATION.NAS) IS NULL));

Merci!
LIMITE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2011, 11h53   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour LIMITE,

Je préfère que tu postes l'image graphique des requêtes (via l'assistant), c'est plus parlant.

Sinon, tu peux :
- faire une sauvegarde de ta table DESTINATION ;
- lancer les requêtes ;
- analyser les données "avant/après" de DESTINATION.
==> tu devrais, ainsi, pouvoir tout analyser.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2011, 16h30   #5
Invité de passage
 
Inscription : septembre 2008
Messages : 14
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : septembre 2008
Messages : 14
Points : 2
Points : 2
Merci Richard,

Je vais effectivement faire des tests avant d'envoyer ça en prod. Je vais mettre le post en Résolu mais je suis intrigué par ta demande d'afficher une image graphique de la requête. Comment est-ce que je peux produire cette image, est-ce que c'est similaire a l'affichage des relations de ma base?

Encore merci pour ton aide!
LIMITE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2011, 23h10   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonsoir LIMITE,

Citation:
mais je suis intrigué par ta demande d'afficher une image graphique de la requête
==> il s'agit de l'image écran de la fenêtre utilisée par l'assistant de création de requête : la vue de cette fenêtre, en général, montre, clairement, les éventuelles anomalies.


Quant à ta requête
Code sql :
1
2
3
UPDATE SOURCE, DESTINATION 
SET DESTINATION.Adresse_1 = SOURCE.Adresse_1, DESTINATION.Adresse_2 = SOURCE.Adresse_2, DESTINATION.Code_postal = SOURCE.Code_postal
WHERE (((DESTINATION.NAS)=[SOURCE].[NAS]));
==> je m'étonne de ne pas voir de liaison entre les tables (JOIN).
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2011, 14h17   #7
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
bonjour
Je te propose de faire des recherches sur ce qu'on appelle la réplication dans access.(voir replica et replicas partiels dans l'aide d'access)

@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 23h32   #8
Invité de passage
 
Inscription : septembre 2008
Messages : 14
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : septembre 2008
Messages : 14
Points : 2
Points : 2
Par défaut Merci

Merci à tous et spécialement à Richard 35. Pour ce qui est du JOIN effectivement, il n'y en a pas mais, Quel est l'impact? Merci
LIMITE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 11h00   #9
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour LIMITE,

Citation:
Pour ce qui est du JOIN effectivement, il n'y en a pas mais, Quel est l'impact?
==> la vérité, c'est que je ne pensais pas qu'une requête de ce type pourrait fonctionner... deux tables posées, comme cela, sans les lier me paraissait bizarre, analytiquement parlant.


Pour répondre à ta question, le JOIN remplace de WHERE.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h26.


 
 
 
 
Partenaires

Hébergement Web