Agradezco tus comentarios

Me encantaría conocer tus impresiones acerca de los distintos ejemplos o artículos de este blog, si te es posible deja un comentario en mi libro de visitas. En cambio para preguntas o problemas con alguno de los ejemplos, te ruego me las formules en el foro de Access en grupos Emagister o en en el foro de Access y VBA.

viernes, 7 de noviembre de 2008

Vincular tablas


Dividir una aplicación en Access es muy importante si el uso va a ser multiusuario.

Lo que hacemos en realidad es crear dos archivos, uno en el que tenemos las tablas únicamente (es decir los datos puros) a esta le vamos a llamar back-end y otra en la que tenemos toda la lógica de la aplicación, o lo que es lo mismo la forma de interpretar los datos. Por tanto en esta otra a la que vamos a llamar front-end, tenemos las consultas, los formularios, las macros, los informes y los módulos.

El front-end es la parte del software que interactúa con el o los usuarios y el back-end es la parte que procesa la entrada desde el front-end.

El back-end debe ponerse en un servidor (o en un PC que haga esa función) y el front-end en todos los equipos desde los que queramos acceder a los datos.

Lógicamente el acceso es muchísimo más eficiente que si intentaramos abrir el archivo entero desde una ubicación de red, dado que solo van a viajar los datos puros y duros y no toda la aplicación.

Ahora a todos los front-end tenemos que vincularle las tablas que tenemos en el servidor. Tenemos que decirle donde está la ruta a nuestro back-end.

Para ello Access tiene un asistente que se llama Administrador de tablas vinculadas que facilita la tarea....pero a lo mejor queremos automatizar esta tarea, por otro lado a veces imprescindible si utilizamos Runtime.

Cuando utililizamos las extensiones para desarrollador de access 2007, creamos un fichero exe que empaqueta nuestra aplicación y nos crea un archivo con una extensión especial llamada ACCDR que permite que funcione sin tener Access instalado.

Un archivo ACCDR no puede abrirse desde la opción de menú Abrir de Access, sólo podemos hacerlo con un acceso directo o con un doble-clic sobre el icono en el explorador de Windows. Una vez abierto, no se muestra el panel de control ni ninguna de las opciones de herramientas de diseño o de configuración de Access, ni tenemos la opción de llegar a ellas. Tampoco se muestra nada de la cinta predeterminada de opciones. En definitiva, en un ACCDR el usuario no puede hacer nada que no sea usar nuestra propia aplicación y lo que en ella hayamos diseñado previamente, por tanto no puede abrir el administrador de Tablas Vinculadas y no tienes la posibilidad de Vincular las tablas con el servidor. A no ser... Que crees tu mismo un sistema para hacerlo.

Ese es el propósito de este ejemplo, en el fichero Rar que adjunto, encontrarás 2 archivos MDB, uno llamado vincular.mdb que sería nuestro front-end y otro llamado servidor.mdb que sería nuestro back-end.

Cuando intentes abrir el fichero vincular.mdb te pedirá que le digas donde está el fichero servidor.mdb, se lo indiques y se realizará la vinculación

El enlace al ejemplo aquí

