codigos - Cambiar una propiedad tabledef.connect en VBA
codigos vba access (1)
Me encontré con un problema similar. Al intentar hacer esto directamente a través de CurrentDb
(es decir, CurrentDb.TableDefs("foo").Connect
) no funcionó y no arrojó un error.
La razón es: cada vez que te refieres a CurrentDB
, es una nueva instancia.
En su segundo método, creó un objeto de base de datos que estableció en CurrentDb y ese es su segundo método.
Larga historia corta: Bueno:
Dim Db as Database
Set Db = CurrentDb
Db.TableDefs("foo").Connect = "New connection string"
Db.TableDefs("foo").RefreshLink
Malo:
CurrentDb.TableDefs("foo").Connect = "New connection string"
CurrentDb.TableDefs("foo").RefreshLink
Estoy intentando hacer algo que he hecho cientos de veces, pero de repente no funcionará.
acc.AutomationSecurity = msoAutomationSecurityLow ''Remove Security Prompt
acc.OpenCurrentDatabase path & "Year " & Range("yr") & "/" & Range("yr") & Range("mo") & "/Year " & Range("yr") & Range("mo") & " GENERIC DB NAME.mdb", True
''update link
acc.CurrentDb.TableDefs("TABLE NAME").Connect = "MS Access;DATABASE=" & path & "Year " & Range("yr") & "/" & Range("yr") & Range("mo") & "/Year " & Range("yr") & Range("mo") & " OTHER DB.mdb"
acc.CurrentDb.TableDefs("TABLE NAME").RefreshLink
No sé si esto está relacionado con el hecho de que hemos actualizado recientemente a Excel 2010 y el archivo db sigue siendo ACCESS 2003, pero esto debería ser un simple código para ejecutar. No pasa nada cuando ejecuto el código anterior. El archivo se abre de manera correcta, pero la cadena de conexión nunca se asigna al objeto de tabla def, es decir. Se ejecuta sin errores, pero la tabla no está enlazando a la nueva base de datos. Descubrí que el siguiente código funciona y lo he usado para solucionar el problema. Todavía tengo curiosidad de por qué no puedo asignar un valor a la propiedad .connect en el estilo ''application.currentdb.tabledef ("TABLE"). Connect'', pero si asigno el currentdb a un nuevo objeto de base de datos, puedo.
Así que no sé por qué, pero si uso esto, funciona
dim db as DAO.database
set db = acc.CurrentDb
db.TableDefs("TABLE NAME").Connect = "MS Access;DATABASE=" & path & "Year " & Range("yr") & "/" & Range("yr") & Range("mo") & "/Year " & Range("yr") & Range("mo") & " OTHER DB.mdb"
db.TableDefs("TABLE NAME").RefreshLink
Gracias por cualquier ayuda que usted nos pueda proporcionar.