Accueil > Forum > > > > gain de rapidité en lecture base de donnée
gain de rapidité en lecture base de donnée
samedi 7 avril 2007 à 20:42:54 |
gain de rapidité en lecture base de donnée

marcod59
|
Bonjour,
J'ai un programme qui affiche dans une listview 13 colonnes remplies par une base de donnée acces. Pour faire des tris par colonne j'ai mis des textbox qui font évoluer la listview à chaque frappe (voir le code un peu plus bas). Mon problème est que tant que la base n'est pas trop remplie, cela va relativement vite. Par contre, lorsqu'elle commence à se remplir (plus de 2000 entrée) ça commence à ramer un peu. Le problème étant que cette base va recevoir énormément de données, donc mon prog va ramer un max. Si quelqu'un avait une astuce pour que ça rame moins ça m'arrangerait. Voilà le code mis dans les textbox (ici 2 exemples, il y en a 4 dans le prog) :
Private Sub TXTCode_Change()
Critère = TXTcode.Text & "*" 'ne pas oublier de mettre .Text monSQL = "SELECT releve.a, releve.b, releve.c, releve.d, releve.e, releve.f, releve.g, releve.h, releve.i, releve.j, releve.k, releve.l, releve.m FROM releve " _ & "WHERE releve.a Like '" & Critère & "'" _ & "ORDER BY releve.a;" Set maBD = OpenDatabase(strConnection) Set rst = maBD.OpenRecordset(monSQL) leNbre = rst.RecordCount If leNbre = 0 Then MsgBox "Le ou les 1er chiffres du code" & vbLf _ & "que vous avez introduit" & vbLf _ & "n'existe pas dans la base de données." & vbLf & vbLf _ & "Vous pouvez re-formuler votre demande.", vbCritical, "Erreur codes" TXTcode = "" TXTcode.SetFocus Lstview1.ListItems.Clear Exit Sub End If Lstview1.ListItems.Clear Set ObjListe = Lstview1.ListItems.Add(, , rst!a) ' 1ere colonne ObjListe.SubItems(1) = IIf(IsNull(rst!mtg.Value), "", rst!b.Value) ' 2eme colonne ObjListe.SubItems(2) = "" & (rst!c.Value) '3éme colonne ObjListe.SubItems(3) = "" & (rst!d.Value) '4éme colonne ObjListe.SubItems(4) = "" & (rst!e.Value) '5éme colonne ObjListe.SubItems(5) = "" & (rst!f.Value) '6éme colonne ObjListe.SubItems(6) = "" & (rst!g.Value) '7éme colonne ObjListe.SubItems(7) = "" & (rst!h.Value) '8éme colonne ObjListe.SubItems(8) = "" & (rst!i.Value) '9éme colonne ObjListe.SubItems(9) = "" & (rst!j.Value) '10éme colonne ObjListe.SubItems(10) = "" & (rst!k.Value) '11éme colonne ObjListe.SubItems(11) = "" & (rst!l.Value) '12éme colonne ObjListe.SubItems(12) = "" & (rst!m.Value) '13éme colonne Lstview1.FullRowSelect = True Lstview1.View = lvwReport If rst.RecordCount > 0 Then rst.MoveFirst Do While Not rst.EOF '============================== Set ObjListe = Nothing Set ObjListe = Lstview1.ListItems.Add(, , rst!a) ' 1ere colonne ObjListe.SubItems(1) = IIf(IsNull(rst!mtg.Value), "", rst!b.Value) ' 2eme colonne ObjListe.SubItems(2) = "" & (rst!c.Value) '3éme colonne ObjListe.SubItems(3) = "" & (rst!d.Value) '4éme colonne ObjListe.SubItems(4) = "" & (rst!e.Value) '5éme colonne ObjListe.SubItems(5) = "" & (rst!f.Value) '6éme colonne ObjListe.SubItems(6) = "" & (rst!g.Value) '7éme colonne ObjListe.SubItems(7) = "" & (rst!h.Value) '8éme colonne ObjListe.SubItems(8) = "" & (rst!i.Value) '9éme colonne ObjListe.SubItems(9) = "" & (rst!j.Value) '10éme colonne ObjListe.SubItems(10) = "" & (rst!k.Value) '11éme colonne ObjListe.SubItems(11) = "" & (rst!l.Value) '12éme colonne ObjListe.SubItems(12) = "" & (rst!m.Value) '13éme colonne '============================== rst.MoveNext Loop End If Set rst = Nothing Set maBD = Nothing End Sub
Private Sub Txtmtg_Change()
If Critère = "" Then msg = MsgBox("Il faut renseigner le champ OP", vbCritical) Exit Sub End If Critèrem = Txtmtg.Text & "*" 'ne pas oublier de mettre .Text monSQL = "SELECT releve.a, releve.b, releve.c, releve.d, releve.e, releve.f, releve.g, releve.h, releve.i, releve.j, releve.k, releve.l, releve.m FROM releve " _ & "WHERE releve.a Like '" & Critère & "' And releve.b Like '" & Critèrem & "'" _ & "ORDER BY releve.b;"
Set maBD = OpenDatabase(strConnection) Set rst = maBD.OpenRecordset(monSQL) leNbre = rst.RecordCount If leNbre = 0 Then MsgBox "Le ou les 1er chiffres du code" & vbLf _ & "que vous avez introduit" & vbLf _ & "n'existe pas dans la base de données." & vbLf & vbLf _ & "Vous pouvez re-formuler votre demande.", vbCritical, "Erreur codes" Txtmtg = "" Txtmtg.SetFocus Lstview1.ListItems.Clear Exit Sub End If Lstview1.ListItems.Clear Set ObjListe = Lstview1.ListItems.Add(, , rst!a) ' 1ere colonne ObjListe.SubItems(1) = IIf(IsNull(rst!mtg.Value), "", rst!b.Value) ' 2eme colonne ObjListe.SubItems(2) = "" & (rst!c.Value) '3éme colonne ObjListe.SubItems(3) = "" & (rst!d.Value) '4éme colonne ObjListe.SubItems(4) = "" & (rst!e.Value) '5éme colonne ObjListe.SubItems(5) = "" & (rst!f.Value) '6éme colonne ObjListe.SubItems(6) = "" & (rst!g.Value) '7éme colonne ObjListe.SubItems(7) = "" & (rst!h.Value) '8éme colonne ObjListe.SubItems(8) = "" & (rst!i.Value) '9éme colonne ObjListe.SubItems(9) = "" & (rst!j.Value) '10éme colonne ObjListe.SubItems(10) = "" & (rst!k.Value) '11éme colonne ObjListe.SubItems(11) = "" & (rst!l.Value) '12éme colonne ObjListe.SubItems(12) = "" & (rst!m.Value) '13éme colonne Lstview1.FullRowSelect = True Lstview1.View = lvwReport If rst.RecordCount > 0 Then rst.MoveFirst Do While Not rst.EOF '============================== Set ObjListe = Nothing Set ObjListe = Lstview1.ListItems.Add(, , rst!a) ' 1ere colonne ObjListe.SubItems(1) = IIf(IsNull(rst!mtg.Value), "", rst!b.Value) ' 2eme colonne ObjListe.SubItems(2) = "" & (rst!c.Value) '3éme colonne ObjListe.SubItems(3) = "" & (rst!d.Value) '4éme colonne ObjListe.SubItems(4) = "" & (rst!e.Value) '5éme colonne ObjListe.SubItems(5) = "" & (rst!f.Value) '6éme colonne ObjListe.SubItems(6) = "" & (rst!g.Value) '7éme colonne ObjListe.SubItems(7) = "" & (rst!h.Value) '8éme colonne ObjListe.SubItems(8) = "" & (rst!i.Value) '9éme colonne ObjListe.SubItems(9) = "" & (rst!j.Value) '10éme colonne ObjListe.SubItems(10) = "" & (rst!k.Value) '11éme colonne ObjListe.SubItems(11) = "" & (rst!l.Value) '12éme colonne ObjListe.SubItems(12) = "" & (rst!m.Value) '13éme colonne '============================== rst.MoveNext Loop End If Set rst = Nothing Set maBD = Nothing End Sub
Merci d'avance. @+++ marcod59
|
|
samedi 7 avril 2007 à 21:00:46 |
Re : gain de rapidité en lecture base de donnée

