web analytics
ESTOY REDISEÑANDO EL BLOG, DISCULPA LAS MOLESTIAS

Vinculación dinámica de tablas con VBA: Separando Front-End de Back-End

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

Formulario principal de vinculación de backend
Formulario principal de vinculación de backend

1. Al hacer click sobre «Vincular Back-End» se abre una ventana de selección de archivo.

Ventana de selección de archivo de Back-End
Ventana de selección de archivo de Back-End

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:

Ventana de resultado de la vinculación de otro archivo
Ventana de resultado de la vinculación de otro archivo

Vemos lo siguiente:

Detalle del primer archivo vinculado
Detalle del segundo archivo vinculado con su ruta convertida a UNC

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.

Detalle de las tablas del Front-End tras vincular el archivo
Detalle de las tablas del Front-End tras vincular el archivo, vemos las rutas de las tablas que hemos vinculado

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.

Detalle de las tablas del Back-End tras vincular el archivo
Detalle de las tablas del Back-End tras vincular el archivo

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

Detalle de una nueva vinculación de archivo
Detalle de una nueva vinculación de archivo
Detalle de las tablas del Front-End tras vincular el tercer archivo
Detalle de las tablas del Front-End tras vincular el tercer archivo
Detalle de las tablas del Back-End tras vincular el tercer archivo
Detalle de las tablas del Back-End tras vincular el tercer archivo

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.




Icono

Vinculación dinámica de tablas con VBA

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.

Condiciones de descarga

Manteniendo.com declina cualquier responsabilidad en caso de que existan interrupciones o un mal funcionamiento en el software descargado, de los servicios o contenidos ofrecidos en Internet, cualquiera que sea su causa. Asimismo, el Titular no se hace responsable por caídas de la red, pérdidas de negocio a consecuencia de dichas caídas, suspensiones temporales de fluido eléctrico o cualquier otro tipo de daño indirecto que te pueda ser causado por causas ajenas a el Titular.

El titular no ofrece ninguna garantía por el software del web. Tanto el software como cualquier documentación es entregada tal cual, sin ningún tipo de garantía ni información añadida. La responsabilidad del uso que se haga del software descargado, así como de las consecuencias de dicho uso, es exclusivamente del usuario.

Suscribir
Notificar de
8 Comentarios
Inline Feedbacks
Ver todos los comentarios
Jesús Painceiras
Jesús Painceiras
2 años atrás

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.

Carlos Alonso Rodriguez Berrio
2 años atrás

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

Bibiana Soto Gómez
Bibiana Soto Gómez
3 años atrás

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

LuisOsorio
LuisOsorio
3 años atrás

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.

8
0
Me encantaría conocer tú opinión sobre esta entrada, por favor comentax
()
x