OVH Cloud OVH Cloud

Requête de non-correspondence

6 réponses
Avatar
Fred
Du forum, bonjour,

J'ai une table <article> et une table <détail article>.
Je voudrais effacer par requête suppression tous les articles qui n'ont pas
de détail article.
Au moment de lancer la requête, j'ai un message qui me dit de préciser dans
quelle table il faut supprimer les enregistrements.
Un vrai casse-tête !


DELETE [Articles].NoArticle, [Détail Article].NoDétailArticle
FROM [Articles] LEFT JOIN [Détail Article] ON [Articles].NoArticle = [Détail
Article].NoArticle
WHERE ((([Détail Article].NoDétailArticle) Is Null));

--> Specify the table containing the records you want to delete.

Si quelqu'un peut m'aider, merci d'avance !

Fred

6 réponses

Avatar
Didier Bicking
Cette fonction, dans un module, devrait marcher :

Function SuppArticle()

Dim Db As Database
Set Db = CurrentDb

Dim Art As Recordset
Set Art = Db.OpenRecordset("Article")

While Not Art.EOF
If DCount("Article", "Detail Article", "Article=" & Art!article) = 0
Then
Art.Delete
End If
Art.MoveNext
Wend

End Function

La fonction DCount comporte trois arguments :
- le nom du champ dans lequel les valeurs doivent être comptées
- le nom de la table dans laquelle se trouve ce champ
- le critère de sélection des enregistrements. Si le champ Article de la
table Détail n'est pas numérique, il faut écrire ce critère : "Article='" &
Art!article & "'"


--
Didier Bicking

http://perso.wanadoo.fr/dbicking


"Fred" a écrit dans le message de news:
439ffd76$0$13977$
Du forum, bonjour,

J'ai une table <article> et une table <détail article>.
Je voudrais effacer par requête suppression tous les articles qui n'ont
pas de détail article.
Au moment de lancer la requête, j'ai un message qui me dit de préciser
dans quelle table il faut supprimer les enregistrements.
Un vrai casse-tête !


DELETE [Articles].NoArticle, [Détail Article].NoDétailArticle
FROM [Articles] LEFT JOIN [Détail Article] ON [Articles].NoArticle =
[Détail Article].NoArticle
WHERE ((([Détail Article].NoDétailArticle) Is Null));

--> Specify the table containing the records you want to delete.

Si quelqu'un peut m'aider, merci d'avance !

Fred



Avatar
Eric
Bonjour,

Essaies ceci après avoir fait, de préférence, une copie de tes tables.

DELETE
FROM Articles
WHERE NoArticle NOT IN (SELECT DISTINCT NoArticle From [Détail Article])

Du forum, bonjour,

J'ai une table <article> et une table <détail article>.
Je voudrais effacer par requête suppression tous les articles qui n'ont pas
de détail article.
Au moment de lancer la requête, j'ai un message qui me dit de préciser dans
quelle table il faut supprimer les enregistrements.
Un vrai casse-tête !


DELETE [Articles].NoArticle, [Détail Article].NoDétailArticle
FROM [Articles] LEFT JOIN [Détail Article] ON [Articles].NoArticle = [Détail
Article].NoArticle
WHERE ((([Détail Article].NoDétailArticle) Is Null));

--> Specify the table containing the records you want to delete.

Si quelqu'un peut m'aider, merci d'avance !

Fred




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Jessy Sempere [MVP]
Bonjour

Essais :
DELETE [Articles].*
FROM [Articles] LEFT JOIN [Détail Article] ON [Articles].NoArticle = [Détail
Article].NoArticle
WHERE ((([Détail Article].NoDétailArticle) Is Null));

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Fred" a écrit dans le message de
news:439ffd76$0$13977$
Du forum, bonjour,

J'ai une table <article> et une table <détail article>.
Je voudrais effacer par requête suppression tous les articles qui n'ont
pas

de détail article.
Au moment de lancer la requête, j'ai un message qui me dit de préciser
dans

quelle table il faut supprimer les enregistrements.
Un vrai casse-tête !


DELETE [Articles].NoArticle, [Détail Article].NoDétailArticle
FROM [Articles] LEFT JOIN [Détail Article] ON [Articles].NoArticle [Détail
Article].NoArticle
WHERE ((([Détail Article].NoDétailArticle) Is Null));

--> Specify the table containing the records you want to delete.

Si quelqu'un peut m'aider, merci d'avance !

Fred




Avatar
Fred
Bonjour Jessy

Résultat:
Operation must use an updatable query
L'opération utilise une requête qui ne peut être mise à jour.

Effectivement, ta solution est la première que j'ai voulu utiliser.
Je pense que je vais passer d'abord par une requête mise à jour pour
"marquer" les enregistrement à supprimer par la suite.
Ca manque d'élégance mais bon...

Merci de m'avoir répondu
Fred

"Jessy Sempere [MVP]" a écrit dans le message de
news: 43a0162c$
Bonjour

Essais :
DELETE [Articles].*
FROM [Articles] LEFT JOIN [Détail Article] ON [Articles].NoArticle =
[Détail
Article].NoArticle
WHERE ((([Détail Article].NoDétailArticle) Is Null));

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Fred" a écrit dans le message de
news:439ffd76$0$13977$
Du forum, bonjour,

J'ai une table <article> et une table <détail article>.
Je voudrais effacer par requête suppression tous les articles qui n'ont
pas

de détail article.
Au moment de lancer la requête, j'ai un message qui me dit de préciser
dans

quelle table il faut supprimer les enregistrements.
Un vrai casse-tête !


DELETE [Articles].NoArticle, [Détail Article].NoDétailArticle
FROM [Articles] LEFT JOIN [Détail Article] ON [Articles].NoArticle > [Détail
Article].NoArticle
WHERE ((([Détail Article].NoDétailArticle) Is Null));

--> Specify the table containing the records you want to delete.

Si quelqu'un peut m'aider, merci d'avance !

Fred








Avatar
Fred
Bonjour Didier,

C'est ce qui s'appelle "prendre la porte de derrière".
Effectivement, là où les requêtes ne marchent pas ta solution me semble tout
à fait jouable.

Je te remercie
Fred


"Didier Bicking" a écrit dans le message de news:
43a00024$0$19688$
Cette fonction, dans un module, devrait marcher :

Function SuppArticle()

Dim Db As Database
Set Db = CurrentDb

Dim Art As Recordset
Set Art = Db.OpenRecordset("Article")

While Not Art.EOF
If DCount("Article", "Detail Article", "Article=" & Art!article) =
0 Then
Art.Delete
End If
Art.MoveNext
Wend

End Function

La fonction DCount comporte trois arguments :
- le nom du champ dans lequel les valeurs doivent être comptées
- le nom de la table dans laquelle se trouve ce champ
- le critère de sélection des enregistrements. Si le champ Article de la
table Détail n'est pas numérique, il faut écrire ce critère : "Article='"
& Art!article & "'"


--
Didier Bicking

http://perso.wanadoo.fr/dbicking


"Fred" a écrit dans le message de news:
439ffd76$0$13977$
Du forum, bonjour,

J'ai une table <article> et une table <détail article>.
Je voudrais effacer par requête suppression tous les articles qui n'ont
pas de détail article.
Au moment de lancer la requête, j'ai un message qui me dit de préciser
dans quelle table il faut supprimer les enregistrements.
Un vrai casse-tête !


DELETE [Articles].NoArticle, [Détail Article].NoDétailArticle
FROM [Articles] LEFT JOIN [Détail Article] ON [Articles].NoArticle =
[Détail Article].NoArticle
WHERE ((([Détail Article].NoDétailArticle) Is Null));

--> Specify the table containing the records you want to delete.

Si quelqu'un peut m'aider, merci d'avance !

Fred







Avatar
Eric
Bonsoir,

Et ma solution ne convient pas ?
Prendre de l'artillerie lourde pour faire une suppression me parait
injustifiée mais bon c'est un choix ;-)

Bonjour Didier,

C'est ce qui s'appelle "prendre la porte de derrière".
Effectivement, là où les requêtes ne marchent pas ta solution me semble tout
à fait jouable.

Je te remercie
Fred


"Didier Bicking" a écrit dans le message de news:
43a00024$0$19688$

Cette fonction, dans un module, devrait marcher :

Function SuppArticle()

Dim Db As Database
Set Db = CurrentDb

Dim Art As Recordset
Set Art = Db.OpenRecordset("Article")

While Not Art.EOF
If DCount("Article", "Detail Article", "Article=" & Art!article) =
0 Then
Art.Delete
End If
Art.MoveNext
Wend

End Function

La fonction DCount comporte trois arguments :
- le nom du champ dans lequel les valeurs doivent être comptées
- le nom de la table dans laquelle se trouve ce champ
- le critère de sélection des enregistrements. Si le champ Article de la
table Détail n'est pas numérique, il faut écrire ce critère : "Article='"
& Art!article & "'"


--
Didier Bicking

http://perso.wanadoo.fr/dbicking


"Fred" a écrit dans le message de news:
439ffd76$0$13977$

Du forum, bonjour,

J'ai une table <article> et une table <détail article>.
Je voudrais effacer par requête suppression tous les articles qui n'ont
pas de détail article.
Au moment de lancer la requête, j'ai un message qui me dit de préciser
dans quelle table il faut supprimer les enregistrements.
Un vrai casse-tête !


DELETE [Articles].NoArticle, [Détail Article].NoDétailArticle
FROM [Articles] LEFT JOIN [Détail Article] ON [Articles].NoArticle =
[Détail Article].NoArticle
WHERE ((([Détail Article].NoDétailArticle) Is Null));

--> Specify the table containing the records you want to delete.

Si quelqu'un peut m'aider, merci d'avance !

Fred









--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr