Trabajar con tabla de datos externa de Access

Necesito de vuestra ayuda para acabar con un proyecto, le he dado mil vueltas y lo tengo casi, pero no consigo terminar que funcione del todo.
Lo que necesito es lo siguiente:
Tengo 2 archivos access, uno con la base de datos (llamado Base1) situado en un servidor (T:\) y otro con los formularios llamado Remoto. En este último tengo en el formulario Principal, entre otros, un cuadro de texto con la ubicación de Base1 (T:\base1.mdb) para que cuando la Base1 cambie de ubicación, yo lo cambie en este cuadro de texto y no en todo el código VBA. Por ejemplo, en el cuadro de texto ID tengo lo siguiente y funciona perfectamente:
Private Sub TXTIDNOMBRE_Exit(Cancel As Integer)
Dim RUTA As String 'es la ruta donde esta guardado el archivo Base1
RUTA = TXTRUTA.Value 'por ejemplo T:\....
Dim rs As Recordset
Dim DB As Database
Set DB = OpenDatabase(RUTA)
Set rs = DB.OpenRecordset("SELECT * FROM TABLA1 Where IdNOMBRE=" & Form!TXTIDNOMBRE.Value)
If rs.EOF Then
TXTIDNOMBRE = Empty
TXTNOMBRE = Empty
TXTNUMERO = Empty
MsgBox "No existe el registro", vbInformation, "NO EXISTE ..."
TXTIDNOMBRE.SetFocus
Else
TXTNOMBRE = rs.Fields(1) 'me muestra el nombre según el ID introducido
TXTNUMERO = rs.Fields(2)
End If
End Sub
Ahora bien, el problema lo tengo, que la parte de RUTA=TXTRUTA.Value, no se expresarlo en el origen de la fila de un cuadro de lista el cual me debe mostrar información de la Base1.
He probado con algo como:
SELECT * FROM TABLA1 IN 'RUTA'
pero no funciona, sin embargo, si funciona si le expecifico la ruta
SELECT * FROM TABLA1 IN 'T:\BASE1.MDB'
Pero esto es lo que no quiero, porque si no, cada vez que cambie la ubicación, tendré que cambiar todo el código de todos los listbox que tenga.
Alguna sugerencia de como hacer esto, aunque tenga que cambiar los formatos de los formularios o añadir alguna tabla, o rellenar los cuadros de lista por VBA en vez de por sus propiedades ... Solo quiero que esto funcione.
Tengo una pequeña base de prueba hecha, por si queréis que la envíe por email.
Respuesta
1
Yo en situaciones como la tuya lo que hago es vincular en el archivo Remoto las tablas de tu denominada Base1. Ya sabes que teniendo en tu archivo de formularios... vínculos al archivo en donde están las tablas, es indiferente en donde se encuentren, ya que para Access es como si estuvieran en local (siempre que haya acceso por red al archivo en donde están realmente las tablas)
Para solucionar los posibles cambios de ubicación de las tablas uso el siguiente código asociado al evento load de mi formulario de inicio. En el se comprueba si los vínculos a las tablas de Base1 son correctos (abriendo un recorset contra una de las tablas), y en caso de no serlo por cambio de ubicación de Base1, la llamada a VolverAVincularTablas() permite abriendo una ventana del explorador indicar donde se encuentra el archivo Base1. Tras indicarlo, se actualizan los vínculos al mismo, con lo que en las siguientes aperturas ya se accede a los vínculos con normalidad. De este modo no necesitas un cuadro de texto en donde indicar en donde se encuentra Base1, ya que si se mueve, en la siguiente apertura de tu aplicación saltará este código y te solicitará le indiques en donde se encuentra para actualizar vínculos.
===========================
Private Sub Form_Load()
' Comprobar los vínculos a las tablas
On Error GoTo  Form_Load_Error
If ComprobarVínculos() = False Then
' Intentar volver a vincular las tablas; si falla,cerrar la base de datos.
If VolverAVincularTablas() = False Then
 DoCmd.Close acForm, "Panel de control principal"
 CloseCurrentDatabase
