Il peut souvent nous arriver de supprimer les doublons d'une table qui n'a pas de clé. Ce qui fait que lorsque l'on supprimer les lignes contenant une valeur dédoublée, on peut totatelement supprimer les lignes contenant cette même valeur de la table sans pour autant en garder une.
Ce programme permettra par exemple s'il ya 4 lignes sur la table qui contiennent les mêmes valeurs de supprimer les 3 lignes et d'en garder une.
Source / Exemple :
Public UnObjectConnexion As ADODB.Connection
Public ChaineDeConnexion As String
'Créer un bonton de commande ayant pour nom "CmdExecuter"
Private Sub CmdExecuter_Click()
Dim Resultat As Boolean
Dim UnRsSelection As ADODB.Recordset
Dim uneRequeteLigne As String
Dim UneRequeteSelection As String
Dim unRsligne As ADODB.Recordset
Dim Champ1, Champ2, Champ3, ChampDeRecherche As String
Set unRsligne = New ADODB.Recordset
Set UnRsSelection = New ADODB.Recordset
'Cette requête permet de sélectionner les lignes de la table pour lesquelles la valeur "UnChampDeRecherche" apparait sur 2 ligne au moins
UneRequeteSelection = "SELECT UnChampDeRecherche, COUNT(UnChampDeRecherche) FROM Un_Nom_de_table GROUP BY UnChampDeRecherche HAVING COUNT(UnChampDeRecherche) > 1"
'Paramétrer cette chaîne de connexion à votre guise pour accéder à votre base de données
'ici j'utilise une chaine de Connexion ODBC qui se connecte à une base de données SQL SERVER
ChaineDeConnexion = "Provider=MSDASQL;DSN=dsnEffacerDoublons;DATABASE=BdEffacerDoublons;UID=sa; PWD="
'fait appel à la procédure d'ouverture de connexion, située plus bas
'en paramètre un booléen pour tester si la connexion s'est bien déroulée
Call OuvertureConnexion(UnObjectConnexion, GlChaineDeConnexion, Resultat)
UnRsSelection.Open UneRequeteSelection, UnObjectConnexion, adOpenStatic, adLockReadOnly
'boucler sur les lignes ayant des doublons
While Not UnRsSelection.EOF And UnRsSelection.BOF
uneRequeteLigne = "SELECT UnChampDeRecherche,Champ1,Champ2,Champ3 FROM Un_Nom_de_table WHERE UnChampDeRecherche='" & UnRsSelection("UnChampDeRecherche") & "'"
unRsligne.Open uneRequeteLigne, UnObjectConnexion, adOpenStatic, adLockReadOnly
RaisonSocial = unRsligne("RaisonSociale")
'ranger Une valeur de ligne dans des variables
ChampDeRecherche = unRsligne("UnChampDeRecherche")
Champ1 = unRsligne("Champ1DeLaTable")
Champ2 = unRsligne("Champ2DeLaTable")
Champ3 = unRsligne("Champ3DeLaTable")
'Supprimer ttes les lignes de doublons
UnObjectConnexion.Execute "DELETE FROM Un_Nom_de_table WHERE UnChampDeRecherche='" & ChampDeRecherche & "'"
'Insérer une ligne unique
UnObjectConnexion.Execute "INSERT INTO Un_Nom_de_table VALUES ('" & ChampDeRecherche & "', '" & Champ1 & "', '" & Champ2 & "','" & Champ3 & "')"
'fermeture du recordset
unRsligne.Close
UnRsSelection.MoveNext
Wend
MsgBox "Traitement effectué avec succès"
Call FermetureConnexion(UnObjectConnexion, Resultat)
Unload Me
End Sub
Public Sub OuvertureConnexion(ByRef objconnexion As ADODB.Connection, ByVal ChaineConnexion As String, ByRef Resultat As Boolean)
On Error GoTo ErreurOuvertureConnexion
Set objconnexion = New ADODB.Connection
objconnexion.CommandTimeout = 960
objconnexion.Open ChaineConnexion
Resultat = True
ExitOuvertureConnexion:
Exit Sub
ErreurOuvertureConnexion:
Resultat = False
MsgBox Err.Number
MsgBox "Erreur d'ouverture de Connexion..." & "Chaine = " & ChaineConnexion & "..." & Err.Description & " " & Err.Number
GoTo ExitOuvertureConnexion
End Sub
Sub FermetureConnexion(ByRef objconnexion As ADODB.Connection, ByRef Bsucces As Boolean)
On Error GoTo ErreurFermetureConnexion
Bsucces = False
If Not objconnexion Is Nothing Then
Set objconnexion = Nothing
Bsucces = True
End If
ExitFermetureConnexion:
Exit Sub
ErreurFermetureConnexion:
MsgBox "Erreur fermeture de Connexion..." & Err.Description
GoTo ExitFermetureConnexion
End Sub
Conclusion :
Ciao et à bientôt pour d'autres sources
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.