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/11/2011, 19h06   #1
Membre régulier
 
Inscription : mai 2004
Messages : 337
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 337
Points : 90
Points : 90
Par défaut suppression de doublon

Bonjour,
Je développe avec Access 2003 sous Windows XP Pro.

J'ai utilisé l'assistant de requête d'access pour générer la requête recherche de doublon, dont voici le résultat :
Code :
1
2
3
4
5
 
SELECT  FICINF.NUMINF
FROM FICINF
WHERE (((FICINF.NUMINF) In (SELECT [NUMINF] FROM [FICINF] As Tmp GROUP BY [NUMINF] HAVING Count(*)>1 )))
ORDER BY FICINF.NUMINF;
Jusque là, tout va bien, il m'affiche bien mes doublons.
Par contre, je voudrais effacer l'un des doublons et conserver l'autre.
Je ne vois pas comment procéder, j'ai pensé à la commande distinct mais quand je l'exécute, rien ne s'affiche et access se bloque et je suis obligé de faire fin de tâche pour l'arrêter.
Si quelqu'un a une idée, je suis preneur.
Merci
Willy
willytito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 21h33   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Salut,

Sinon il y a l'option VBA, avec une fonction qui élimine les doublons de ta table, du style :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Public Function SupprimerDoublons()
Dim rst As DAO.Recordset
Dim NI As Long
 
Set rst = CurrentDb.OpenRecordset("select * from FICINF order by NumInf;", dbOpenDynaset)
 
NI = rst!NumInf
 
   If Not rst.EOF Then
 
   rst.MoveNext
 
   Do Until rst.EOF
 
      If NI = rst!NumInf Then
 
         rst.Delete
 
      Else
 
        NI = rst!NumInf
 
      End If
 
   rst.MoveNext
 
   Loop
 
   End If
 
 
End Function
Elle balaie les enregistrements classés par ordre croissant, et supprimer les NumInf qui se répètent...

Sinon niveau requête tu peux ajouter un champ numéro auto et appliquer les conseils de sqlpro.

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 22h15   #3
Membre régulier
 
Inscription : mai 2004
Messages : 337
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 337
Points : 90
Points : 90
Par défaut Merci

Je testerai le code VBA demain.
J'ai regardé SQLpro, mais c'est un peu trop compliqué pour moi.
Encore merci

Willy
willytito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 22h44   #4
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Re,

Pour la solution "compliquée", une fois que tu as crée ton champ numéro auto, nommé par exemple "NumAuto", ca devrait te faire pour la requête suppression:

Code sql :
1
2
3
4
5
6
DELETE *
FROM   FICINF T
WHERE  T.NumAuto < ANY (SELECT NumAuto
                      FROM   FICINF T2
                      WHERE  T.NumAuto <> T2.NumAuto
                        AND  T.NUMINF = T2.NUMINF)

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 01h28   #5
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 895
Points : 3 895
Salut User et willytito,

Denis tu triches...
tu as rajouté un champ numAuto ;P
et puis t'es sur que "T.NumAuto <> T2.NumAuto" soit bien utile ?... ;P

willytito tu l'auras peut être compris: il faut pouvoir différencier les enregistrements entre eux pour pouvoir les supprimer.
si tu veux pas trop coder en vba tu peux encore dupliquer le résultat du select distinct dans une table temporaire, supprimer l'original et renommer cette dernière... mais il est préférable qu'il n'y ai pas de relation avec.

pour faire simple je te recommande aussi le code vba de l'ami User.
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 10h17   #6
Membre régulier
 
Inscription : mai 2004
Messages : 337
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 337
Points : 90
Points : 90
Par défaut encore merci

Je vous remercie pour toutes ces explications.
Effectivement, je vais le faire en VBA d'autant plus que je dois faire cette manipulation sur plusieurs tables.
Je vais créer ma procédure et je vous tiens au courant.

Willytito
willytito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 11h11   #7
Membre régulier
 
Inscription : mai 2004
Messages : 337
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 337
Points : 90
Points : 90
Par défaut ça marche

Merci beaucoup !
J'ai utilisé le code VBA de USER.
Willytito
willytito 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 11h01.


 
 
 
 
Partenaires

Hébergement Web