DARKSIDIOUS
|
Dès qu'on accède à des données liées, le listView devient bien trop lent ! Je te conseille d'utiliser des contrôles qui sont bien plus adaptés pour le databinding, tel que le DataGrid, ou mieux, le SCGrid (téléchargeable librement sur internet) qui t'apportera les possibilité du dataGrid niveau databinding tout en ayant à peu près les mêmes fonctionnalités que le listView, et même plus !
|
|
dimanche 8 avril 2007 à 02:40:52 |
Re : gain de rapidité en lecture base de donnée

chaibat05
|
Bonsoir,
le problème réside aussi dans le fait que tu exécutes ton code dans TXTCode_Change. Tu te rends compte que pour Critère="Test", le code s' éxécutera 4 fois ! Glisses ton code plutôt dans KeyUp. Tu test si KeyCode=VbKeyReturn (Entree) Là, ta procédure ne s' exécutera qu' une seule fois ça marche aussi bien dans TXTCode_Validate... Tu peux aussi placer un Boutton (cmdGo) et tu places ton code dans cmdGo_Click.
Autre chose : dans If leNbre = 0 Then MsgBox "Le ou les 1er chiffres du code" & vbLf _ & "que vous avez introduit" & vbLf _ & "n'existe pas dans la base de données." & vbLf & vbLf _ & "Vous pouvez re-formuler votre demande.", vbCritical, "Erreur codes" TXTcode = "" TXTcode.SetFocus
le TXTcode = "" changes le TXTCode ce qui a pour effet de réenclencher encore ine fais TXTCode_Change.
Enfin, essaies avec ListView1.Visible=False au début du remplissage et ListView1.Visible=True.. (pas sûr de l' effet, mais on ne sait jamais)
|
|
dimanche 8 avril 2007 à 11:45:17 |
Re : gain de rapidité en lecture base de donnée

marcod59
|
Salut,
Merci pour vos réponses. Je suis conscient qu'en mettant le code dans TXT_Change cela réduit la vitesse, mais l'effet de tri immédiat me plaît assez. Il est bien évident que si rien ne peut améliorer la vitesse je mis prendrais autrement. Sinon, je vais faire l'essai avec DataGrid ou SCGrid s'il est vraiment mieux.
Joyeuses Pâques @+++ marcod59
|
|
lundi 9 avril 2007 à 01:13:40 |
Re : gain de rapidité en lecture base de donnée

PCPT
|
salut, le plus long est surtout l'affichage. un simple visible false avant et true après peut suffir. et si graphiquement tu ne peux pas te le permettre, reste l'api LockWindowUpdate ++ Prenez un instant pour répondre à ce sondage svp 
|
|
lundi 9 avril 2007 à 08:56:45 |
Re : gain de rapidité en lecture base de donnée

DARKSIDIOUS
|
Comme je l'ai dit : l'utilisation du DataGrid ou du SCGrid résoudront le problème vu que ce sont des contrôles qui sont fait spécifiquement pour le databinding => le temps de chargement des données est quasi-immédiat, et ca facilite grandement la programmation ! J'utilise le SCGrid dans mes projets, et je peux te dire que j'en suis très très content : il t'apporte les avantages du DataGrid (databinding surtout => rapidité de chargement des données !), tout en lui enlevant tout ses inconvénients (personnalisation de toutes les cases, possibilité de remplir le tableau à la main comme le listview, cellules personnalisable, etc.).
|
|
lundi 9 avril 2007 à 09:43:01 |
Re : gain de rapidité en lecture base de donnée

marcod59
|
PCPT, il est vrai que lorsque l'on fait un simple .visible=false puis true,on gagne du temps. Par contre s'il y a mieux, je ne suis pas contre.
DARKSIDIOUS, j'ai essayé de trouver de la doc sur le databinding dont tu me parles à chaque fois. A chaque fois, je tombe sur de la programmation en .NET, cela fonctionne bien en VB6 ? Si tu avais un exemple en VB6 avec SCGrid à me fournir, cela me permettrait de voir comment ça fonctionne. Je n'ai pas trouvé de correspondance dans tes codes.
Merci @+++ marcod59
|
|
lundi 9 avril 2007 à 09:49:15 |
Re : gain de rapidité en lecture base de donnée

DARKSIDIOUS
|
Le databinding est un terme qui est apparut avec .net il me semble, mais ca marche aussi avec vb : il s'agit de lier un composant avec une source de données afin que celui-ci effectue son affichage à partir de la source de données. Il existe plusieurs contrôles standard de vb qui gèrent le databinding : les labels, les textboxes, les listbox, les combo, etc. En fait, tout les contrôles qui ont des propriétés DataSource et DataMember. Ex : tu crée un recordset, tu le lie à ton SCGrid (par le DataSource) et il afficher automatiquement les données de ta table (en un temps record car il ne charge que ce qu'il a besoin à partir du recordset, et non tout les enregistrements !). Ensuite, tu n'as plus qu'à définir le nom des colonnes, et tu as un contrôle remplit sans avoir fait la moindre lecture dans la base de données, ni a remplir la grille par une quelconque boucle ! Je n'ai pas vraiment d'exemple à te proposer car la principale difficulté est de formuler la requête SQL pour obtenir le recordset, après c'est le SCGrid qui s'occupe de tout.
|
|
lundi 9 avril 2007 à 10:12:12 |
Re : gain de rapidité en lecture base de donnée

