Access et access...

cs_Sator2 Messages postés 137 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 10 septembre 2006 - 1 juin 2006 à 00:34
cs_Sator2 Messages postés 137 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 10 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....

9 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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...

++
PCPT  [AFCK]
0
erefdatacomputing Messages postés 165 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 24 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 !!!
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 juin 2006 à 01:59
barbare
de toutes manières le nombre d'item max pour la ListBox est de 32767
(voir source de Jack : Limitations VB6)

il ne faut jamais passer par des objets à interface pour des traitements si volumineux !!
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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
0

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

Posez votre question
cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Derniè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

SELECT top 200000 *
FROM Matable;
0
cs_Sator2 Messages postés 137 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 10 septembre 2006
1 juin 2006 à 11:37
en fait j'ai générer les possibilités de l'euro million, (sans les étoiles)
et je recherche dans cette base les séries déjà sorties...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
1 juin 2006 à 11:47
pourquoi ne pas simplement stocker les séries déjà sorties ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
1 juin 2006 à 11:47
ou ajouter un champ, qui indique le nombre de fois que la série est sortie..... (enfin, un boolean doit même suffir :p)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
cs_Sator2 Messages postés 137 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 10 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....
0
Rejoignez-nous