Bonjour les amis ,
j'ai un petit souci avec une requête. enfaite j'ai une table nommé BTA elle contient 400.000 lignes , sur cette table il y a une requête nommée RQ_MAJ_REF_AUTO_GLOBAL . j'ai crée un module qui ce base sur cette requête afin de me generer un resultat .
le problème c'est que ce module s 'exécute sur 4 heures ou plus . cette requête m'a été créeé par un membre du grouppe il y a 4 ans de cela et ca marchait parfaitement - durée d exaction est de 10 min . mais j 'ai oublié comme il a fait pour optimiser la durée de plus j'ai fais des modif je crois que j'ai tt bousiller klk pourrais m aider plz.
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 Function fNumeroterSerie() Dim odb As DAO.Database Dim oRst As DAO.Recordset Dim stRupture As String, stRuptClient As String Dim lgCompteur As Long Set odb = CurrentDb Set oRst = odb.OpenRecordset("RQ_MAJ_REF_AUTO_GLOBAL", dbOpenDynaset) stRuptClient = "" lgCompteur = 0 Do Until oRst.EOF If Nz(oRst!CFR, "") <> stRuptClient Then ' rupture sur le client lgCompteur = 0 stRuptClient = Nz(oRst!CFR, "") stRupture = "" End If ' Rupture sur le code si nul ou même série If Nz(oRst.Fields("CUMMULABLE_OLD"), "") <> stRupture Then stRupture = Nz(oRst.Fields("CUMMULABLE_OLD"), "") If oRst.Fields("NbOccur") > 1 Then lgCompteur = lgCompteur + 1 End If oRst.Edit ' si le nombre d'occurences est égal à 1 on vide le champ sinon on met la valeur du compteur du groupe If oRst.Fields("NbOccur") = 1 Then oRst.Fields("CUMMULABLE") = Null _ Else: oRst.Fields("CUMMULABLE") = lgCompteur oRst.Update oRst.MoveNext Loop oRst.Close Set odb = Nothing End Function
Partager