因为TransferDatabase方法中只能指定导入、导出或链接数据的数据库的完整名称(包括路径),如果当前打开的数据库并不是需要直接导出或者导入的话就不能通过一句代码就能实现,在dbB下操作,把dbA的表Tab1链接到dbC,可以分成三部实现。
1、先将把dbA的表Tab1链接至dbB中
DoCmd.TransferDatabase acLink, "Microsoft Access", dbA, acTable, Tab1, Tab1
2、再把dbB中的链接表Tab1再导出至dbC
DoCmd.TransferDatabase acExport, "Microsoft Access", dbC, acTable, Tab1, Tab1
3、然后再删除dbB中的链接表Tab1
DoCmd.DeleteObject acTable, "Tab1"
Sub subLinkTableObj()
'在dbB(本地库)的模块中建立此函数
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application") '设置access对象
appAccess.OpenCurrentDatabase "D:\dbC.mdb" '打开含有要链接的表的数据库(含全路径)
appAccess.Application.Visible = False '不显示打开的数据库
appAccess.DoCmd.TransferDatabase acLink, "Microsoft Access", "D:\dbA.mdb", acTable, "Tab1", "Tab1" '链接语句
appAccess.Quit '关闭并退出打开的数据库
Set appAccess = Nothing '释放内存
End Sub
cspa的方法我尚未试验,不知道2003能否适用。1楼金宇先生的方法我已试过,没问题,但是反过来要删除链接表,我用下面语句
Set dbs = DBEngine(0).OpenDatabase(dbC, False, False)
For Each tdf In dbs.TableDefs
If tdf.name =Tab1 Then dbs.Execute "DROP TABLE " &Tab1 & ";"
Next tdf
或者
For Each tdf In dbs.TableDefs
If tdf.name =Tab1 Then dbs.TableDefs.Delete Tab1
Next tdf
都不成功,那儿有问题?请各位赐教。
2楼的方法比较简单,但我不会建函数,就直接在程序中使用。
如果Tab1是变量的话
Dim dbs As Object
Dim tdf As TableDef
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
If tdf.Name = Tab1 Then dbs.Execute "DROP TABLE "& Tab1 &";"
Next tdf
如果Tab1直接是表名称的话
If tdf.Name = "Tab1" Then dbs.Execute "DROP TABLE Tab1"
其实有简单的方法,如果只是针对单个表
CurrentDb.Execute "drop table 仓库表" ‘删除单个表
6楼金宇的方法很简单,但我的问题前提是有dbA,dbB,dbC三个库(还包括dbA中Tab1链接表的原来地址dbX),
我在B库中操作,将dbA库的链接表Tab1(本身是链接表)导出到dbC库,
而且也是链接表,按照2楼cspa方法(详见上面)可以实现,
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase dbX(dbA中Tab1链接表本身的库名不是dbA)
appAccess.Application.Visible = False
appAccess.DoCmd.TransferDatabase acLink, "Microsoft Access", dbX, acTable, "Tab1", "Tab1"
appAccess.Quit
Set appAccess = Nothing
因为加了appAccess.Application.Visible = False 语句,打开dbA库时就不会显示,很好。
然后我还要在dbB库操作,将dbC库的链接表删除(即撤销链接),我还是用的cspa前几天提供的方法,
这里dbA,dbB,dbC数据库是全路径的
Sub subDelacObj()
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase dbC
appAccess.DoCmd.DeleteObject acTable, Tab1
End Sub
(说明我开始用的是dbA,因为这些表本来就是dbA上的链接表表,结果什么也没有删除,
也不能用dbX,后来想明白了,因为这些表是由dbX链接到dbC的,所以从dbC直接删除就行,运行结果链接表就删除了)
总记录:7篇 页次:1/1 9 1 :