Bonjour, jai une appli vb6 qui utilise une base de donnee SQL Server 2000 (par le biais de procedure stockee) en ADO. Ca fonctionne et tout mais jai un probleme de performance.

Apres lappelle dune requete SQL, je copie le contenu de mon recordset dans un autre recordset et je manipule ensuite ce dernier...apparament ca optimise la performance en raison que le travail se fait offline (disconnecter du serveur). Je note par contre que ma fonction qui fait le copiage du recordset nest pas performante du tout (en fait elle prend autant de temps que la requete SQL elle meme ) jai besoin de votre aide.

Voici mes 2 procedures:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
Public Function QueryDatabase() As ADODB.Recordset
 
 
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
 
    'ma query se fait ici
    rs.Open "spQueryQuelconque", DataB, adOpenStatic, adLockBatchOptimistic, adCmdStoredProc
 
    'procedure de copiage
    Set QueryDatabase = copyrs(rs)
 
 
 Exit Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
Public Function copyrs(rsSource As ADODB.Recordset) As ADODB.Recordset
 
 
    Dim rsNew As ADODB.Recordset
    Dim field As ADODB.field
 
    Set rsNew = Nothing
    Set rsNew = New ADODB.Recordset
 
    Set copyrs = Nothing
 
    'Copy Fields from the Source and Create same ones in new recordset
 
    For Each field In rsSource.Fields
 
        rsNew.Fields.Append field.Name, field.Type, field.DefinedSize, _
                adFldIsNullable
        rsNew(field.Name).Precision = field.Precision
 
    Next
 
 
    rsNew.LockType = adLockBatchOptimistic  'So we can edit the recordset
 
    rsNew.Open
 
    If Not (rsSource.BOF And rsSource.EOF) Then
 
 
 
        rsSource.MoveFirst   '<---- le goulot a lair detre ici....cest tres lent
 
 
        ' Copy all the values from the source recordset to this new recordset
 
 
        While Not rsSource.EOF
 
            rsNew.AddNew
 
            For Each field In rsSource.Fields
 
                rsNew(field.Name).Value = field.Value
 
            Next
 
            rsNew.Update
 
            rsSource.MoveNext
 
        Wend
 
 
        rsNew.MoveFirst
 
    End If
 
    Set copyrs = rsNew
 
End Function
Quest-ce que je peux faire pour optimiser ceci? Aussi, est-ce que mon rs.Open (premiere procedure demontree) a les bons parametres, en terme de performance (adOpenStatic, adLockBatchOptimistic, adCmdStoredProc)?


merci a lavance