【问题标题】:How do I "chain" linked tables in Access?如何在 Access 中“链接”链接表?
【发布时间】:2009-05-12 00:01:42
【问题描述】:

我的场景:计算机 A 有一个包含链接表的 Access 数据库。这些链接表实际上驻留在计算机 B 上的另一个 Access 数据库中。目前还没有什么异常。

现在我们创建一个 SQL Server 数据库,并在计算机 B 上的 Access 数据库中建立到这些表的链接;我们配置一个机器 DSN 来定义计算机 B 上必要的 ODBC 连接。Access 数据库 B 现在包含本地表和链接的 SQL 表。

Access 数据库 A 现在想要链接到 Access 数据库 B 的新表 - 但只有其本地表显示在对话框中以添加链接表。看来您无法在 Access 中“链接到链接表”...

但这真的是真的吗?我们要做的是将数据库 B 的 SQL 表链接到数据库 A 就好像它们是本地表一样;即数据库 A 不知道数据库 B 中的新表实际上不是本地的。

当然,我们可以通过在那台计算机上配置 DSN 将 SQL 表直接链接到数据库 A,但我们不想这样做。我们希望使用计算机/数据库 B 作为连接或“网关”,将本地和 SQL 表无缝地呈现给网络上的其他 Access 客户端应用程序。这只是一个临时设置,可以让我们逐步将所有 Access 客户端应用程序迁移到基于 SQL Server 的表,而无需修改大量代码。

这可以吗?是否还有其他我们没有想到的可行解决方案或场景?

【问题讨论】:

  • 您在任何一台机器上都不需要 DSN -- 请改用无 DSN 连接字符串。

标签: ms-access


【解决方案1】:

不——你只能链接到真实的表——你必须重新创建你在数据库 B 上为数据库 A 所做的 SQL 服务器链接

如果 SQL Server 数据没有太大变化,而您只是将其用于查找,则可以将数据导入到可以链接到的真实 Access 表中。

编辑

另一个解决方案是动态链接表格 - 这样您就不必手动将 DSN 添加到每台计算机。使用类似这样的连接字符串:

ODBC;Driver={SQL Server};Server=<server name/IP>;Database=<database>;UID=<user>;PWD=<password>

这链接了一个表格

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

【讨论】:

    【解决方案2】:

    关于查询建议,可以在FROM 子句中使用IN 'C:\OtherDatabase.mdb' 子句:

    SELECT qryMyTable.*
    FROM qryMyTable IN 'c:\OtherDatabase.mdb';
    

    这将在存储查询的数据库中为您显示其他数据库中的查询内容。如果其他数据库的路径没有改变,您可以使用此方法搭载其他数据库的链接表。

    【讨论】:

    • 这假设两个数据库共享同一个工作组文件。
    • 如果他们不这样做,您可以提供完整的连接字符串,其中包含适当的身份验证信息和适当的工作组文件位置。
    • 如何指定工作组文件(mdw)的路径?几年前,在 Access MVP 最终说服我由于 Jet 的架构而无法实现之后,我放弃了。但如果你知道怎么做,那么我会很高兴学习。告诉你什么:我将开始一个关于 SO 的新问题,你可以通过回答它来获得一些代表:) 观看这个空间......
    • 我在那边看到了你的评论。那么,我们是否同意您在这里的回答确实假设两个数据库共享同一个工作组文件?
    【解决方案3】:

    您能否在 B 上创建一个查询/视图,它只是 C 上链接表的视图,以便 A 可以访问 B 上的查询/视图(实际上是 C 上的表)?

    喜欢:

    A 上的链接查询 -> B 上的查询 : B 上的链接表 -> C 上的真实表

    评论后编辑:好的,显然你不能链接到查询,所以那将不起作用。

    另一个想法:你能在 B 和 C 之间设置 Replication,以便 C 的所有表都复制到 B,A 可以访问它们吗?

    【讨论】:

    • “复制”是什么意思?如果您的意思是 Jet 复制,不,它不会那样工作,而且 ODBC 链接表在复制的 MDB 中会出现几个问题。
    • 是的,我指的是 Jet 复制。好吧,看起来这个想法也无济于事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2011-04-09
    • 2015-03-25
    • 1970-01-01
    • 2017-04-25
    • 2012-03-11
    相关资源
    最近更新 更多