VBA, Access. Optimizar rendimiento con BackEnd en red + ¿CurrentDb como variable general?
Tengo una aplicación compleja con FrontEnd en PC Local y BackEnd en Red para que sea multiusuario.
El tema es que cuando corre en Red va más lento que si tengo el BackEnd en PC Local... Y todavía más lento (lentísimo) si la conexión a la red se hace con VPN.
Por lo tanto me encuentro investigando posibles soluciones para mejorar el rendimiento. Cualquier ayuda es de agradecer.
De lo que sí me he dado cuenta es que cuando inicio los procedimientos de calculo por VBA (normalmente con DAO), siendo muchos procedimientos iterativos, y observando el "Rendimiento" del "Administrador de Tareas" veo que los accesos a Ethernet van con muchos picos. Viendo esto me he dado cuenta que cuando los ejecuto el BackEnd crea y borra constatemente el archivo "*.laccdb".
He pensado que quizá una posible mejora es declarar una variable general (dim db_ALL as DAO.Database) por cada vez que se abra un formulario (Set db_ALL = CurrentDb en Form_Open) y que se declare nothing cada vez que se cierra... De esta manera creo que podría evitar la carga continuada de la base de datos... Pero tengo varias dudas;
- ¿Esto me mejoraría realmente el rendimiento? ¿Merece la pena invertir tiempo en revisar todo el codigo VBA para convertir las llamadas de CurrentDb a la variable general db_ALL?
- Si declaro el db_ALL al inicio de cada formulario, ¿corro el riesgo de no tener actualizados los datos y las consultas de la base de datos cada vez que hago un OpenRecordset? Es decir, un usuario cambia un dato, que afecta a una consulta, y después le da a un botón que ejecuta varias operaciones de OpenRecorset.
- Al declarar el db_ALL al inicio de cada formulario, ¿podría estar bloqueando otros usuarios? ¿O bloqueando actualizaciones en ese formulario por otros usuarios? ¿O bloqueando otras tablas/consultas?
- Si mejora el rendimiento y no hay problemas de actualizaciones/bloqueos, ¿merece la pena declarar db_ALL en cada formulario o sería mejor declararlo nada más abrir la Base de Datos?