Una vez tuve que hacer una aplicación Access que sería usada en diferentes sitios simultáneamente, enseguida me imaginé el lío en el que me metía para poder mantener al día de bugs y mejoras las bases de datos en las tres diferentes ubicaciones, hasta entonces siempre había realizado aplicaciones que se ejecutaban en el mismo lugar, en local o en la misma red, y de la cual sólo me tenía que preocupar de un archivo, pero lo de hacerlo para tres redes inaccesibles una a otra y cada una con sus datos ya era más complicado. Implicaba que cada cambio realizado, por tonto que fuera, requería ser actualizado en las 3 diferentes ubicaciones, trabajo por triplicado vamos, una pérdida de tiempo.
La solución pasó por separar los datos (Back-End) de la interface gráfica (Front-End), así si realizaba algún cambio en la aplicación, que sería el 99% de las veces en el Front-End, solamente debería hacerlo una vez, ya que sería ese archivo de Front-End el que distribuiría y después cada uno de los usuarios sólo debería vincularlo con sus propias tablas de datos (Back-End)
Requisitos
Hacer esto posible requería 2 cosas:
- Un back-end sólido.
- Un sistema de vinculación de tablas entre Back-End y Front-End
Por un Back-End sólido entendemos que es una base de datos que únicamente contiene las tablas con los datos de la aplicación y que, lógicamente, serán datos diferentes en cada una de las ubicaciones donde se ejecute, así que debemos tratar de contemplar todas las opciones posibles y todos los datos que podemos llegar a necesitar en conjunto en dichas ubicaciones, se trata de no dejarnos nada para que el día de mañana no haya que cambiar nada por triplicado. No obstante siempre está la opción de cambiar la estructura de tablas y datos del Back-End con algún script VBA u otro lenguaje pero es preferible, por nuestra comodidad y salud mental (siempre podría haber algún fallo catastrófico que se cargue una tabla de Back-End…) no tener que hacerlo.
En cuanto al sistema de vinculación de tablas entre Back-End y Front-End, en este post os voy a mostrar a continuación un archivo de ejemplo de vinculación de tablas.
Vincular tablas con VBA
En el archivo .accdb tenemos 2 tablas creadas (són de ejemplo no se hará nada con ellas) y un formulario que es como se ve en la imagen siguiente
1. Al hacer click sobre «Vincular Back-End» se abre una ventana de selección de archivo.
2. Al aceptar el archivo de Backend _1.accdb de ejemplo se ejecutará el código VBA que realizará la vinculación, bajo las siguientes condiciones:
- Las tablas del Back-End cuyo nombre ya está enlazado en el Front-End serán reenlazadas a la nueva ubicación elegida.
- Las tablas del Back-End cuyo nombre no esté enlazado en el Front-End serán creadas y enlazadas a la nueva ubicación elegida.
3. Hacemos lo mismo con el archivo BackEnd_2.accdb, lo seleccionamos y lo vinculamos.
4. Y nos quedará el formulario tal como sigue:
Vemos lo siguiente:
La ruta la convertimos a UNC (mira mi entrada sobre el tema) porque si no sería imposible trabajar en red con este archivo, no todos los equipo tienen los recursos de red asignados a las mismas letras de unidad (en este caso M:) así para evitar que falle pasamos la ruta a formato UNC que sigue un esquema \\Host\recurso\ que será más sencillo de vincular y mantener entre equipos.
En la captura anterior nos salen las de tablas del Front-End, tanto las vinculadas como las «propias», en las vinculadas nos indica la ruta de vinculación, es decir la propiedad .Connect. Como se puede observar no sale un campo PWD que es la contraseña del archivo de Back-End, es un archivo que sólo contiene datos así que es mejor que esté protegido de las zarpas de algún usuario desalmado.
Y en esta captura de arriba nos salen las tablas del Back-End que hemos vinculado en la última acción. También nos indica la ruta en formato UNC.
Para acabar en las tres siguientes realizamos una nueva vinculación de otro archivo Backend_3.accdb, que contiene 4 tablas, dos con el mismo nombre que las que hay en el Backend_2.accdb y otras 2 con nombre diferente, así vemos que a las que ya existían vinculadas les realiza un reenlace a este archivo y las otras dos son añadidas como tablas vinculadas nuevas del Front-End
No se si me he explicado demasiado bien, lo mejor es que te descargues el ejemplo y lo analices un poco para entender de que va, pero si tienes cualquier duda puedes hacer un comentario e intentaré ayudarte.
El archivo contiene:
- Archivo de frontEnd .accdb con el formulario y el código VBA.
- 3 Archivos de BackEnd .accdb de ejemplo para realizar la vinculación.
Como todo en este blog puedes modificarlo, copiarlo, distribuirlo como quieras pero siempre mencionando la fuente.
Buenos días, necesitaba un poco de ayuda con lo que comentó Carlos Alonso sobre que verifique si ya están vinculadas las tablas a la hora de abrir nuestra base. Todavía estoy aprendiendo a trabajar con VBA y me cuesta un poco.
Darte también las gracias y enhorabuena por esta página que me ayuda muchísimo a hacer lo que necesito.
Un saludo,
Jesús Painceiras.
Se ve muy práctico y sencillo el ejemplo sin embargo tengo una pregunta como lo podria colocar para que apenas se abra la BD verifique si estan vinculadas las tablas y en caso contrario llame este formularia ara hacer las revinculaciones. Gracias
Quiero felicitarte por la herramienta de capacitación y habilidades, me ha ayudado mucho para mi proyecto de posgrado, es una herramienta poderosa y sencilla. Felicitaciones, me encanta tu blog, denota inteligencia y versatilidad. por favor me defines la ruta para registrarme. Mil gracias
Muy buen día. Quiero comentar que su ejemplo me ha sido de mucha utilidad para mi proyecto. Agradezco de antemano tu aporte y a la vez le felicito por el excelente trabajo. He pasado días buscando en diferentes paginas web lo que tú en un solo ejemplo has resumido. Mil gracias y adelante con su blog.