Probleme sql supression d'une ligne ayant la meme valeur dans une autre

Ronnie95 Messages postés 32 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 9 novembre 2006 - 5 avril 2005 à 15:06
Ronnie95 Messages postés 32 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 9 novembre 2006 - 6 avril 2005 à 14:53
slt tous le monde j'aimerais savoir comment faire en sql (access) pour supprimer une ligne d'une table qui contien dans plusieur colonne la meme valeur et qu'il ne m'en reste qu'une au final.

ex : ici la 4eme ligne et la 5eme ont un numero_ta identique donc il fodrait en supprimer une sachant ke certaine fois je peut avoir 5,6 fois la meme ligne.



<CAPTION></CAPTION>

----

MONTANT |
NUMERO_TA |
CODE_NATINF |
ID_RUES |

----

35,
0087100539,
7578,
135,
----

35,
0087100540,
7578,
135,
----

35,
0087100536,
7578,
135,
----

36,
0087100538,
7586,
947,
----

35,
0087100538,
7588,
98,
----

11,
0087100535,
2268,
126,
<TFOOT></TFOOT>

7 réponses

Starec Messages postés 152 Date d'inscription mercredi 30 mars 2005 Statut Membre Dernière intervention 5 mars 2007
5 avril 2005 à 15:22
Essaye

dim strSql as string
dim strNumero as string
strNumero = "0087 100538"
strSql = "DELETE Numero_Ta FROM LeNomdetaTAble WHERE Numero_Ta LIKE '" & strNumero & "';"

Docmd.runsql (Sql)

J'ai mis string pour la vairiable strNumero, car il y'a un espace et cela devrait être interprété comme une chaine

En espérant t'avoir été utile
Starec
0
Starec Messages postés 152 Date d'inscription mercredi 30 mars 2005 Statut Membre Dernière intervention 5 mars 2007
5 avril 2005 à 15:34
Petite rectification

Au lieu de :

strSql = "DELETE Numero_Ta FROM LeNomdetaTAble WHERE Numero_Ta LIKE '" & strNumero & "';"

écrit :

strSql = "DELETE * FROM LeNomdetaTAble WHERE Numero_Ta LIKE '" & strNumero & "';"

L'astérixe supprimera toute ta ligne, sinon cela supprimait uniquement la valeur dans le champ Numero_Ta

Starec
0
Ronnie95 Messages postés 32 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 9 novembre 2006
5 avril 2005 à 15:46
oui merci pour ta reponse sauf que la ce qui va etre supprimé c'est seulement les ligne ou le numéro_ta aura ete defini et je ne ve pa le definir j'en ai beaucoup trop.
0
Starec Messages postés 152 Date d'inscription mercredi 30 mars 2005 Statut Membre Dernière intervention 5 mars 2007
5 avril 2005 à 15:53
Si cela peut attendre demain, je te donnerais la soluce, mais là je n'ai pas trop le temps, j'ai compris ton soucis.

Starec
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ronnie95 Messages postés 32 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 9 novembre 2006
5 avril 2005 à 15:55
ok merci
0
Starec Messages postés 152 Date d'inscription mercredi 30 mars 2005 Statut Membre Dernière intervention 5 mars 2007
6 avril 2005 à 08:32
De nouveau Starec,


<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />


J’ai donc réfléchi à ton problème pas simple, recopie ceci dans un module de ta base Access. Attention


Je l’ai fait sous Access 2002, je ne sais pas quelle version tu as si c’est 2000 cela devrait aller, si c’est une


Version antérieure la bibliothèque doit être DAO 3.5





Essaye de comprendre le code, c’est plus enrichissant que de le recopier bêtement surtout s’il ne fonctionne pas du premier coup.


Un conseil fait une copie de ta table avant, on ne sait jamais.


Lance la routine en plaçant le curseur dedans et appui sur F5


Il ne devrait te rester qu’une ligne avec le même NUMERO_TA attention, cette routine


Ne prend pas en compte les autres critères, ce serait plus compliqué.


Cela nettoiera ta table, pour éviter de recommencer index ta table sur ce champ pour éviter


Les doublons.



pour NomTable met le nom de table d'origne


Tu risque d’avoir un message d’erreur à la fin, mais n’en tient pas compte





Public Sub EliminationLignes()





' Crer une table temporaire tbl_Temporaire avec deux champs, un champs


' NUMERO_TA au format texte et un Champ lngCompte au format numérique entier long


' La première étape est de mettre dans cette table toutes les lignes


' dont le NUMERO_TA apparait plusieurs fois et dans le champ lngCompte le nombre


' de fois où elles apparaissent


' VIDER LA TABLE TAMPON


DoCmd.RunSQL ("DELETE * FROM tbl_Tampon;")


' RECUPERATION DES LIGNES EN TROP


Dim strSqlCompte As String


strSqlCompte = "INSERT INTO tbl_Tampon ( NUMERO_TA, lngCompte ) " & _


"SELECT NomTable.NUMERO_TA, Count(NomTable.NUMERO_TA) AS CompteDeNUMERO_TA1 " & _


"FROM NomTable " & _


"GROUP BY NomTable.NUMERO_TA " & _


"HAVING (((Count(NomTable.NUMERO_TA))>1));"





DoCmd.RunSQL (strSqlCompte)


' Cette instruction Sql permet de récupérer les lignes dont le NUMERO_TA revient plus d'une fois


' j'ai créer cette instruction en créeant une requête en mode création sous Access et en passant


' en mode sql pour la récupérer





' Maintenant il faut prendre comme référence cette table et s'en servir


' pour l'élimination.


' Je passes par DAO cocher dans outils références la bibliothéques


' Microsoft DAO 3.6 Object Library


Dim db As DAO.Database


Dim rst As DAO.Recordset


Dim rstSup As DAO.Recordset


Dim strSql As String


Dim strSqlSup As String





Set db = CurrentDb ' prend la base en cours





strSql = "SELECT tbl_Tampon.NUMERO_TA, tbl_Tampon.lngCompte " & _


"FROM tbl_Tampon; "


' l'instruction Sql récupére tous les champs de la table tbl_Tampon


Set rst = db.OpenRecordset(strSql, dbOpenDynaset)





While Not rst.EOF


' Je lance une boucle


strSqlSup = "SELECT * FROM NomTable WHERE NUMERO_TA LIKE '" & rst("NUMERO_TA") & "';"


Set rstSup = db.OpenRecordset(strSqlSup, dbOpenDynaset)


Dim i As Integer


For i = 1 To (rst("lngCompte") - 1) ' -1 pour laisser une ligne


rstSup.Delete ' efface la ligne


rstSup.MoveNext ' passe à la suivante


Next i


rst.MoveNext


Wend





rst.Close


rstSup.Close


Set rst = Nothing


Set rstSup = Nothing


End Sub





En espérant avoir solutionner ton problème





Starec
0
Ronnie95 Messages postés 32 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 9 novembre 2006
6 avril 2005 à 14:53
jte remercie pour ta reponse Starec sa ma bien servie.
0
Rejoignez-nous