Recherche directe dans un dataset

Résolu
TrafMaxime Messages postés 288 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 26 janvier 2012 - 26 sept. 2006 à 12:41
TrafMaxime Messages postés 288 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 26 janvier 2012 - 27 sept. 2006 à 13:51
Salut les pros de la prog,

Dans une option 'statistique' de mon programme, je parcours les ventes dans une portion de date, pour un type d'appareil et pour un client.
Le fichier en question englobe tous les clients et est assez lourds (8000 enregistrements..), et ma requête se présente ainsi :

Dim sr1 As String = "select rechnapparat.* from rechnapparat where artikelnr like '" + sn + "' and rdatum < #" + d1 + "# and rdatum >= #" + d2 + "#" + kd + ""

Je parcours donc la table en entier à chaque fois et c'est assez long.
L'idée serait de charger un dataset avec les données du client dans un premier temps, et faire des recherches dans celui-ci en fonction du type d'appareil et de la date, mais je ne connais pas de méthodes liées au dataset qui me permet une recherche rapide dans celui-ci.

Toute aide est la bienvenue, en espérant trouver une âme charitable...
Merci,

.Maytheforcebewithyou.Maxime.

4 réponses

Soph70 Messages postés 14 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 7 janvier 2011
26 sept. 2006 à 16:34
Bonjour,


Remplace l'étoile (*) de ton select par les noms de champs que tu veux afficher et ta requête sera beaucoup plus rapide.

Sophie
3
TrafMaxime Messages postés 288 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 26 janvier 2012 1
27 sept. 2006 à 13:48
Ok...

Pour ceux qui passeraient par là et qui auraient des petits problèmes de temps de calcul dans leurs requêtes : ne surchargez pas vos requêtes !!

Il est largement préférable de charger un dataset avec un maximum de données
(celles des ventes du client en question dans mon exemple), et de traiter celles-ci au cas par cas de la forme :

for i = o to tot-1
    if dataset.tables(0).rows(i)("rdatum")<d1 and ...then
       if etc
       end if
    end if
next

Plutôt que de mettre tous les filtres dans la requête principale et d'interroger toute la base de donnée à chaque fois, comme dans l'exemple plus haut.

Voilà, "aide-toi, le ciel t'aidera",
Merci moi
a+

.Maytheforcebewithyou.Maxime.
3
TrafMaxime Messages postés 288 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 26 janvier 2012 1
26 sept. 2006 à 16:45
Sérieux ?
Ok, je vais déjà faire ça, merci...  

Mais je me dis quand même qu'interroger la base2données en entier à chaque fois n'est pas la solution.
Ce qu'il faudrait se serait une requête que je pourrais exécuter directement sur le dataset chargé avec les données propre au client seul.
Je crois que demain, je vais carément remplir une table access spéciale client, tout y écrire, et y lancer les requêtes dates & numéro d'appareil ensuite... advienne que pourra, ça va se jouer au sprint entre 2 escargots..
.Maytheforcebewithyou.Maxime.
0
TrafMaxime Messages postés 288 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 26 janvier 2012 1
27 sept. 2006 à 13:51
Pour soph :
les requêtes en .* jouent un rôle infime (gain de -de 1% du temps de calcul), mais c'est une histoire de grains de sable qui font des places gigantesques..
j'accepte aussi ta réponse.

.Maytheforcebewithyou.Maxime.
0
Rejoignez-nous