Requête ajout
Juliaz
-
Juliaz -
Juliaz -
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
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
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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?
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?
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
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
alors je suggère:
ou
les deux devraient donner le même résultat, l'un étant peut-être plus performant que l'autre.
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.
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
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