如何在您的访问中将链接表转换为本地表

立即分享:

我们之前已经说过,但值得重复 - 出于多种原因,链接表在您的数据库中非常有用。 但是链接表的一大缺点是性能——对它们运行查询,特别是如果它们不是 Microsoft Access 表(即如果它们是 Excel、CSV 或 DBF 文件)。 与他们一起工作可能会非常缓慢。 有几种方法可以解决这个问题——我们将在这里使用一种方法,那就是将链接表转换为本地表。 当然——您可以通过复制/粘贴表格手动完成此操作,但如果您有很多事情要处理,用代码完成会容易得多,所以让我们看看如何……

为什么概述您的需求很重要

访问链接表首先,让我们概述一下我们实际想要代码做什么——这样做可以让一开始就更容易实际创建代码,所以我建议您每次考虑创建一些 VBA 代码时都这样做,它有助于阐明您的目标:

“给定链接表的名称,将该表作为本地表导入数据库以提高性能——可选择同时从数据库中删除链接”

通常,当您将链接表转换为本地表时,您会希望删除链接,但在下面的代码示例中,我们为您提供了保留原始链接文件的选项,但这样做,您的新导入的表不会在您的查询等中替换您的链接表,因此您不会看到本地表会给您带来的性能提升。 一旦您对代码按需要工作感到满意,我们建议您始终删除原始代码——毕竟,您实际上并没有删除实际的表格,只是删除了它的链接。

一个忠告

在我们开始编写代码之前 - 快速提醒一下,如果您要链接到 损坏的Access数据库 – 如果 Access 无法读取该文件,则它不太可能从中导入。

所以 - 关于代码......

Sub MakeTableLocal(tableName As String, optional deleteOriginal As Boolean = True)
    Dim DbPath As Variant, TblName As Variant

    'get path of linked table
    DbPath = DLookup("Database", "MSysObjects", "Name='" & tableName & "' And Type=6")
    'Get the real name of the linked table (in case it has been given an alias in the link)
    TblName = DLookup("ForeignName", "MSysObjects", "Name='" & tableName & "' And Type=6")
    If IsNull(DbPath) Then
        'Either a local table, or the wrong table name has been supplied, exit the sub
        Exit Sub
    End If

    'delete linked table
    If deleteOriginal Then
        DoCmd.DeleteObject acTable, tableName
    Else
        'If we're not deleting the existing table we'll have to rename the imported table to avoid
        'overwriting it etc
        tableName = tableName & " - local"
    End If
    
    'import the table as a local, unlinked table
    DoCmd.TransferDatabase acImport, "Microsoft Access", DbPath, acTable, TblName, tableName
End Sub

代码在做什么

VBA代码Most 代码的一部分将非常明显,但有一些关键点需要注意。 首先,我们通过查看(通常是隐藏的)Access 系统表“MSysObjects”来获取链接到哪个文件的详细信息。 由于您完全有可能(并且很有可能)为链接表指定了一个新的本地别名,因此我们接下来需要做的是获取原始表的名称——再次从“MSysObjects”表中获取。

现在我们有了这些细节,只要它们是有效的(即您没有向例程提供拼写错误的表名),那么我们就可以开始了,所以这只是一个问题)删除链接(如果deleteOriginal 设置为 True),并导入表。

这样做通常会给您带来相当显着的性能改进,因此如果您使用链接表,我强烈建议您检查将这些表移动到本地版本会给您带来什么好处——您可能会感到惊讶!

作者简介:

Mitchell Pond 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 修复 SQL Server 文件 和 excel 恢复软件产品。 欲了解更多信息,请访问 datanumen.com

立即分享:

评论被关闭。