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 FunctionQuest-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)?
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
merci a lavance
Partager