OVH Cloud OVH Cloud

Vitesse d'exécution de requete depuis VBA

1 réponse
Avatar
Xavier HUE
Bonjour =E0 tous,

Je ne comprends pas pourquoi un DoCmd.RunSQL s'ex=E9cute=20
imm=E9diatement, alors que l'utilisation d'une requ=EAte=20
enregistr=E9e (avec param=E8tres) et beaucoup plus lente.
Dans les deux cas, la commande SQL est la m=EAme (Mise =E0=20
jour d'un enregistrement).

Je m'explique:

La s=E9quence suivante est imm=E9diate.
Dim strPropEnCours As String
Dim booTopRch As Integer
=20
DoCmd.Hourglass True
strPropEnCours =3D Me.LstExclure.Value
booTopRch =3D Not (Me.LstExclure.Column(1))

DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE Tbl_Propri=E9t=E9sExclues SET=20
Tbl_Propri=E9t=E9sExclues.Exc_TopRch =3D " & booTopRch & _
" WHERE Tbl_Propri=E9t=E9sExclues.Exc_NumUser=3D'"=20
& Me.TbxNomUser.Value & "'" & _
" AND Tbl_Propri=E9t=E9sExclues.Exc_NomProp=3D'" &=20
strPropEnCours & "'"
DoCmd.SetWarnings True

Alors que ce qui suit se bloque 2 =E0 3 secondes sur la=20
commande Set Qry =3D ... (Qry.Execute est imm=E9diat)

Dim strPropEnCours As String
Dim booTopRch As Integer
=20
DoCmd.Hourglass True
strPropEnCours =3D Me.LstExclure.Value
booTopRch =3D Not (Me.LstExclure.Column(1))
=20
Set db =3D CurrentDb
Set Qry =3D CurrentDb.QueryDefs("ReqProprietesExclues_MaJ")
Qry.Parameters("PrmNomUser") =3D Me.TbxNomUser.Value
Qry.Parameters("PrmNomProp") =3D strPropEnCours
Qry.Parameters("PrmTopRch") =3D Not (Me.LstExclure.Column
(1))
Qry.Execute

Qry.Close
Set Qry =3D Nothing
db.Close
Set db =3D Nothing

Une id=E9e?

Merci d'avance.
Cordialement.

1 réponse

Avatar
Raymond
Bonjour.

une première idée.
une requête enregistrée doit être compilée avant de s'exécuter et en plus il
y a création d'objets. ça suffit sur une petite requête pour justifier le
temps. fais un essai en recompilant ton projet. une requête est compilée
lors de sa première exécution ce qui veut dire que lorsqu'on modifie une
requête il faut la lancer obligatoirement et si possible recompiler le
projet.
c'était la 1ere.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Xavier HUE" a écrit dans le message de
news:001401c39ef8$5c0538f0$
Bonjour à tous,

Je ne comprends pas pourquoi un DoCmd.RunSQL s'exécute
immédiatement, alors que l'utilisation d'une requête
enregistrée (avec paramètres) et beaucoup plus lente.
Dans les deux cas, la commande SQL est la même (Mise à
jour d'un enregistrement).

Je m'explique:

La séquence suivante est immédiate.
Dim strPropEnCours As String
Dim booTopRch As Integer

DoCmd.Hourglass True
strPropEnCours = Me.LstExclure.Value
booTopRch = Not (Me.LstExclure.Column(1))

DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE Tbl_PropriétésExclues SET
Tbl_PropriétésExclues.Exc_TopRch = " & booTopRch & _
" WHERE Tbl_PropriétésExclues.Exc_NumUser='"
& Me.TbxNomUser.Value & "'" & _
" AND Tbl_PropriétésExclues.Exc_NomProp='" &
strPropEnCours & "'"
DoCmd.SetWarnings True

Alors que ce qui suit se bloque 2 à 3 secondes sur la
commande Set Qry = ... (Qry.Execute est immédiat)

Dim strPropEnCours As String
Dim booTopRch As Integer

DoCmd.Hourglass True
strPropEnCours = Me.LstExclure.Value
booTopRch = Not (Me.LstExclure.Column(1))

Set db = CurrentDb
Set Qry = CurrentDb.QueryDefs("ReqProprietesExclues_MaJ")
Qry.Parameters("PrmNomUser") = Me.TbxNomUser.Value
Qry.Parameters("PrmNomProp") = strPropEnCours
Qry.Parameters("PrmTopRch") = Not (Me.LstExclure.Column
(1))
Qry.Execute

Qry.Close
Set Qry = Nothing
db.Close
Set db = Nothing

Une idée?

Merci d'avance.
Cordialement.