Comment optimiser ce bout de code pour une exécution plus rapide
Résolu
Bonjour j’exécute ce bout de code qui marche bien mais trop lent est ce qu'il y'aurai un moyen de l'écrire pour un résultat plus rapide?
Private Sub RefreshQuery()
Child29!TXT_FILTRE_TRANSPO2 = ""
Child29!TXT_NB_MAILS.Value = 0
Dim SQL As String
Dim SQLWhere As String
' cette variable permet de s'assurer qu'une selection est active avant d'effectuer la requete
Dim CompteurSelections As Integer
CompteurSelections = 0
If (Me.chkClient) And (Me.cmbRechClient.ListIndex <> -1) Then
CompteurSelections = CompteurSelections + 1
End If
If (Me.chkTransporteur) And (Me.cmbTransporteur <> -1) Then
CompteurSelections = CompteurSelections + 1
End If
If (Me.chkCodEnlevement) And (Me.cmbCodEnlevement.ListIndex <> -1) Then
CompteurSelections = CompteurSelections + 1
End If
If (Me.chkCodLivraison) And (Me.cmbCodLivraison.ListIndex <> -1) Then
CompteurSelections = CompteurSelections + 1
End If
If (Me.chkPaysEnlev) And (Me.cmbPaysEnlev.ListIndex <> -1) Then
CompteurSelections = CompteurSelections + 1
End If
If (Me.chkPaysLiv) And (Me.cmbPaysLiv.ListIndex <> -1) Then
CompteurSelections = CompteurSelections + 1
End If
If (Me.chkEnlevDateDebut) And (Me.txtEnlevDateDebut.Value <> "") Then
CompteurSelections = CompteurSelections + 1
End If
If (Me.chkEnlevDateDebut) And (Me.txtEnlevDateFin.Value <> "") Then
CompteurSelections = CompteurSelections + 1
End If
If (Me.chkLivDateDebut) And (Me.txtLivDateDebut.Value <> "") Then
CompteurSelections = CompteurSelections + 1
End If
If (Me.chkLivDateDebut) And (Me.txtLivDateFin.Value <> "") Then
CompteurSelections = CompteurSelections + 1
End If
If (Me.chkUtilisateur) And (Me.cmbRechUtilisateur.ListIndex <> -1) Then
CompteurSelections = CompteurSelections + 1
End If
If CompteurSelections > 0 Then
SQL = "SELECT * FROM [Liste_par_client_R] where [Liste_par_client_R].[No Client] <> 0 "
If (Me.chkClient) And (Me.cmbRechClient.ListIndex <> -1) Then
SQL = SQL & " And [Liste_par_client_R].[No Client] = " & Me.cmbRechClient & ""
End If
If (Me.chkTransporteur) And (Me.cmbTransporteur <> -1) Then
SQL = SQL & " And [Liste_par_client_R].[No Transporteur] = " & Me.cmbTransporteur & ""
End If
If (Me.chkCodEnlevement) And (Me.cmbCodEnlevement.ListIndex <> -1) Then
SQL = SQL & " And [Liste_par_client_R].[EnlevCode] = " & Me.cmbCodEnlevement & ""
End If
If (Me.chkCodLivraison) And (Me.cmbCodLivraison.ListIndex <> -1) Then
SQL = SQL & " And [Liste_par_client_R].[LivCode] = " & Me.cmbCodLivraison & ""
End If
If (Me.chkPaysEnlev) And (Me.cmbPaysEnlev.ListIndex <> -1) Then
SQL = SQL & " And [Liste_par_client_R].[EnlevPays] = " & "'" & Me.cmbPaysEnlev & "'" & ""
End If
If (Me.chkPaysLiv) And (Me.cmbPaysLiv.ListIndex <> -1) Then
SQL = SQL & " And [Liste_par_client_R].[LivPays] = " & "'" & Me.cmbPaysLiv & "'" & ""
End If
If (Me.chkEnlevDateDebut) And (Me.txtEnlevDateDebut.Value <> "") Then
SQL = SQL & " And [Liste_par_client_R].[EnlevDate] >= DateValue('" & Me.txtEnlevDateDebut & "')" & ""
End If
If (Me.chkEnlevDateDebut) And (Me.txtEnlevDateFin.Value <> "") Then
SQL = SQL & " And [Liste_par_client_R].[EnlevDate] <= DateValue('" & Me.txtEnlevDateFin & "')" & ""
End If
If (Me.chkLivDateDebut) And (Me.txtLivDateDebut.Value <> "") Then
SQL = SQL & " And [Liste_par_client_R].[LivDate] >= DateValue('" & Me.txtLivDateDebut & "')" & ""
End If
If (Me.chkLivDateDebut) And (Me.txtLivDateFin.Value <> "") Then
SQL = SQL & " And [Liste_par_client_R].[LivDate] <= DateValue('" & Me.txtLivDateFin & "')" & ""
End If
If (Me.chkUtilisateur) And (Me.cmbRechUtilisateur.ListIndex <> -1) Then
SQL = SQL & " And [Liste_par_client_R].[Utilisateur] = '" & Me.cmbRechUtilisateur & "'"
End If
SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
SQL = SQL & " order by [EnlevDate] desc;"
End If
Me.lblStats.Caption = DCount("*", "Liste_par_client_R")
'Me.lblStats.Caption = DCount("*", "Liste_par_client_R", SQLWhere) & " / " & DCount("*", "Liste_par_client_R")
' MsgBox "requete: " & SQL
Me!Child29.Form.RecordSource = SQL
End Sub
2 réponses
-
Contributeurbonjour, c'est peut-être la requête qui prend trop de temps.
le temps dépend-il des sélections faites?
peux-tu récupérer la requête SQL et l'exécuter à la main?
je ne comprends pas pourquoi tu fais tous ces tests deux fois, mais cela ne devrait pas influencer le temps d'exécution. -
Salut j'ai exécuté la requête à la main et tu as parfaitement vu juste elle prend beaucoup de temps pour s’exécuter.
Requete
SELECT * FROM [Liste_par_client_R] where [Liste_par_client_R].[No Client] <> 0
est ce qu'il y'aurais pas un moyen de faire mieux?