Un System anti-doublon efficace [Résolu]

Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
6 mai 2005
- - Dernière réponse : jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
- 11 nov. 2004 à 09:50
BOnjour à tous !

J'utilise un base de données Acces avec les methodes SQL. Je souhaiterais ajouter des mots à une table sous la condition que celui-ci n'existe pas deja. Pour le moment j'utilise

rs.findfirst "'mots = " & mot & "'"
If rs.nomatch then
rs.addnew
...
End if

Mais le problème c'est que je manpilue plus de 100 000 mots et plus on en a ajoute et plus l'ajout est lent (le rs.findfirst doit verifier de plus en plus de données). Donc les performances de mon appli decroit au fur et a mesur de son utilisation, ce qui n'est pas souhaitable !

Ainsi ai-je pensé fait l'ajout de tous les mots rencontrés sans ce soucier de faire de créer des doublons, mais seulement après coup classer tous les mots de la table par ordre alphabétique par exemple (ORDER BY...) pour en retirer les doublons de maniere plus ordonnée et efficace, peut etre une fonction SQL existe-t-elle déja.
Que pouriez vous me conseiller ?
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
129
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
24 août 2006
3
Merci
Le record set ne doit etre que le resultat de ta requete SQL, donc construit une requete qui filtre tout ca avant genre:

SELECT motdelatable FROM latable WHERE Le mot entre par l'utilisateur = motdelatable

si le record set = 0 alors on peut ajouter

sinon on peut pas...

J'espere que ca t'a aider,

plus d'info sur comment construire une requete SQL:
http://www.w3schools.com/sql/sql_select.asp

A +

jerem

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 141 internautes nous ont dit merci ce mois-ci

Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
6 mai 2005
3
Merci
Effectivement c'etait bien une histoire de EOF
En fait il faut faire If rs.EOF then (a la place de If rs = 0 then)

Pour ceux que ça interesse : on peut l'utiliser pour faire une boucle du style
While Not rs.EOF
...
rs.movenext
Loop
(tant que rs n'est pas à l'état "pas de reponse")

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 141 internautes nous ont dit merci ce mois-ci

Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
6 mai 2005
0
Merci
Merci pour cette réponse mais sous visual basic le record set ne retourne pas de valeur (si je fais if rs = 0 then, ça me gere une erreur de type incompatible) car je fais set rs = "....". Peut etre une histoire de EOF ?!
Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
6 mai 2005
0
Merci
Je trouve cela assez impressionant que le select soit quasi instantané meme parmi des millions d'entrés (contrairement à la methode rs.findfirst, findnext). Si tu as aussi des docs qui explique ce tel niveau de performance je suis preneur :d
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
44
0
Merci
Salut,

J ai eu un projet il y a pas longtemps en vb6 et en Base de donnees MS SQL server.

Conclusion pour la vitesse d execution: Moins ton programme doit manipuler un nombre important de champs(ou lignes) provenant de la base de donnees, mieux c est.

D ou l interet d utiliser la base donnees a fond et les requetes SQL, car il faut se dire que la base de donnees manipule les donnees bien plus rapidement que vb, vu qu elle doit faire que ca...
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------