End If
End If
====================================
El código asociado a VolverAVincularTablas() es muy largo. Lo tengo en un módulo dedicado. Si me indicas una cuenta de correo generaré un mdb que lo contenga y te lo envío.
Espero te sirva esta opción. Con ella te evitas tener que usar rutas en las SQL, ya que para tu aplicación los datos es como si se encontrasen en local en el mismo archivo de aplicación.
Cordiales saludos.
Hola, gracias por tu respuesta, la verdad es que estoy dispuesto a cualquier cambio en mi proyecto con tal de que funcione mi problema.
Me lo puedes enviar a dannnymm(arroba)ono.com
Muchas gracias por adelantado.
Ahora estoy en un equipo con 2007. Como no indicas que versión usas, por si acaso es 2003 y no te sirviese, mañana por la mañana te lo envío en esa versión para asegurarme de que puedes abrirlo. Ya sabes que puedes pasarlo a versiones más actuales. En teoría podría hacerlo ahora desde el 2007 y pasarlo a 2003, pero en varias ocasiones me he encontrado conque código que compilaba en 2007 y que no daba error aparente al convertirlo a 2003, se ejecutaba correctamente en 2007 indicando que la aplicación era 2003, pero no funcionaba en un equipo que solo tuviese instalado 2003. Cosas de Microsoft.
Te marcaré las lineas que debes de editar, por ejemplo, si en una linea de código se comprueba si existe Tabla1 en los vínculos, sustituyes ese valor por lo que corresponda.
Espero no olvidarme, pero si esto pasase (será viernes, uno está pensando en el finde...) dame un recordatorio.
Cordiales saludos.
Hola de nuevo, efectivamente, uso Office 2003
Saludos.
Ya te lo he enviado hace un rato (para que luego digan algunos amigos y familiares maliciosos que si tengo un Alzheimer prematuro...).
Pedazo de código que me has mandado ... gracias.
Pero es demasiado para mi, no sé ni por donde empezar, así que si no te importa, te reenvío mi BD de prueba a ver si lo puedes aplicarlo, y que además, aparezca en el listbox creado toda la base de datos. Porque he intentado hacerlo por SQL una vez vinculada la tabla, y nada.
Por cierto, no me encuentra el archivo .mdb, cada vez que abro me pide que le diga donde está.
A mi, me gusta más usar las sentencias SQL por que las entiendo mejor que todo el código que me has mandado. Pero si no se puede, lo intentaremos hacer así.
Gracias
Te devuelvo tu archivo de ejemplo a tu cuenta de correo. Verás que he hecho únicamente un par de cosas.
He creado un formulario de inicio distinto al que me envías, ya que no es conveniente usar como inicio un formulario que ya deba de presentar datos. Lo normal es usar uno que haga ciertas comprobaciones, como la de comprobar vínculos, y si se abre correctamente desde ahí permitir acceso al resto de la aplicación.
En ese formulario he usado la función de comprobar vínculos a 'bd1.mdb'. Basta con que abras 'bd2formulario.mdb'. Si 'bd1.mdb' está en el sitio esperado, se abre el formulario de inicio y desde ahí tu formulario de datos. Si no está en su sitio 'bd1.mdb', verás el cuadro de mensaje y una ventana te permitirá indicar donde está. Lo señalas, presionas 'Abrir' y tras establecerse automáticamente el vínculo a la nueva ubicación verás como se abre el formulario de inicio. Puedes probarlo volviendo a mover de sitio 'bd1.mdb', intentas abrir de nuevo 'bd2formulario.mdb', te avisa de que no encuentra 'bd1.mdb', le dices donde está... y así hasta el infinito.
Este código funciona igualmente si colocas 'bd1.mdb' en cualquier unidad de red a la que tengas acceso. Yo lo he usado en un mismo disco cambiándolo de directorio, pero el funcionamiento es el mismo.
Un detalle importante: la función revincula las tablas a la nueva aplicación, osea, necesita que los vínculos estén creados aunque 'apunten' a un sitio que ya no existen. No crea los vínculos por si misma (ya que no es adivina y no sabe que tablas nuevas puedes haber creado y quieres que te vincule). Por ello, siempre debes de establecer los vínculos a todas las tablas que tengas (e ir añadiendo las nuevas que crees en bd1). Luego puedes mover el archivo con las tablas a donde quieras que el comprobará si están en su sitio y si no encuentra las tablas ...
Por último solo indicarte que he tenido que poner en modo comentario una linea de tu código ya que las referencias que usas son diferentes a las mías, aunque esto obviamente no te afecta para nada en la funcionalidad de revincular tablas.
Espero te sirva con esto. Piensa que aunque no entiendas completamente el código, basta con modificar las dos lineas que te indiqué para reusarlo en cualquier aplicación que tenga tablas vinculadas.
Cordiales saludos.
Solamente dos cosas muy breves. Me olvide de decirte que ya que se comprueba la vinculación en el formulario de inicio, no debes de volver a hacer lo mismo en el que presentabas datos. Verás que de este formulario he eliminado esta comprobación.
Me reitero en lo dicho, es mucho más versátil y eficiente usar este código que tener SQL que apunten a la base de datos que contenga las tablas. Hazme caso y sigue intentando aplicarlo. Es muy fácil de usar aunque sea complejo de entender.
Cordiales saludos.
LasChanas, eres un máquina ... te felicito por tu trabajo y tu interés en mi proyecto.
Aunque he de decir que no me he parado a mirar ese pedazo de código, ya que a mi me supera.
Muchas gracias.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas