cs_Sator2
Messages postés137Date d'inscriptionsamedi 11 septembre 2004StatutMembreDernière intervention10 septembre 2006
-
1 juin 2006 à 00:34
cs_Sator2
Messages postés137Date d'inscriptionsamedi 11 septembre 2004StatutMembreDernière intervention10 septembre 2006
-
1 juin 2006 à 14:07
Après des essais infructueux, mettez-moi sur la voie s'il vous plait...
j'ai deux bases de données access....
dans l'une j'ai 200 enregistrements
dans la seconde j'ai 2 000 000 d'enregistrement
il se trouve que je cherche dans la deusième base les 200 enregistrements de la première...
donc ce que j'ai fait jusqu'a maintenant peut se résumer ainsi: je prends mes 200 enregistrements que je mets dans un tableau puis je fais une boucle répétée 200 fois dans la seconde avec une recherche conventionnel... mais l'ordi n'aime pas le traitement...
si quelqu'un à une idée... le fait est que les deux chaînes ne sont identique ( ou pas) que sur les premier 50 caractères.
donc je me répète mais si quelqu'un à une idée elle est la bien venue....
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 1 juin 2006 à 01:19
salut,
désolé mais faut pas trop rêver : une recherche sur 2 millions d'enregistrements, je me doute que ton PC n'aime pas....
comparer les tableaux, ouai.
éventuellement intercaler des doevents pendant la recherche (pas à chaque "next", disons une fois tous les 5000 enr).
ou pourquoi pas (mais je ne garanti rien au niveau de la rapidité pour autant) faire simplement 200 requêtes?
à tester...
erefdatacomputing
Messages postés165Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention24 avril 2018 1 juin 2006 à 01:37
Salut !!
Dur Dur !!!
Mais il existe une solution qui va te faire gagner un peu de temps pour la recherche mais tu vas en perdre en temps de chargement au lancement de ton programme.
Il s'agit de remplir une listbox avec les 200 enreg., une autre listbox avec les 2000000 enreg. (si VB le supporte, personnellement je n'ai pas été si loin !!!), et une dernière listbox avec les AbsolutePosition
correspondants à la BDD des 2000000, afin d'aller directement sur l'enreg. voulu, grace à l'index de l'item de la 2ème listbox quand tu feras ta boucle de recherche.( Car quand tu trouveras dans la 2ème listbox l'enreg. souhaité, pour avoir son AbsolutePosition dans la BDD, il suffira de prendre l'item ayant le même index dans la 3ème listbox.
Je l'ai fait pour de grosses BDD, çà marche, mais honnêtement .... c'est trop long à mon goût en temps de chargement !!!!
J'ai bien peur que tu n'ai pas le choix !!! Essaie le !!! Au pire tu ne perd rien !!!
Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 1 juin 2006 à 07:06
c'est barbare, il faut l'avouer....
et en plus, coté mémoire, ca n'est vraiment pas top ^^
2 Millions éléments, ca fait pas mal... quand même... essaie une requete IN :
Do Until RS200.EOF
sBuffer = sBuffer & "," & RS.Fields("ID")
RS200.MoveNext
Loop
sSQL = "SELECT * FROM [MaBigBase] WHERE [ID] IN (" & Mid$ ( sBuffer, 2) & ")"
enfin, a supposer que ta table soit compatible avec ce genre de choses...
un autre solution serait l'import temporaire ou même simplement de lier
ta 'petite table' dans la grande base, et de faire une requete SQL,
avec une jointure, traditionnelle..
Renfield
Admin CodeS-SourceS- MVP Visual Basic
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_pluplu
Messages postés615Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention 4 juillet 2012 1 juin 2006 à 10:31
Difficile de donner une solution miracle sans avoir plus de détails, une possibilité c'est d'importer ta base de 2 Millions de records dans 10 bases temporaires de 200'000 et de faire la recherche des 200 records dans chacunne d'entre elle.
Pour importer les 200'000 premiers records dans un recordset
cs_Sator2
Messages postés137Date d'inscriptionsamedi 11 septembre 2004StatutMembreDernière intervention10 septembre 2006 1 juin 2006 à 14:07
c'est par exemple pour connaître parmis les 2 000 000 de possibilités différents paramètre.... car le but final est de réduire les possibilités... sortable, les paramètres peuvent être réduis en calculant une fourchette entre la série la plus basse à être sortie: imaginons.... 1-3-21-32-39(à l'oeuil) sorti le 14.5.2004 qui représente dans ma base de 2 000 000 de possibilitées est le 29693 enregistrement.... ce qui veut dire que sur les (Exactement 2 118 823 possibilitée) je peux éliminer la partie basse donc 29692 enregistrements puis sur la partie haute je fais de même ce qui me permet de faire une fourchette,( si ça t'intéresse je te le calculerai....) ensuite ça peut me permettre de faire des recherches imaginons si 2 paires, et pas sortis... si dans la série entre le 1-3-21-32-39 et le 25-26-41-44-47 voir si il y à une zone plus fréquenté que d'autres....
etc..etc... etc....