Suppression enregistrement ACCESS
Résolu
Forouest
-
flip86 -
flip86 -
Bonjour,
Je travail actuellement sur une base ACCESS.
Je souhaite supprimer des enregistrements d'une table A qui sont présents dans une table B.
J'utilise une requête dans laquelle j'ai ajouté ces 2 tables que j'ai liées sur un champ de même type (numérique en l'occurrence).
Access me retourne le message suivant : Impossible de supprimer dans les tables spécifiées.
Quelqu’un peut-il me dire pourquoi ce message m’est retourné et quelle serait la solution ?
D’avance
Merci
Je travail actuellement sur une base ACCESS.
Je souhaite supprimer des enregistrements d'une table A qui sont présents dans une table B.
J'utilise une requête dans laquelle j'ai ajouté ces 2 tables que j'ai liées sur un champ de même type (numérique en l'occurrence).
Access me retourne le message suivant : Impossible de supprimer dans les tables spécifiées.
Quelqu’un peut-il me dire pourquoi ce message m’est retourné et quelle serait la solution ?
D’avance
Merci
A voir également:
- Requête suppression access avec 2 tables
- Forcer suppression fichier - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Tables des matières word - Guide
- Suppression compte gmail - Guide
- Whatsapp avec 2 sim - Guide
17 réponses
J'ai fait le test, ça ne marche pas chez moi, donc j'ai feinté (requête imbriquée qui passe outre les relations entre tables) :
DELETE A.* FROM A WHERE A.Id IN (SELECT B.Id FROM B);
Salut,
c'est sûrement un problème d'intégrité réferentielle : on ne peut pas supprimer des enr. dans B sans supprimer A (sinon, ça va faire des orphelins)...
As-tu mis des relations entre tes tables et de quel type (suppression en cascade...) ?
c'est sûrement un problème d'intégrité réferentielle : on ne peut pas supprimer des enr. dans B sans supprimer A (sinon, ça va faire des orphelins)...
As-tu mis des relations entre tes tables et de quel type (suppression en cascade...) ?
Bon sang, mais c'est bien sûr !!!
Il ne faut pas avoir ton critère sur valide_prepa mais sur la clé primaire des deux tables, car actuellement tu renvoies des vrais/faux, pas des clés primaires...
Il ne faut pas avoir ton critère sur valide_prepa mais sur la clé primaire des deux tables, car actuellement tu renvoies des vrais/faux, pas des clés primaires...
DELETE Dossier1.* FROM Dossier1 WHERE Dossier1.cle IN (SELECT Dossier.cle FROM Dossier WHERE Dossier.Valide_prepa = True);Je pense que ça peut le faire...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
Il n'y a pas de relation entre ces tables exceptée celle que j'ai créée dans la requête et qui lie les 2 tables sur deux champs de même type.
J’ai créé ce lien de façon à ne supprimer dans la table principale A que les champs qui sont présents dans les deux tables.
A+
Merci
Il n'y a pas de relation entre ces tables exceptée celle que j'ai créée dans la requête et qui lie les 2 tables sur deux champs de même type.
J’ai créé ce lien de façon à ne supprimer dans la table principale A que les champs qui sont présents dans les deux tables.
A+
Merci
Salut,
Avec un peu de retard à l'allumage lié au manque de temps, voici la requête en SQL.
DELETE A.*
FROM A INNER JOIN B ON A.IDC = B.IDC;
A+
Merci
Avec un peu de retard à l'allumage lié au manque de temps, voici la requête en SQL.
DELETE A.*
FROM A INNER JOIN B ON A.IDC = B.IDC;
A+
Merci
salut je galère un peu dans le même domaine.
J'ai deux tables qui possède chacune lun champ oui / non.
J'aimerai supprimer dans la table2 les enregistrements qui on la case coché dans la table1
J'ai essayé la requête suivante mais ca ne marche pas :-(
DELETE A.* FROM A WHERE A.Id IN (SELECT B.Id FROM B WHERE B. "Champs OUI/NON" = True);
Merci d'avance
FLIP 86 FT Me204
J'ai deux tables qui possède chacune lun champ oui / non.
J'aimerai supprimer dans la table2 les enregistrements qui on la case coché dans la table1
J'ai essayé la requête suivante mais ca ne marche pas :-(
DELETE A.* FROM A WHERE A.Id IN (SELECT B.Id FROM B WHERE B. "Champs OUI/NON" = True);
Merci d'avance
FLIP 86 FT Me204
C'est quoi qui ne marche pas ?
Tu as essayé ta sous-requête seule pour voir si elle renvoie les bons résultats ?
Tu as essayé ta sous-requête seule pour voir si elle renvoie les bons résultats ?
Salut;
Merci de t'interessé à mes souci.
Ma sous requête fonctionne tres bien. SELECT Dossier.Valide_prepa FROM Dossier WHERE Dossier.Valide_prepa = True
Dossier et Dossier1 sont deux tables identiques (champs identiques mais pas le même nombre d'enregistrements)
Le champ "Valide_prepa" est un champ Oui/Non. IL est coché sur certains enregestriments de la Table DOSSIER mais dans aucun de ceux de la Table DOSSIER
Voici la requête
DELETE Dossier1.*
FROM Dossier1
WHERE Dossier1.Valide_prepa IN (SELECT Dossier.Valide_prepa FROM Dossier WHERE Dossier.Valide_prepa = True);
Ce que je veux faire c'est supprimer les enregistrements de la Table DOSSIER1 identique à ceux de la Table DOSSIER. La condition étant que les enregestriments de la Table DOSSIER ai leur champ "Valide_prepa" coché.
Car par la suite j'importe les enregistrements de la Table DOSSIER1 dans la table DOSSIER mais je ne veux pas que les enregistrements deja coché dans la Table DOSSIER ré apparraisse dans la table DOSSIER
Merici d'avance
FLIP86 FT Me204
Merci de t'interessé à mes souci.
Ma sous requête fonctionne tres bien. SELECT Dossier.Valide_prepa FROM Dossier WHERE Dossier.Valide_prepa = True
Dossier et Dossier1 sont deux tables identiques (champs identiques mais pas le même nombre d'enregistrements)
Le champ "Valide_prepa" est un champ Oui/Non. IL est coché sur certains enregestriments de la Table DOSSIER mais dans aucun de ceux de la Table DOSSIER
Voici la requête
DELETE Dossier1.*
FROM Dossier1
WHERE Dossier1.Valide_prepa IN (SELECT Dossier.Valide_prepa FROM Dossier WHERE Dossier.Valide_prepa = True);
Ce que je veux faire c'est supprimer les enregistrements de la Table DOSSIER1 identique à ceux de la Table DOSSIER. La condition étant que les enregestriments de la Table DOSSIER ai leur champ "Valide_prepa" coché.
Car par la suite j'importe les enregistrements de la Table DOSSIER1 dans la table DOSSIER mais je ne veux pas que les enregistrements deja coché dans la Table DOSSIER ré apparraisse dans la table DOSSIER
Merici d'avance
FLIP86 FT Me204
en faite ma table DOSSIER est une table que j'utilise dans ma base de donnée via des formulaires.
La table DOSSIER1 est une table qui me permet d'importer de nouveaux enregistrements. Cependant elle me retourne des enregistrments déja traité dans ma base de donnée via la Table DOSSIER. Je traite un enregestriments à partir du moment ou son champ "Valide_prepa" est coché.
JE en vois ce que tu veut dire par créer un formulaire et des états avec access
Voili voilà j'espere que tu as réussi à comprendre ma situation
Merci d'avance pour toute aide
FLIP 86 FT me204
La table DOSSIER1 est une table qui me permet d'importer de nouveaux enregistrements. Cependant elle me retourne des enregistrments déja traité dans ma base de donnée via la Table DOSSIER. Je traite un enregestriments à partir du moment ou son champ "Valide_prepa" est coché.
JE en vois ce que tu veut dire par créer un formulaire et des états avec access
Voili voilà j'espere que tu as réussi à comprendre ma situation
Merci d'avance pour toute aide
FLIP 86 FT me204
Et quand tu dis : ça ne marche pas, c'est quoi : pas de résultats, erreur dans l'exécution de la requête ?
Si je met =True dans la sous requete il ne fait rien la Table Dossier ne bouge pas
et si je =false iul me supprime toute la table DOSSIER1 alors que des enregistrements sont cochés dans la table DOSSIER donc il devrais au moins garder les enregistrements cochés
DELETE Dossier1.*
FROM Dossier1
WHERE Dossier1.Valide_prepa IN (SELECT Dossier.Valide_prepa FROM Dossier WHERE Dossier.Valide_prepa = True);
Merci d'avance
FLIP86 FT Me204
et si je =false iul me supprime toute la table DOSSIER1 alors que des enregistrements sont cochés dans la table DOSSIER donc il devrais au moins garder les enregistrements cochés
DELETE Dossier1.*
FROM Dossier1
WHERE Dossier1.Valide_prepa IN (SELECT Dossier.Valide_prepa FROM Dossier WHERE Dossier.Valide_prepa = True);
Merci d'avance
FLIP86 FT Me204
lol tu va rire mais je n'ai pas de clé primaire
chaque ligne de mes tables est unique par le biai d'un champ "N°Dossier" et d'un "Repere_tole"
est ce que tu as une idée dans ce cas ?
Merci d'avance
FLIP86 FT Me204
chaque ligne de mes tables est unique par le biai d'un champ "N°Dossier" et d'un "Repere_tole"
est ce que tu as une idée dans ce cas ?
Merci d'avance
FLIP86 FT Me204
Si ton champ "N°dossier" est unique, tu y fais référence :
DELETE Dossier1.* FROM Dossier1 WHERE Dossier1.[N°dossier] IN (SELECT Dossier.[N°dossier] FROM Dossier WHERE Dossier.Valide_prepa = True);sinon, si c'est le couple "N°dossier-repere_tole", tu fais référence aux deux champs, mais je ne sais pas si ça marche :
DELETE Dossier1.* FROM Dossier1 WHERE Dossier1.[N°dossier] IN (SELECT Dossier.[N°dossier] FROM Dossier WHERE Dossier.Valide_prepa = True) AND Dossier1.[reper_tole] IN (SELECT Dossier.repere_tole FROM Dossier WHERE Dossier.Valide_prepa = True);Le mieux est encore de mettre une vraie clé primaire...
J'ai essayé avec le code suivant
DELETE Dossier1.*
FROM Dossier1
WHERE (Dossier1.N°Dossier and Dossier1.Repere_tole) IN (SELECT Dossier.N°Dossier,Dossier.Repere_tole FROM Dossier WHERE Dossier.Valide_prepa = true);
mais il me mets le message d'erreur suivant
Vous avez écrit une sous-requête pouvant renvoyer plus d’un champ sans utiliser le mot réservé EXISTS dans la clause FROM de la requête principale. Révisez l'instruction SELECT de la sous-requête pour obtenir un seul champ.
FLIP86 FT Me204
DELETE Dossier1.*
FROM Dossier1
WHERE (Dossier1.N°Dossier and Dossier1.Repere_tole) IN (SELECT Dossier.N°Dossier,Dossier.Repere_tole FROM Dossier WHERE Dossier.Valide_prepa = true);
mais il me mets le message d'erreur suivant
Vous avez écrit une sous-requête pouvant renvoyer plus d’un champ sans utiliser le mot réservé EXISTS dans la clause FROM de la requête principale. Révisez l'instruction SELECT de la sous-requête pour obtenir un seul champ.
FLIP86 FT Me204
Super blux ca marche.
Merci beaucoup ça fonctionne
Si un jour tu passe en alsace fait moi signe je te paierai un verre tu viens de me sortir d'une semaine de merde et de pétage de plomb
MERCI BEAUCOUP !!!!!
A PLUS
FLIP 86 FT Me 204
Merci beaucoup ça fonctionne
Si un jour tu passe en alsace fait moi signe je te paierai un verre tu viens de me sortir d'une semaine de merde et de pétage de plomb
MERCI BEAUCOUP !!!!!
A PLUS
FLIP 86 FT Me 204
Voici le code pour que ça fonctionne
DELETE Dossier1.*
FROM Dossier1
WHERE Dossier1.[N°dossier] IN (SELECT Dossier.[N°dossier] FROM Dossier WHERE Dossier.Valide_prepa = True) AND Dossier1.[Repere_tole] IN (SELECT Dossier.Repere_tole FROM Dossier WHERE Dossier.Valide_prepa = True);
Un grand merci a BLUX encore
LE PROBLEME EST RESOLU!!!!
FLIP86 FT Me204
DELETE Dossier1.*
FROM Dossier1
WHERE Dossier1.[N°dossier] IN (SELECT Dossier.[N°dossier] FROM Dossier WHERE Dossier.Valide_prepa = True) AND Dossier1.[Repere_tole] IN (SELECT Dossier.Repere_tole FROM Dossier WHERE Dossier.Valide_prepa = True);
Un grand merci a BLUX encore
LE PROBLEME EST RESOLU!!!!
FLIP86 FT Me204
Bravo et merci pour ton aide et de ta patience compte tenu de la lenteur de mes réactions à tes interventions.
A bientôt peut-être sur ce Forum
Forouest
https://support.microsoft.com/fr-fr/help/467066