谁能解释为什么第一个代码示例有效但第二个代码示例无效?
此重新链接代码确实有效:
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。
最佳答案
每次调用 CurrentDb()
时,它都会返回数据库对象的一个新实例。
为了说明我的意思,我将使用字母来表示数据库实例(字母是任意的,只是为了更容易遵循逻辑)。
因此,在第一个示例中,您使用将 CurrentDb
的返回值分配给数据库对象 db
。然后,每次调用 db 时,您都会引用同一个数据库对象实例:
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”连接属性尚未更改。
关于ms-access - 为什么我不能直接使用 CurrentDB() 方法用 vba 重新链接表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675923/