Tenemos una aplicación de MS Access realmente enorme desarrollada internamente inicialmente para nuestras necesidades personales que luego se convirtió en un software comercial y se vendió con éxito. El software es una especie de "software integral para su negocio" y contiene varios módulos que incluyen el Sistema de Gestión de Documentos, Planificación de Recursos Empresariales, Gestión de Inventario, Gestión de Relaciones con el Cliente, Análisis de Datos, etc. Estamos bastante satisfechos con el actual funcionalidad de la aplicación, pero para satisfacer las solicitudes de nuestros clientes nos damos cuenta de que tenemos que pasar a algo nuevo.
Decidimos mover gradualmente nuestra aplicación hacia .Net porque podemos apegarnos a Visual Basic .Net: aunque es un lenguaje nuevo para la mayoría de los desarrolladores aquí, tenemos un profundo conocimiento de VBA y varias docenas de pequeños proyectos implementados en VB6.
Ya comenzamos a mover la funcionalidad de la capa de datos de nuestra aplicación a MS SQL Server, de modo que cada manipulación y búsqueda de datos se realiza directamente en el servidor.
Lo que estamos buscando son las mejores prácticas para mover gradualmente nuestra amplia GUI (alrededor de 500-600 formas diferentes, incluidos subformularios, alrededor de 200 informes con soporte en varios idiomas, etc.). Siguiendo la reciente solicitud de nuestro cliente potencial para implementar el cifrado de datos asíncrono en documentos en DMS, también nos complacería desacoplar completamente esta parte de MS Access e implementarla en .Net.
La pregunta es cómo integrar sin problemas la aplicación .Net con el sistema MS Access existente, de modo que podamos invocarla con ciertos parámetros (derechos de usuario, etc.) y permitir el intercambio de datos entre esta aplicación y la aplicación MS Access en ejecución.
EDITAR:
Intentamos aplicar algunas prácticas del libro " Patrones de integración empresarial " de Martin Fowler para lograr cierta integración entre la aplicación MS Access y algunas pequeñas utilidades que implementamos en .Net para diversas necesidades. Pero solo logramos usar el patrón de "base de datos compartida" y no estábamos realmente satisfechos con nuestra solución.
Por ejemplo, implementamos una pequeña utilidad que se ejecuta como un servicio de Windows que descarga automáticamente todos los mensajes del servidor de correo utilizando la conexión POP3 y los almacena en una tabla, mientras que todos los archivos adjuntos se almacenan en el sistema de archivos.
Lo que hicimos principalmente fue utilizar ADO.NET para acceder directamente a las bases de datos de MS Access en formato MDB y llenar la tabla con algunos datos procesados (como los datos sobre mensajes de correo del ejemplo anterior: tenemos campos para FROM, TO, CC, BCC, Sujeto y cuerpo).
No hay absolutamente ningún problema para trabajar con el formato de datos MDB de .Net , además, no queremos quedarnos con MDB y actualizar casi todo a MS SQL Server 2008, esto nos da mucha más libertad con respecto a la administración y escalabilidad de los datos.
El principal problema aquí es que no sabemos cómo implementar una especie de "devolución de llamada" en Access para poder activar la ejecución de cierto código VBA en la actualización de datos.
Teníamos grandes esperanzas con MS Access 2010 que admite la activación e inserción de activadores para tablas de datos , pero resultó que solo podemos usar Macros de MS Access para estos activadores y no hay forma de ejecutar ningún código VBA personalizado dentro del activador.
También probamos algunas soluciones con el envío de pulsaciones de teclas directamente a la ventana de MS Access para imitar alguna consulta de datos invocada por el usuario. Esto funciona, pero no creemos que sea una solución real que pueda usarse en la producción.
También investigamos DDE para MS Access, pero no pudimos encontrar una buena solución de muestra que implementara comandos DDE y los utilizara para el intercambio de datos y datos en memoria.
Por lo tanto, el problema principal es que MS Access y la aplicación .Net coexistan e interactúen entre sí.
EDIT2 :
Olvidé mencionar que también implementamos la biblioteca MSMQ en VBA para el paso de mensajes entre .Net y MS Access, el problema fue nuevamente la falta de devolución de llamada aquí: realmente tuvimos que sondear la cola para buscar nuevos mensajes y dado que VBA realmente no es compatible multihilo no era realmente una buena solución.