web analytics

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.




Comparte con


8 comentarios en “Vinculación dinámica de tablas con VBA: Separando Front-End de Back-End”

  1. 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.

    • Hola Jesus,

      Gracias por tu apoyo, es un placer ayudar.

      Que problema tienes exactamente? Lo de verificar las tablas al iniciar es simplemente usando el evento onLoad en el formulario por defecto que usas al abrir la base de datos, lo demas es simplemente aplicar lo que explico en esta entrada i en su ejemplo.

      Saludos!

    • Hola,

      Desde una Sub deberías llamar la ejecución de lo comentado en esta entrada.
      Usando el evento onLoad de un formulario. Yo es como lo hago en mis bases de datos.

      La parte más complicada de hacer lo que pides es la que explico en la entrada,si sabes programar con VBA es prácticamente trivial hacerlo.

      Saludos!

  2. 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

  3. 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.

Si tienes alguna duda, crítica o sugerencia lo leeré encantado

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.