Optimisation d'une boucle.

Optimisation d'une boucle. - VB/VBA/VBS - Programmation

Marsh Posté le 14-07-2005 à 14:41:57    

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
 

Reply

Marsh Posté le 14-07-2005 à 14:41:57   

Reply

Marsh Posté le 14-07-2005 à 15:18:09    

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
Reply

Marsh Posté le 14-07-2005 à 15:42:01    

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

Reply

Marsh Posté le 14-07-2005 à 19:41:58    

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
Reply

Marsh Posté le 15-07-2005 à 15:38:29    

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
Reply

Marsh Posté le 15-07-2005 à 17:19:20    

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)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed