Bonjour,
Je vous expose mon problème : j'ai une application access déployée chez plusieurs clients. Certains clients migrent actuellement d'Access 97 vers Acess2003.
Nous possédons une application vierge de données que nous apellons Export et qui contient la dernière version en cours de la structure et du code (requetes, formulaires, états et modules). Lorsque nous devons apporter une correction à un objet (requete, formulaire, état ou module), nous remplaçons dans cet Export l'ancien objet par l'objet corrigé. Ainsi, L'Export contient toujours la dernière version des objets de nos applications clients.
Nous avons ensuite dévellopé du code bien pratique qui permet de mettre à jour la structure et le code des nos applications clients : suppression dans une application client les objets qui sont présents dans l'Export (et uniquement ceux-ci) puis réinjection de ces mêmes objets de l'Export vers l'application client.
Tout ceci fonctionne très bien avec une application sous Access 97.
En 2003, les requetes sont supprimées mais ça ne supprime ni les formulaires, ni les états, ni les modules (sans aucun plantage de code : le code de suppression est lu mais rien ne se passe).
Du coup, lorsqu'on arrive à l'étape de réinjection, il plante au premier formulaire à réinjecter (erreur d'execution 2501 : l'action TransferDataBase a été annulée) certainement parce qu'on lui demande d'injecter un objet alors qu'il trouve un objet du même nom déjà présent.
Voici le code de suppression des objets :
Auparavant, j'ai défini mes TabLstQuerys, TabLstForms, TabLstModules et TabLstReports en fonction de ce que contient la base Export. J'ai pu vérifier que cette étape fonctionnait bien et que la liste des requêtes, formulaires, états et modules à supprimer et réinjecter étaient bien renseignées.
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 [...] 'Suppression des éléments de la base site DoEvents For i = 0 To UBound(TabLstQuerys) DoCmd.DeleteObject acQuery, TabLstQuerys(i) TxtInfo.Value = "Suppression requête : " & TabLstQuerys(i) DoEvents Next i DoEvents For i = 0 To UBound(TabLstForms) If TabLstForms(i) <> "M_MAJExport" Then DoCmd.DeleteObject acForm, TabLstForms(i) TxtInfo.Value = "Suppression formulaire : " & TabLstForms(i) DoEvents End If Next i DoEvents For i = 0 To UBound(TabLstModules) If TabLstModules(i) <> "Function_MAJExport" Then DoCmd.DeleteObject acModule, TabLstModules(i) TxtInfo.Value = "Suppression module : " & TabLstModules(i) DoEvents End If Next i DoEvents For i = 0 To UBound(TabLstReports) DoCmd.DeleteObject acReport, TabLstReports(i) TxtInfo.Value = "Suppression état : " & TabLstReports(i) DoEvents Next i [...]
TxtInfo est une boite de texte de mon formulaire nommé M_MAJ_Export à partir duquel ce code est exécuté. Ce formulaire n'est bien sur pas supprimé puisqu'il est actif lors de l'exécution de ce code.
Je seche complet : pourquoi la fonction de suppression DeleteObject fonctionne parfaitement sous access 97 et pas sous access 2003 ? Et pourquoi cela détruit bien mes requêtes mais pas les formulaires, les états et les modules ???
Etant nouveau ici, j'espère avoir respecté les règles du forum et surtout avoir été clair dans l'exposé de mon problème.
Et d'avance, un grand merci pour vos réponses et le temps passé !
Partager