Tablas vinculadas en MS Access2003

Tengo una base de datos en access con tablas vinculadas de otras 2 BBDD de access, mi pregunta es, ¿hay alguna forma de poner la ruta de las BBDD donde están en origen las tablas en una variable o un campo de una tabla? ¿O simplemente poner rutas relativas?
Me explico mejor,
-BBDD1: tabla1, tabla2
-BBDD2:tabla3, tabla4
-BBDD3: formularios
Lo que quiero es poner la ruta de BBDD1 y BBDD2 en una variable o campo de una tabla de BBDD3 o simplemente que en BBDD3 poder poner rutas relativas para vincular tabla1, tabla2, tabla3 y tabla4

1 respuesta

Respuesta
1
Yo acostumbro a tener una tabla (de un único registro) dónde guardo varios valores relativos a la aplicación. Uno de ellos es la ruta a las BackEnds (así es como se llaman las bdd de las tablas).
Esa tabla esta situada en la FrontEnd (la que tu llamas BBDD3).
También es posible utilizar rutas relativas. Si las BackEnds sabes que van a estar en el directorio Datos que cuelga del que contiene la BBDD3, puedes crear la ruta en base al directorio dónde se ejecuta la FrontEnd. Para saber ese directorio te basta con utilizar CurrentProject. Path
miRutaBBDD1 = CurrentProject.Path & "\Datos\BBDD1.mdb"
Otro tema es la validación de que la vinculación esta bien hecha y como re-vincular cuando no lo está... pero ese ya es otro tema del que hay ejemplos en la red.
http://www.aesoft-databases.com
Muchas gracias por la respuesta.
Entiendo que con poner
CurrentProject.Path = "miruta"
¿Me vale no? Luego la variable "miruta" podre modificarla con un campo o con lo que quiera
CurrentProject. Path te devuelve la ruta de la base de datos que estas ejecutando. No puedes asignarle ningún valor.
Lo que necesito es poder cambiar la ruta de las tablas vinculadas, y las tablas vinculadas están en 2 bbdd diferentes que pueden estar en la misma ruta.
La idea es poder tener un campo con la ruta de las bbdd 1 y 2 y poder cambiar esa ruta mediante un formulario.
Muchas gracias por responder
Y el problema exactamente.. ¿cuál es?
Porque ya te respondí antes a eso...
Igual yo no me he enterado bien de la respuesta,
como asigno el valor de la ruta parque la coja, ponme el código.
Me dices que currentproject.path solo devuelve la ruta, ¿pero cómo se la asigno?
Gracias
Te propuse la utilización de una tabla dónde almacenes las rutas a cada una de las bases de datos. Puedes recuperar ese valor mediante un simple DLookup.
En cuanto a lo del CurrentProject. Path... NO, repito NO puedes asignar un valor. Es como pretender que la función Now() devuelva algo distinto al momento actual. Now es ahora y no puedes hacer nada para cmabiarlo.
CurrentProject. Path devuelve la ruta dónde se está ejecutando la aplicación dñonde corre el código y no puedes cambiarla. Si tu aplicación se ejecuta en C:\MisAplicaciones, CurrentProject. Path devolverá eso. Pero si la mueves a E:\Cositas, CurrentProject. Path devolverá E:\Cositas
Espero que tengas solucionado el tema de las revinculaciones porque de otra forma (sin conocer la existencia de CurrentProject. Path ni su uso) mal vamos.
A ver, creo que no me he expresado correctamente, a ver si ahora consigo explicarme.
Lo que pretendo es precisamente hacer lo que propones, pero no se como hacerlo.
¿Ya tengo el valor (ruta) en un campo de una tabla y ahora que? ¿Cómo es la sintaxis para cambiar la ruta de las tablas vinculadas?
Saludos
Eso ya es bastante más complicado. Sobre todo de explicar aquí. Lo mejor es que hagas lo que hice yo en su momento: destripar un ejemplo.
Pasate por la web del Búho (http://accessbuho.mvps.org) y busca por revinculacion. Tiene el ejemplo que destripé en su momento y que hace justamente eso.
También puedes encontrar algún ejemplo de Emilio que, para funcionar, utiliza una técnica parecida. http://www.mvp-access.es/emilio
Hola de nuevo^^
He estado mirando las webs que me has puesto y después de "creo" entender el código lo he simplificado en lo siguiente:
Private Sub Comando51_Click()
    Dim objAcObj As AccessObject
    Dim objCurData As CurrentData
    Dim DBSS As Database
    Set objCurData = Application.CurrentData
    Dim Tabla As TableDef
    Set DBSS = CurrentDb()
    Set Tabla = DBSS.TableDefs(objAcObj.Name)
    For Each objAcObj In objCurData.AllTables
        Set Tabla = DBSS.TableDefs(objAcObj.Name)
        If Tabla.Attributes And dbSystemObject Or Tabla.Name = "Ayuda" then
          ' No vincula las tablas del sistema y las tablas locales
        Else
           Tabla.Connect = ";DATABASE=" & Me.RutaCursos
           Tabla.RefreshLink
        End If
    Next objAcObj
    Exit Sub
End Sub
Al ejecutar el comando me da error 91 en la linea
"Set Tabla = DBSS.TableDefs(objAcObj.Name)"
Y ya no se seguir, a ver si puedes depurar o oriéntame por donde esta el error
Gracias de nuevo
Esa línea la tienes duplicada (la buena es la segunda). Supongo que te da error la primera, porque se ejecuta antes de asignar el valor de objAcObj. Quítala y cuéntame que tal.
Hola de nuevo
He quitado la linea que estaba duplicada y parece que funciona, pero ahora necesito rizar un poco más el rizo (lo siento^^)
El tema es que tengo 2 BBDD de origen diferentes y las tablas del frontEnd van vinculadas a cada 1 de las BBDD.
En BBDD1 puedo poner un "prefijo" tipo, 00_tabla1 y en BBDD2 poner 01_tabla1.
Ahora, como harías para que las tablas 00_tabla1, 00_tabla2 las vincule con BBDD1 y las que son 01_tabla1, ¿01_tabla2 con BBDD2?
Por cierto, como aclaración para el código anterior, la variable de la ruta dee ser completa, del estilo: c:\mis_doc\miBBDD.mdb
Gracias y un saludo
Cuando en el código haces las comprobaciones sobre el nombre de la tabla, verifica los 2 primeros caracteres del nombre de la tabla y, en consecuencia, cambia la ruta a la base de datos.
Xavi

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas