为什么不能直接使用CurrentDB()方法将表与vba重新链接?

| 谁能解释为什么第一个代码示例有效,而第二个代码示例无效? 此重新链接代码可以正常工作:
Dim db As Database
Dim sNewLinkAddress As String

sNewLinkAddress = \"C:\\temp\\backend.accdb\"
Set db = CurrentDb

db.TableDefs(\"table1\").Connect = \";Database=\" & sNewLinkAddress
db.TableDefs(\"table1\").RefreshLink
此重新链接代码不起作用,但未给出错误消息:
Dim sNewLinkAddress As String

sNewLinkAddress = \"C:\\temp\\backend.accdb\"

CurrentDb().TableDefs(\"table1\").Connect = \";Database=\" & sNewLinkAddress
CurrentDb().TableDefs(\"table1\").RefreshLink
我担心的是,在使用由CurrentDB()直接返回的数据库对象和使用由CurrentDB()返回的数据库对象设置的变量\'db \'之间,我不知道有根本的区别。在我看来,两种方式应该完全相同,但显然我错了! 过去,我直接将CurrentDB()用于各种事情,例如毫无问题地打开记录集。重新链接表似乎存在特定问题。对这里发生的事情有什么想法吗? 我正在使用Access 2007,但是同一问题也适用于2003。     
已邀请:
每次调用“ 2”时,它将返回数据库对象的新实例。 为了说明我的意思,我将使用字母来表示数据库实例(字母是任意的,仅用于使遵循逻辑更容易)。 因此,在第一个示例中,您正在使用将返回值
CurrentDb
分配给数据库对象
db
。然后,每次调用“ 4”时,您都在指同一个数据库对象实例:
Set db<A> = CurrentDb

db<A>.TableDefs(\"table1\").Connect = \";Database=\" & sNewLinkAddress
db<A>.TableDefs(\"table1\").RefreshLink
在第二个示例中,您对
CurrentDb
函数进行了多次调用,每个调用都返回一个不同的数据库对象实例:
CurrentDb()<B>.TableDefs(\"table1\").Connect = \";Database=\" & sNewLinkAddress
CurrentDb()<C>.TableDefs(\"table1\").RefreshLink
结果是,当您在第二行上调用
RefreshLink
时,您正在对数据库对象的全新实例进行操作。即,其\“ table1 \\”连接属性尚未更改。     

要回复问题请先登录注册