marcod59
|
Merci pour l'info, je vais aller essayer cela. Peut-être pas aujourd'hui, mais je vais essayer et je te tiendrais au courant des résultats.
@+++ marcod59
|
|
lundi 9 avril 2007 à 10:38:02 |
Re : gain de rapidité en lecture base de donnée

DARKSIDIOUS
|
Réponse acceptée !
Tu verra, une fois essayé, tu ne pourra plus t'en passer :p Perso, je faisais comme toi avant de connaître le DataGrid puis le SCGrid, et je me demandais comment faisant les développeurs pour avoir des contrôles qui se chargeaient aussi vite ! Puis j'ai découvert le DataGrid : très rapide en chargement, mais extrêment limité !!! Et à force de chercher sur le net un ocx equivalent au DataGrid, freeware, et avec plus de fonctionnalités, je suis tombé sur le SCGrid qui me permet de faire des choses incroyable ! J'arrive à faire des tableaux de plusieurs dizaines de milliers de lignes avec une rapidité incroyable, et une personnalisation de chaque cellule qui est la bienvenue !
|
|
Cette discussion est classée dans : colonne, value, subitems, rst, objliste
Répondre à ce message
Sujets en rapport avec ce message
ListView et Images en début de String [ par kinola ]
Voilà j'ai une listView en lvwReport et j'ai besoin d'une colonne avec juste une petite icone.J'ai tout essayé sans succès.Si l'un d'entre vous à une
Pb avec CreateObject & GetFile [ par maesius ]
Bonjour, voila g un bugs que je n'arrive pas a eliminer.Le principe est le suivant : Le client clique sur un boutoncommande ouvre un form dans lequel
Pb avec CreateObject & GetFile [ par maesius ]
Bonjour, voila g un bugs que je n'arrive pas a eliminer.Le principe est le suivant : Le client clique sur un boutoncommande ouvre un form dans lequel
Pb valeur recordset = null et [ par NanouZozo ]
Bonjour,la méthode On Error Resume next ne marche pas dans un formulaire Access en modification, alors qu'elle fonctionne dans un formulaire en ajout.
ListView explication.... [ par JeffC1977 ]
Bonjour... J'ai besoin d'explication a propos du ListView... J'utilise ACCESS, ADO et VB6 Voici mon code... While Not BD2005.EOF
VB6 Voir le données du Listview au démarage [ par JeffC1977 ]
Salut...Petite question que j ene réussi pas à saisir pourquoi ca ne fonctionne pas...Je veux que lorsque je démarre mon programme je vois dans mon li
correction de la conversion numerique automatique dexcel [ par la_bavaroise ]
Bonjour a tous, Voici mon probleme: dans une base de donnees sur excel, des noms en colonne C correspondent a des dates en colonne B et a des chiffres
VB6 ADO requete avec un Format Oui/Non avec Access [ par JeffC1977 ]
Salut...J'ai une petite question pour finaliser ma requete SQL. J'ai VB6 et j'utilise ADO. Je me connecte à un BD Access. Je veux faire afficher certa
fichier déjà ouvert [ par sebaudrain ]
Bonjour,je rencontre un problème, je veux extraire des données dans un fichier CSV et quand je clique sur mon bouton, j'ai la fenetre du showsave qui
[AIDE] Problème Macro Commande De Date [ par ribery91720 ]
Bonjour à tousJ'ai fabriqué une macro commande de date sous excel mais j'ai un petit problèmeVoici ma macro :Sub ChangeDate()ligne = 2colonne = 2<br /
Livres en rapport
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|