![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre Confirmé
![]() Date d'inscription: octobre 2007
Localisation: paris
Âge: 29
Messages: 204
|
Bonjour,
j'édite des états en vérifiant d'abord si leur requete liée contient des données. Apres l"édition je fais un update sur les enregistrements concernés. Pour faire ca dans mon code, j'appelle la requete , je vérifies la présence d'enregistrement, j'édite l'état et je passe la requete update comme suit : Code :
Set rec = db.OpenRecordset("SELECT contrat.cdcontrat " & _ " FROM contrat INNER JOIN annexe ON contrat.cdcontrat = annexe.cdcontrat " & _ " WHERE (((contrat.dateenvoicontrat) Is Null) AND ((annexe.dateenvoiannexe) Is Null) " & _ " AND ((contrat.typecontrat)='C-OP') AND ((annexe.versionannexe)=6)) " & _ " GROUP BY contrat.cdcontrat;", dbOpenSnapshot) If Not rec.EOF And Not rec.BOF Then DoCmd.OpenReport "contrat+annexe OP v6", , , "dateenvoicontrat is null and dateenvoiannexe is null" DoCmd.RunSQL ("UPDATE contrat INNER JOIN annexe ON contrat.cdcontrat = annexe.cdcontrat " & _ " SET dateenvoicontrat = date() , dateenvoiannexe = date()" & _ " WHERE (((contrat.dateenvoicontrat) Is Null) AND ((annexe.dateenvoiannexe) Is Null) " & _ " AND ((contrat.typecontrat)='C-OP') AND ((annexe.versionannexe)=6));") End If Set rec = Nothing N'y aurait il pas une meilleure solution en détachant l'update dans une fonction qui mettrait a jour les champs des enregistrements déja dans le recorset ? comme j'appelle une vingtaine d'états, ca fait 20 requetes update en moins a écrire en entier. Qu'en pensez vous ? nb : mon code marche mais je suis dans un souci d'optimisation... guillaume |
|
|
|
|
|
#2 (permalink) |
![]() Date d'inscription: novembre 2006
Localisation: Paris
Âge: 39
Messages: 1 705
|
Bonjour,
As-tu repéré l'évènement "Sur Aucune Donnée" qui te permettra d'éliminer ton recordset initial.
__________________
............................................................................................ Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés. Les FAQs les tutos Les Sources Access Profitez de ces mines d'or... Postez dans le bon sous forum et mentionnez la version |
|
|
|
|
|
#4 (permalink) | |
![]() Date d'inscription: novembre 2006
Localisation: Paris
Âge: 39
Messages: 1 705
|
Citation:
Ok, tu as peut-être raison... jamais testé ![]() Dans ce cas, il serait peut être bon de fermer ton recordset avant l'ouverture de l'état..., voire de le remplacer par un DCount. L'update, dans la grande majorité des cas, restera plus efficace qu'un mise à jour ligne par ligne dans un recordset. Donc je ne pense pas que tu puisses améliorer les perfs en t'appuyant sur le recordset initial. EN passant, il me semble préférable d'utiliser la méthode .execute des objets database (par currentdb.Execute par exemple) plutôt que le RunSQL. Enfin, tu devrais gagner légèrement en perfs en enregistrant tes requêtes.
__________________
............................................................................................ Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés. Les FAQs les tutos Les Sources Access Profitez de ces mines d'or... Postez dans le bon sous forum et mentionnez la version |
|
|
|
|
![]() |
![]() |
||
[A-03] optimisation de requête par une bonne pratique du code ACCESS 2003
|
||
Offres d'
emploi informatique
sur Lesjeudis.com
|
| Outils de la discussion | |
|
|