Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1702 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Optimisation d'une boucle.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation d'une boucle.

n°1150029
NullDragon
Posté le 14-07-2005 à 14:41:57  profilanswer
 

Bonjour :)
 
Est-ce qu'il y aurait moyen d'optimiser ceci ?
 
J'utilise un integer x pour redimensionner mon tableau à mesure qu'il trouve quelque chose dans le Recordset mais il me semble que je pourrais faire ça mieux ??
 
Car si j'utilise L/UBound il me renvoit une erreur car au départ mon tableau est vide.
 
Dim x as Integer
 
    x = -1
     
    While Not RS.EOF
     
        x = x + 1
         
        ReDim Preserve Clients(x) As utClientDef
         
        Clients(x).lClientID = RS!Client_ID
        Clients(x).sDepositAccount = RS!Client_Deposit
        Clients(x).sExtension = RS!Client_Extension
        Clients(x).sFullName = RS!Client_FName
        Clients(x).sShortName = RS!Client_SName
        Clients(x).iImageRetention = RS!Client_ImageRetention
 
        RS.Movenext
 
    Wend
 

mood
Publicité
Posté le 14-07-2005 à 14:41:57  profilanswer
 

n°1150050
knakes
Posté le 14-07-2005 à 15:18:09  profilanswer
 

Et comme ça ?
 
'---
 
Clients(1) As utClientDef
 
Dim x as Integer
 
    x = 0
     
    While Not RS.EOF
                 
        ReDim Preserve Clients(x) As utClientDef
         
        Clients(x).lClientID = RS!Client_ID
        Clients(x).sDepositAccount = RS!Client_Deposit
        Clients(x).sExtension = RS!Client_Extension
        Clients(x).sFullName = RS!Client_FName
        Clients(x).sShortName = RS!Client_SName
        Clients(x).iImageRetention = RS!Client_ImageRetention
 
        x = x + 1
 
        RS.Movenext
 
    Wend
 
'---


---------------
now : do nothing
n°1150072
NullDragon
Posté le 14-07-2005 à 15:42:01  profilanswer
 

Ça revient pas au même ? [:autobot]

n°1150252
knakes
Posté le 14-07-2005 à 19:41:58  profilanswer
 

Vu comme ça oui.  :pfff: Très pessimiste
 
Très cher vu que tu as dû tester ....
 
En fait il te faut un module et un Sub
 
En amont de ton Sub (c'est à dire tout en haut de la feuille), tu définis ton Type  
 
'---
Public utClientDef  
        lClientID As ...
        sDepositAccount As ...
        sExtension As ...
        sFullName As ...
        sShortName As ...
        iImageRetention As ...  
End Type
 
' Puis tu définis ici ton Clients  :ange:  
 
Dim Clients() As utClientDef
 
'---
 
Voilà pour avant le Sub
après, dans le sub, il y a le reste
 
'---
 
Dim x as Integer
 
    x = 0
     
    While Not RS.EOF
                 
        ReDim Preserve Clients(x) As utClientDef
         
        Clients(x).lClientID = RS!Client_ID
        Clients(x).sDepositAccount = RS!Client_Deposit
        Clients(x).sExtension = RS!Client_Extension
        Clients(x).sFullName = RS!Client_FName
        Clients(x).sShortName = RS!Client_SName
        Clients(x).iImageRetention = RS!Client_ImageRetention
 
        x = x + 1
 
        RS.Movenext
 
    Wend  
 
'---
 
Et normalement tout va pour le mieux ...


Message édité par knakes le 14-07-2005 à 20:29:25

---------------
now : do nothing
n°1150721
mareek
Et de 3 \o/
Posté le 15-07-2005 à 15:38:29  profilanswer
 

NullDragon a écrit :

Bonjour :)
 
Est-ce qu'il y aurait moyen d'optimiser ceci ?
 
J'utilise un integer x pour redimensionner mon tableau à mesure qu'il trouve quelque chose dans le Recordset mais il me semble que je pourrais faire ça mieux ??
 
Car si j'utilise L/UBound il me renvoit une erreur car au départ mon tableau est vide.
 
Dim x as Integer
 
    x = -1
     
    While Not RS.EOF
     
        x = x + 1
         
        ReDim Preserve Clients(x) As utClientDef
         
        Clients(x).lClientID = RS!Client_ID
        Clients(x).sDepositAccount = RS!Client_Deposit
        Clients(x).sExtension = RS!Client_Extension
        Clients(x).sFullName = RS!Client_FName
        Clients(x).sShortName = RS!Client_SName
        Clients(x).iImageRetention = RS!Client_ImageRetention
 
        RS.Movenext
 
    Wend


le redimentionnement d'un tableau est qqch de très peu couteux en perfs, s'il y a qqch à optimiser, c'est plutot au niveau de la requête qui te renvoit le recordset (voir les paramétrages du recordset lui même mais c'est plus pointus).


Message édité par mareek le 15-07-2005 à 15:39:11

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°1150785
drasche
Posté le 15-07-2005 à 17:19:20  profilanswer
 

Une ouverture en ForwardOnly serait l'idéal si tu ne fais rien d'autre de ton recordset :o


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Optimisation d'une boucle.

 

Sujets relatifs
Boucle sur des #defineOptimisation dans une boucle ...
Aide pour une boucle (niveau nul)probleme de boucle
VB Excel - Utiliser une variable pour conditionner une bouclepb avec une boucle...
pb boucle do whileBoucle tant que....
optimisation code CSS pour IE[ASM] Optimisation MMX/SSE d'une boucle
Plus de sujets relatifs à : Optimisation d'une boucle.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR