任何人都可以解释为什么第一个代码示例有效但第二个代码没有?
这个重新链接代码工作:
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
Run Code Online (Sandbox Code Playgroud)
此重新链接代码不起作用,但没有给出错误消息:
Dim sNewLinkAddress As String
sNewLinkAddress = "C:\temp\backend.accdb"
CurrentDb().TableDefs("table1").Connect = ";Database=" & sNewLinkAddress
CurrentDb().TableDefs("table1").RefreshLink
Run Code Online (Sandbox Code Playgroud)
我担心的是,在使用CurrentDB()直接返回的Database对象和使用设置为CurrentDB()返回的Database对象的变量'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
Run Code Online (Sandbox Code Playgroud)
在第二个示例中,您对CurrentDb函数进行多次调用,每次调用都返回一个不同的数据库对象实例:
CurrentDb()<B>.TableDefs("table1").Connect = ";Database=" & sNewLinkAddress
CurrentDb()<C>.TableDefs("table1").RefreshLink
Run Code Online (Sandbox Code Playgroud)
这里的结果是,当您RefreshLink在第二行调用时,您正在对数据库对象的全新实例进行调用; 即,其"table1"Connect属性尚未更改的一个.
| 归档时间: |
|
| 查看次数: |
4319 次 |
| 最近记录: |