ms-access - 为什么我不能直接使用 CurrentDB() 方法用 vba 重新链接表?

标签 ms-access 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。

最佳答案

每次调用 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/

相关文章:

vba - Access VBA 将链接表转换为本地表

ms-access - 如何向子表单添加新记录

sql - 在 MS Access 中将 2 个相似字段合并为 1 个

arrays - 简单的 VBA 数组连接不起作用

vba - 在 Excel 中合并列

arrays - 一次将数组添加到 ArrayList

ms-access - 在 Microsoft Access 中将多个人关联到一个地址的最佳方式是什么?

sql-server - ODBC 调用失败 - 错误 3151

excel - VBA - 从另一个工作簿中关闭或单击 MsgBox 中的确定,

excel - 如何使用 VBA 从网站提取数据并填充 Excel 工作表?