Requête ajout

Fermé
Juliaz - 16 mai 2017 à 12:17
 Juliaz - 23 mai 2017 à 17:23
Bonjour,

Je tourne en rond depuis hier pour tenter de trouver une solution au problème suivant:

J'ai deux tables (tab1 et tab2 ) avec des champs identiques(id, nom,prénom,etc.).
La table 1 est plus complète que la table 2. Je précise qu'elles sont toutes deux utiles avec des fonctions différentes.
J'ai fait une requête ajout(avec l'assistant requête) pour récupérer des enregistrements ne se trouvant pas sur la table 2 grâce à leur ID qui est toujours égal à 02 (j'ai donc mis en critère de ma requête cet id).
Tout fonctionne très bien , les enregistrements sont bien ajoutés à ma table 2.

IL arrive que les enregistrements avec l'ID égale à 2 = c'est égale aux enregistrements ajoutés soient supprimés de la table source 1.
Je souhaiterais ainsi actualiser cette suppression et modifications dans la table 2.

La requête ajout ajoute bien les éléments nouveaux mais garde toujours ceux supprimés.

Pour être plus simple , je veux quand l'enregistrement avec l'Id = 2 est supprimé de la table 1 que çà soit aussi supprimé de la table2.

Quelle solution serait -elle adaptée?

Merci

3 réponses

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
16 mai 2017 à 20:45
bonsoir, pourquoi ne pas remplacer de temps en temps tout le contenu de la table 2 par les enregistrements de la table 1 ayant un ID de 2.
sinon, tu pourrais, en pus de ta requête ajout, avoir une requête qui supprime de la table 2 les enregistrements n'ayant pas de correspondant en table 1.
qu'en penses-tu?
0
Bonjour yg_be,

C'est plutôt la deuxième proposition qui me conviendrait.

"avoir une requête qui supprime de la table 2 les enregistrements n'ayant pas de correspondant en table 1. "

J'ai alors le code suivant

Private Sub Test_Click()
Dim SQL As String
SQL = "DELETE * FROM [tab2] WHERE ID Not IN (SELECT ID FROM tab1)"
DoCmd.RunSQL SQL
End Sub

çà marche mais il me supprime tous les enregistrements qu'ils ont pas en commun. Comment lui dire de supprimer seulement les enregistrements de la tab2 où ID=2 et qui n'ont pas de correspondance en tab1.

Je veux mettre "Where ID =2 Not IN (SELECT ID FROM tab1)"
mais çà ne marche pas.

Merci
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
17 mai 2017 à 20:20
quel est le champ qui permet de différencier chaque enregistrement, et qui fait le lien entre les deux tables? cela ne peut pas être seulement ID!
0
Bonjour yg_be

Un champ qui différencie bien chaque incident est le champ nommé Immatriculation
il est unique pour chaque enregistrement.

Sur tab1 et tab2, il a le même nom (Immatriculation).

Merci
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Juliaz
18 mai 2017 à 14:00
alors je suggère:
DELETE * FROM [tab2] WHERE ID = 2 AND Immatriculation Not IN (SELECT Immatriculation FROM tab1 WHERE ID = 2) 

ou
DELETE * FROM [tab2] WHERE ID = 2 AND Immatriculation Not IN (SELECT Immatriculation FROM tab1 ) 

les deux devraient donner le même résultat, l'un étant peut-être plus performant que l'autre.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
18 mai 2017 à 14:06
en fait, je ne comprends pas comment tu peux avoir dans la table2 des enregistrements ayant un id différent de 2. peux-tu expliquer?
0
Merci yg_be pour ton retour.
La table 2 est à la base un export des données issues de notre intranet.Ces données regroupent différents ID.Seul l'ID = 2 y est absent car ne faisant pas partie des id pris en compte dans notre export d'intranet.
Avec ma requête ajout je cherchais à rajouter ces ID qui sont égales à 2 pour compléter la table 2.
Le rajout se faisait très bien sauf qu'il arrive que certains données de la table 1 soit supprimées notamment les données avec l'ID =2.Et comme , je les avais rajoutées à ma table 2,je souhaitais lorsque l'ID =2 n'existe plus dans tab1 que çà disparaisse aussi dans la tab2.
C'était celà ma problématique.
Je peux reformuler si besoin.
J’ai testé ton code et ça marche très bien !!
C’est ce dont j’avais besoin !!

Merci encore
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
21 mai 2017 à 11:47
c'est très clair, Juliaz. n'étant pas certain d'avoir bien compris, je craignais de t'avoir mal conseillé.
0
Merci encore !!!
Juliaz
0