32 comentarios:

  1. Me ha venido genial el ejemplo.
    Muchas gracias!
    Pep

    ResponderEliminar
  2. Hola:
    tengo una base de datos en excel,
    la vincule a acces por medio de una tabla y a esta le vincule un formulario de access, deseo colocar la base en un servidor y permitir el uso de los formularios , las consultas e informes a tres personas diferentes a travez del servidor en una carpeta compartida , que tengo que hacer paso a paso, pues no se mucho apenas estoy iniciandome en access, te agradezco mucho.

    ResponderEliminar
  3. Hola Juan gracias por el ejemplo esta genial, se lo intente adaptar a mi sistema pero cuando quiero activar la referencia Microsof DAO 3.6 Objet Library me sale un error dice. El nombre entra en conflicto con un modulo ,proyecto o biblioteca de objetos existente.

    ya he buscado en todos los modulos , etc. pero no encuentro conque pueda estar haciendo conflicto, alguna otra forma de activarlo.

    saludos.

    ResponderEliminar
  4. Hola Victor.
    Probablemente el problema se deba al nombre de algún módulo.
    Como los nombres de los módulos no tienen importancia en tu programación, prueba a cambiar el que te parezca sospechoso
    Un saludo

    ResponderEliminar
  5. Hola juan gracias por la respuesta , no funciono ya cambie los nombres de todos los modulos y ni asi agarro.
    lo seguire checando muchas gracias.

    ResponderEliminar
  6. Hola,
    NO manejo mucho el access y necesito vincular un formulario ya hecho a una tabla nueva, como puedo hacerlo?

    ResponderEliminar
  7. Juan me gusto mucho este ejemplo he aprendido varias cosas de ti.. quisiera consultarte si se puede modificar esta aplicacion para que al no encontrar la ruta de vinculacion la vincule a la carpeta donde esta la db.
    Te explico hice una aplicacion que la quiero usar en un pendrive y como es logico la letra de la unidad cambia de maquina en maquina... la idea es que siempre que no la encuentre busque en el CurrentProject.Path & "\db\" y que me tome el mismo nombre de la db que se vincula (esto es por que mi aplicacion vincula a 2 db sistemas.accdb y reuniones.accdb)

    SE PUEDE HACER ESTO??

    ResponderEliminar
  8. Buena, he tenido siempre ese problema de la vinculación y este ejemplo me ha dado la solución precisa. se agradece. Desde Chile Miguel Sandoval.

    ResponderEliminar
  9. Es lo ue estaba buscando hace mucho, se agradece el Access. desde Chile Miguel Ángel Sandoval.

    ResponderEliminar
  10. holaaaaa buen diiaaa

    me urgee saber comooo vincular un formularioo a una tablaaa, al ioo poner informacion en el formulariooo la tabla tambien se vaiaa aliiimentandoo peroo no recuerdo comooo se haciaa =S mil graciias por su ayudaaa

    Anny!

    ResponderEliminar
  11. hOLA JUAN BUENO SOY NUEVO EN ESTO Y SI PUDIERAS EXPLIACAR DE UNA FORMA MAS SENCILLA O CON IMAGENES EO DEL BACK END Y FRONT END Y EL RUTIME TE LO AGRADECERIA MUCHO...

    ResponderEliminar
  12. Hola Juan! una pregunta Juan cuando llego a la segunda pantalla de empaquetar no me deja pasar de allí y hay algunas cosas ke no logro entender. Me podrías ayudar con esto?

    http://www.flickr.com/photos/ju4n1t4/4620021946/

    ResponderEliminar
  13. hola Juan, tambien tengo una inconveniente quise adactar esta aplicacion a mi base de datos que ya previamente la dividi pero me da error cuando escoja la base de datos mia. no se si es porque la mia esta en 2007. no se. bueno si me puedes ayudar este es mi email: jeofer1@gmail.com.

    ResponderEliminar
  14. Muchas Gracias, dejame decirte que es muy importante que gente como tu comparta informacion para personas como yo u otros que estamos con mucha necesidad de aprender y mas a un cuando somos autodidactas.

    Muchas Gracias

    ResponderEliminar
  15. Juan, tengo dos bases de datos como tu dices, una con las tablas en red y otra en local en cada ordenador del usuario. Pero a veces, según lo que pida, según qué formulario abra, tarda hasta a veces un minuto en abrirse. ¿Cómo puedo mejorar el rendimiento?
    Muchas gracias

    ResponderEliminar
  16. Juan, he encontrado esto en internet, pero no entiendo eso que dice de los procedimientos almacenados. ¿Puedes ayudarme?

    "El problema de rendimiento que tienes es normal, al vincular las tablas,
    Access se trae todos los datos a local para trabajar con ellas como si fueran
    tablas propias. Por eso, a medida que aumenta el tamaño, el rendimiento cae
    en picado.

    Te recomiendo no vincular nada más que las tablas pequeñas, y el resto de
    las operaciones (incluyendo los SELECT) hacerlas a través de procedimientos
    almacenados"

    ResponderEliminar
  17. Qué tal Juan Cots, muy buenos ejemplos en tu blog. Felicidades.

    Específicamente creo que tú me vas a entender perfectamente.

    Tengo una aplicación que presciamente se ejecuta en modo runtime. El problema es que pensé que era seguro (para que el cliente final no modifique el front-end) pero si al archivo le cambias la extensión manualmente desde el explorador de .ACCDR a .ACCDE te lo permite. Ya haciendo esto, puedes modificar lo que quieras (aún bloqueando la tecla shift y estando la base en ACCDE, hay programas que desbloquean todo esto).

    Tienes idea de cómo evitar esto. De hecho en todoexpertos.com realizé una pregunta similar. Aunque sé que tú la podrías responder con más fundamentos.

    Gracias.

    ResponderEliminar
  18. Amigo gracias. necesitaba este ejemplo desde hace tiempo. te saluda isidro rodriguez desde venezuela

    ResponderEliminar
  19. Yo trabajo con una aplicacion asi pero resulta de que se pone muy lenta que hago para mejorar el rendimiento del front-end?

    ResponderEliminar
  20. o trabajo con una aplicacion asi pero resulta de que se pone muy lenta que hago para mejorar el rendimiento del front-end?

    ResponderEliminar
  21. Es justo lo que necesito, quisiera saber como vincular correctamente las tablas en un runtime con access 2010 y hacerlo sin la intervención del usuario usando una ruta relativa (por ejemplo, creando una carpeta llamada "MI APLICACIÓN", que a su vez contenga, en la raíz de dicha carpeta, tanto la aplicación front end accdr como una carpeta llamada BACK_END que contuviera el back end accdb). Supongo que hay alguna forma de asignar la ruta del archivo actual a una variable pública que después pueda pasar a una macro VBA para que use dicha ruta para vincular correctamente las tablas. De modo que la variable de ruta contuviera RUTA ACTUAL (LA DEL FRONT END)/BACK_END/mibackend.accdb.

    Por ello me sería de enorme ayuda poder ver el ejemplo, pero parece que el enlace está roto y no puedo descargarlo. ¿Podría alguien repostearlo? Gracias

    ResponderEliminar
  22. Hola Juan.
    Molesto tu atención preguntandote si es posible obtener las tablas de un ejecutable en access 2010?
    Cuál es el procedimiento?.
    Gracias de antemano

    ResponderEliminar
  23. Buenos dias, teng una pregunta:
    Yo poseo mi Base de Datos en Acces 2010 y tengo un campo que se llama facturas y deseo agregarle el campo de vincular una factura en pdf, esto ya lo realice con exito pero ahora el problema es que lo deseo que sea multiusuario pero cuando un usaurio ya no lo esta usando no me deja hacer qu el otro usuario agrege las facturas? como debo hacer para que mas de una persona pueda vincular las facturas o no se puede hacer eso.. Gracias por su colaboración

    ResponderEliminar
  24. Buen dia Juan.
    El "enlace al ejemplo aqui" del artículo "Vincular tablas" no me funciona. Podrias indicarme que hacer?

    ResponderEliminar
  25. El enlace no funciona. Podrias mirar que passa?

    ResponderEliminar
  26. Justo ahora que encuentro la respuesta a mi pregunta y no funciona el enlace.

    ResponderEliminar
    Respuestas
    1. Me pasó lo mismo, y me encontré el ejemplo poniendo en el buscador vincular.rar

      te paso el link para descargar el archivo en 4shared

      http://www.4shared.com/get/-0FtX28P/vincular.html

      Eliminar
    2. En 4shared ya no está disponible ¿alguien que lo tenga lo puede subir a otro sitio?.

      Gracias.

      Un saludo.

      Eliminar
  27. el link esta roto por favor si lo podria solucionar o enviar a mi correo el ejemplo agradezco la colaboracion
    astu11@hotmail.com

    ResponderEliminar
  28. La aplicacion parece ser muy buena, pero el link está roto asi como todos los otros link de este sitio y segun veo no hay administrador porq desde el 2012 que reportaron esto y no lo han solucionado, de igual forma gracia por las ideas...

    ResponderEliminar
  29. La aplicacion parece ser muy buena, pero el link está roto asi como todos los otros link de este sitio y segun veo no hay administrador porq desde el 2012 que reportaron esto y no lo han solucionado, de igual forma gracia por las ideas...

    ResponderEliminar
  30. Hola Juan, en mi caso uso office 2003. El back end está en una PC a la cual accedo en forma remota por una vpn. El tema es que al vincular las tablas desde los front end, las consultas se hacen eternas... tardan alrededor de 2 minutos en abrir. A que se puede deber esto?

    ResponderEliminar