我的场景:计算机A有一个包含链接表的Access数据库.这些链接表实际上位于计算机B上的另一个Access数据库中.没有什么不寻常的.
现在我们创建一个SQL Server数据库,并在计算机B上的Access数据库中建立指向这些表的链接; 我们配置一台机器DSN来定义计算机B上必要的ODBC连接.访问数据库B现在包含本地表和链接的SQL表.
Access数据库A现在想要链接到Access数据库B的新表 - 但只有其本地表显示在对话框中才能添加链接表.您似乎无法在Access中"链接到链接表"...
但这是真的吗?我们想要做的是将数据库B的SQL表链接呈现给数据库A ,就好像它们是本地表一样 ; 即数据库A不知道数据库B中的新表实际上不是本地的.
当然,我们可以通过在该计算机上配置DSN将SQL表直接链接到数据库A ,但我们不想这样做.我们希望将计算机/数据库B用作nexus或"网关",将本地和SQL表无缝地呈现给网络上的其他Access客户端应用程序.这只是一个临时设置,允许我们逐步将所有Access客户端应用程序迁移到基于SQL Server的表,而无需修改大量代码.
可以这样做吗?还有其他可行的解决方案或方案我们还没有想过吗?
不 - 您只能链接到真实表 - 您必须重新创建数据库A在数据库B上为数据库A所做的SQL服务器链接
如果SQL服务器数据没有太大变化,并且您只是将其用于查找,则可以将数据导入到可链接到的真实Access表中.
编辑
另一种解决方案是动态链接表 - 这样您就不必手动将DSN添加到每台计算机.使用类似这样的连接字符串:
ODBC;Driver={SQL Server};Server=<server name/IP>;Database=<database>;UID=<user>;PWD=<password>
Run Code Online (Sandbox Code Playgroud)
这链接表
Dim db As Database
Dim TD As TableDef
Dim sTableName As String ''MS Access name (can be same as SQL Server name)
Dim sServerTableName As String ''SQL Server Name
sTable = "Table1"
sServerTableName = "dbo.Table1"
sServerConnect = "ODBC;Driver={SQL Server};Server=Localhost;Database=DB1;"
Set TD = db.CreateTableDef(sTableName)
TD.Connect = sServerConnect
TD.SourceTableName = sServerTableName
db.TableDefs.Append TD
db.TableDefs.Refresh
Run Code Online (Sandbox Code Playgroud)