Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1080 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Eliminer doublons d'une table avec condition sur un champ

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Eliminer doublons d'une table avec condition sur un champ

n°1461815
bouboute_2​4
Posté le 21-10-2006 à 09:45:05  profilanswer
 

Salut encore moi :hello:  
 
J’ai une table Controle_qualite dans laquelle les operateurs entrent les informations concernant les pieces examinees. La structure est la suivante :
 
PieceID          Ligne_production      defaut_ID     la_date
 
chaque piece examinee peut etre sans defaut (dans ce cas, on entre un defautID= ‘GOOd’), ou avoir un ou plusieurs defauts. Par contre des fois les mauvaises informations sont rentrees. Pour la meme piece, on peut trouver un enregistrement où la piece est bonne et un autre enregistrement pour avec un code de defaut. J’essaie de créer un code qui s’il trouve dans la table 2 enregistrements pour la meme piece et que pour l’un des enregistrements defautID=’GOOD’, qu’il supprime cette enregistrement
 
J’ai essaye de le faire avec le code suivant :
 
Dim ra, autre as recordset
Set ra = CurrentDb.OpenRecordset("Controle_qualite", dbOpenDynaset)
ra.MoveFirst
Do Until ra.EOF
Set autre = CurrentDb.OpenRecordset("select * from Controle_qualite where Controle_qualite.ProduitID='" & ra!ProduitID & "'", dbOpenDynaset)
If autre.RecordCount = 1 Or autre.RecordCount = 0 Then
    ra.MoveNext
Else
    Do Until autre.EOF
    autre.MoveFirst
    If (autre!defautID <> ra! defautID And autre!scan_date = re!scan_date And And autre!ligne_production= ra! ligne_production) Then
        If ra! defautID = "GOOD" And autre! defautID <> " GOOD " Then
            ra.Delete
        Else
            If autre! defautID = " GOOD " And ra! defautID <> " GOOD " Then
                autre.Delete
            Else
            autre.MoveNext
            End If
        End If
    Else
        autre.MoveNext
    End If
    Loop
End If
ra.MoveNext
Loop
End Sub
 
Ca donne l’erreur « aucun enregistrement en cours » quand j’execute le code. Quelqu’un a une idee comment faire ?
 
Merci d’avance encore :jap:  

mood
Publicité
Posté le 21-10-2006 à 09:45:05  profilanswer
 

n°1461898
seniorpapo​u
Posté le 21-10-2006 à 13:18:18  profilanswer
 

Bonjour,
dans :

Citation :

If autre.RecordCount = 1 Or autre.RecordCount = 0 Then  
    ra.MoveNext  
Else


 
retires le ra.movenext qui est redondant avec celui qui précède le loop
Cordialement
 
Une question: est-ce le code exact ou le code réécrit sur le post?
parce que je vois re!scan_date re n'existe pas
 
ou encore:
Do Until autre.EOF  
    autre.MoveFirst
 
ce qui laisse supposer que l'on va tourner en rond
 
la séquence suivante mène à un pb:
 

Citation :

 If (autre!defautID <> ra! defautID And autre!scan_date = re!scan_date And And autre!ligne_production= ra! ligne_production) Then  
        If ra! defautID = "GOOD" And autre! defautID <> " GOOD " Then  
            ra.Delete


  en effet ra.delete   supprime le record en cours et lorsque l'on remonte sur le if ra!....., le record n'existe plus!!!  
 
de plus les noms de champs  
 
PieceID          Ligne_production      defaut_ID     la_date  
 
ne sont pas tout à fait ceux du module!!
@+


Message édité par seniorpapou le 21-10-2006 à 15:38:37
n°1462306
seniorpapo​u
Posté le 22-10-2006 à 09:02:59  profilanswer
 

Bonjour,
En regardant à nouveau ton code, je crains fort qu'il ne faille repenser le tout et trouver quelque chose de moins compliqué.
Cordialement

n°1462318
Beegee
Posté le 22-10-2006 à 09:55:53  profilanswer
 

Quelque chose comme ça :
 

Code :
  1. delete from Controle_qualite cq1
  2. where cq1.defautID = 'GOOD'
  3. and exists (select 1 from Controle_qualite cq2 where cq2.PieceID = cq1.PieceID and cq2.defautID <> 'GOOD');

n°1462340
seniorpapo​u
Posté le 22-10-2006 à 10:49:22  profilanswer
 

Bonjour Beegee,
oui, juste que bouboute veut que ce soit pour "PieceID et ligne_ production et scan-date" identiques
Cordialement
 
edit: bouboute_24


Message édité par seniorpapou le 22-10-2006 à 11:05:45
n°1462355
Beegee
Posté le 22-10-2006 à 11:11:27  profilanswer
 

Code :
  1. delete from Controle_qualite cq1
  2. where cq1.defautID = 'GOOD'
  3. and exists (select 1
  4.             from Controle_qualite cq2
  5.             where cq2.PieceID = cq1.PieceID
  6.             and cq2.ligne_production = cq1.ligne_production
  7.             and cq2.scan-date = cq1.scan_date
  8.             and cq2.defautID <> 'GOOD');

n°1467158
bouboute_2​4
Posté le 30-10-2006 à 02:23:13  profilanswer
 

Merci Beegee,
 
Je viens d'essayer le code et ca marche parfaitement bien


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Eliminer doublons d'une table avec condition sur un champ

 

Sujets relatifs
afficher les 3 plus grandes valeurs dans une tableafficher toutes les enregistrements d'une table ext.
extraction des image d'une tableverif donnee venant d'un post avec donnee table sql
Requête SQL dans une table Hierarchique étrange (Oracle)Impossible d'insérer un nombre dans une table MySQL (Prob de noob dsl)
Afficher un champ d'un etat sous conditionEliminer les doublons d'une table Access
Plus de sujets relatifs à : Eliminer doublons d'une table avec condition sur un champ


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR