我正在尝试做我已经做过一百次的事情,但是突然间它不起作用。
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
我不知道这是否与我们最近更新到Excel 2010并且数据库仍是ACCESS 2003的事实有关,但是这应该只是运行的简单代码。当我运行上面的代码时,什么都没有发生。该文件以正确的方式打开,但是连接字符串从未分配给表def对象,即。它可以正常运行,但表未链接到新数据库。我发现以下代码确实有效,并已使用它来解决此问题。我仍然很好奇为什么不能以'application.currentdb.tabledef(“ TABLE”)。connect'样式为.connect属性分配值,但是如果我将currentdb分配给新的数据库对象,则可以。
所以我不知道为什么,但是如果我使用它的话
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
感谢您的任何帮助,您可以提供。
最佳答案
我遇到了类似的问题。尝试直接通过CurrentDb
(即CurrentDb.TableDefs("foo").Connect
)执行此操作时,它没有工作,也没有引发错误。
原因是:每次引用CurrentDB
时,它都是一个新实例。
在第二种方法中,您创建了一个数据库对象,并将其设置为CurrentDb,这就是第二种方法的工作原理。
长话短说:
好:
Dim Db as Database
Set Db = CurrentDb
Db.TableDefs("foo").Connect = "New connection string"
Db.TableDefs("foo").RefreshLink
坏:
CurrentDb.TableDefs("foo").Connect = "New connection string"
CurrentDb.TableDefs("foo").RefreshLink