Nous avons une application MS Access vraiment énorme développée initialement en interne pour nos besoins personnels qui a ensuite été transformée en logiciel commercial et vendue avec succès. Le logiciel est une sorte de "logiciel complet pour votre entreprise" et contient plusieurs modules, y compris le système de gestion de documents, la planification des ressources d'entreprise, la gestion des stocks, la gestion de la relation client, l'analyse des données, etc. Nous sommes assez satisfaits de la situation actuelle. fonctionnalité de l'application, mais afin de répondre aux demandes de nos clients, nous nous rendons compte que nous devons passer à quelque chose de nouveau.
Nous avons décidé de déplacer progressivement notre application vers .Net car nous pouvons nous en tenir à Visual Basic .Net: même s'il s'agit d'un nouveau langage pour la plupart des développeurs ici, nous avons une connaissance approfondie de VBA et plusieurs dizaines de petits projets implémentés dans VB6.
Nous avons déjà commencé à déplacer la fonctionnalité de couche de données de notre application vers MS SQL Server, afin que chaque manipulation et recherche de données soit effectuée directement sur le serveur.
Ce que nous recherchons, ce sont les meilleures pratiques pour déplacer progressivement notre interface graphique étendue (environ 500 à 600 formulaires différents, y compris des sous-formulaires, environ 200 rapports avec prise en charge multilingue, etc.). Suite à la récente demande de notre client potentiel d'implémenter le chiffrement asynchrone des données sur les documents dans DMS, nous serions également heureux de découpler complètement cette partie de MS Access et de l'implémenter dans .Net.
La question est de savoir comment intégrer de manière transparente l'application .Net au système MS Access existant, afin de pouvoir l'invoquer avec certains paramètres (droits d'utilisateur, etc.) et permettre l'échange de données entre cette application et l'application MS Access en cours d'exécution.
MODIFIER:
Nous avons essayé d'appliquer certaines pratiques du livre de Martin Fowler " Enterprise intergration patterns " pour réaliser une certaine intégration entre l'application MS Access et quelques petits utilitaires que nous avons mis en œuvre dans .Net pour divers besoins. Mais nous avons seulement réussi à utiliser le modèle de «base de données partagée» et nous n'étions pas vraiment satisfaits de notre solution.
Par exemple, nous avons implémenté un petit utilitaire fonctionnant en tant que service Windows qui télécharge automatiquement tous les messages du serveur de messagerie à l'aide d'une connexion POP3 et les stocke dans une table, tandis que toutes les pièces jointes sont stockées dans le système de fichiers.
Ce que nous avons principalement fait, c'est que nous avons utilisé ADO.NET pour accéder directement aux bases de données MS Access au format MDB et remplir la table avec des données traitées (comme les données sur les messages électroniques de l'exemple ci-dessus: nous avons des champs pour FROM, TO, CC, BCC, Sujet et corps).
Il n'y a absolument aucun problème à travailler avec le format de données MDB à partir de .Net , de plus, nous ne voulons pas rester avec MDB et migrer presque tout vers MS SQL Server 2008 - cela nous donne beaucoup plus de liberté concernant la gestion des données et l'évolutivité.
Le problème principal ici est que nous ne savons pas comment implémenter une sorte de "rappel" dans Access afin de pouvoir déclencher l'exécution de certains codes VBA lors de la mise à jour des données.
Nous avions de grands espoirs avec MS Access 2010 prenant en charge la mise à jour et l'insertion de déclencheurs pour les tables de données , mais il s'est avéré que nous ne pouvons utiliser que les macros MS Access pour ces déclencheurs et il n'y a aucun moyen d'exécuter du code VBA personnalisé dans le déclencheur.
Nous avons également essayé quelques solutions avec l' envoi de frappes directement à la fenêtre MS Access pour imiter certaines requêtes de données invoquées par l'utilisateur. Cela fonctionne, mais nous ne pensons pas que ce soit une solution viable qui puisse être utilisée en production.
Nous avons également examiné DDE pour MS Access, mais nous n'avons trouvé aucun bon exemple de solution implémentant les commandes DDE et les utilisant pour les données en mémoire et l'échange de commandes.
Ainsi, le principal problème est que MS Access et l'application .Net coexistent et interagissent.
EDIT2 :
J'ai oublié de mentionner ce que nous avons également implémenté la bibliothèque MSMQ dans VBA pour le passage des messages entre .Net et MS Access, le problème était à nouveau le manque de rappel ici: nous avons vraiment dû interroger la file d'attente pour les nouveaux messages et étant donné que VBA ne prend pas vraiment en charge multi-thread, ce n'était pas vraiment une bonne solution.