Verificar si una tabla existe en otra base de datos, borrarla si existe, y crearla

Utilizo Access 365, sobre Windows 10.

En una base de datos necesito verificar si existe una tabla en una base de datos (funciona correctamente si es en la base de datos abierta sobre la que trabajo), para luego borrarla y crearla de nuevo (es una tabla de fechas de control que toma los datos de varias tablas, que genero nuevamente cada vez que necesito utilizarla).

Para ello abro la base de datos como sigue:

Set dbsVer = DBEngine.Workspaces(0).OpenDatabase("\\server\d\users\basedoc\basedatos\Ver.accdb")

La pongo como base activa:

Set dbsVer = CurrentDb (no sé si sirve para algo)

Compruebo el path de la base de datos activa y es correcto.

Para comprobar si existe, hago lo siguiente:

logEx = False
CurrentDb.TableDefs.Refresh (no creo que sirva para nada)
For I = vbEmpty To (dbsVer.TableDefs.Count - 1)
MsgBox dbsVer.TableDefs(I).Name (esto solo está temporalmente para ver lo que lee)
If dbsVer.TableDefs(I).Name = NombreTabla Then
logEx = True
Exit For
End If
Next
LogEx me dice si la tabla en cuestión existe o no.

Como decía, en una base de datos front end funciona sin ningún problema.

Sin embargo, cuando busco en una base de datos remota (otra distinta de la que he entrado, back end), me recorre "siempre" la base de datos local.

¿Cómo puedo recorrer esa otra base de datos en lugar de la actual?

1 Respuesta

Respuesta
2

Cuando pones:

Set dbsVer = DBEngine.Workspaces(0).OpenDatabase("\\server\d\users\basedoc\basedatos\Ver.accdb")

Estás asignando a la variable dbsVer la base de datos Ver. Accdb

Y luego cuando haces:

Set dbsVer = CurrentDb

No la pones como base activa, sino que asignas a la misma variable dbsVer la base de datos activa, con lo que todo el código siguiente en el que hagas referencia a dbsVer, te actuará sobre la base activa, no sobre la externa.

Conclusión (sin entrar a analizar en más detalle tu código): si eliminas la linea Set dbsVer = CurrentDb, tu código debería trabajar sobre la base externa.

Un saludo.


La expresión Set dbsVer = CurrentDb la he puesto porque no funcionaba tampoco sin ella. El programa recorre la base de datos Access que he abierto, donde está el código, pero no la otra. me he puesto mensajes, de control, pero no doy con la solución.

Parece que se ha solucionado, efectivamente. No sé por qué no funcionaba antes. Gracias por tu colaboración.

Con el primer Set dbsVer = DBEngine.Workspaces(0).OpenDatabase ()

Abres la BD externa, todo lo que hagas después en el código haciendo referencia a dbsVer, trabajará sobre esa BD externa (como el dbsVer. TableDefs. Count y el dbsVer. TableDefs(I). Name)

Dices que no te funciona, pero ¿por qué? ¿Te da algún error, no te hace nada...?

Prueba, si quieres, a rutear de otra forma la BD, con el nombre de la unidad de red en vez del \\server..., es decir, ponlo como

.OpenDatabase ("Z:\\server\d\users\basedoc\basedatos\Ver.accdb")

Yo acabo de probar a listar las tablas de una BD externa con este código, y funciona perfectamente:

Public Sub Test()
Dim dbsVer As Database
Set dbsVer = DBEngine.Workspaces(0).OpenDatabase("C:\Users\Usuario\Desktop\Cosas\DAF.accdb")
For i = 0 To (dbsVer.TableDefs.Count - 1)
    Debug.Print dbsVer.TableDefs(i).Name
Next
End Sub

PD: Por cierto, estás en lo cierto que la linea CurrentDb.TableDefs.Refresh no sirve para nada

Vale, ya veo que lo has solucionado mientras te respondía. Pues nada, si ya te funciona, ¡Genial!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas