リンクされたテーブルをアクセスでローカルテーブルに変換する方法

今すぐ共有:

前にも言いましたが、繰り返す価値があります。リンクされたテーブルは、さまざまな理由でデータベースで非常に役立ちます。 ただし、リンクされたテーブルの大きな欠点のXNUMXつは、パフォーマンスです。特に、Microsoft Accessテーブルでない場合(つまり、Excel、CSV、または DBF ファイル)。 作業が非常に遅くなる可能性があります。 これを回避する方法はいくつかあります。ここではXNUMXつの方法で作業します。それは、リンクされたテーブルをローカルテーブルに変換することです。 もちろん、テーブルをコピーして貼り付けることで手動で行うこともできますが、処理するものがたくさんある場合は、コードで行う方がはるかに簡単なので、方法を見てみましょう…

ニーズの概要を説明することが重要な理由

リンクされたテーブルにアクセスするまず、実際にコードに実行させたいことの概要を説明しましょう。これにより、最初から実際にコードを作成するのが非常に簡単になるため、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コードコードの大部分は明白ですが、注意すべき重要な点がいくつかあります。まず、通常は非表示になっている Access システム テーブル「MSysObjects」を参照して、リンク先のファイルの詳細を取得します。リンク先のテーブルに新しいローカル エイリアスを付けている可能性が非常に高いので、次に必要なのは元のテーブルの名前を取得することです。これも「MSysObjects」テーブルから取得します。

これらの詳細が有効である限り(つまり、ルーチンにスペルミスのテーブル名を指定していない限り)、これで詳細がわかりました。これで、リンクを削除する(if deleteOriginalがTrueに設定されている)、テーブルをインポートします。

これを行うと、パフォーマンスが大幅に向上することがよくあります。リンクされたテーブルを使用している場合は、それらのテーブルをローカルバージョンに移動することで得られるメリットを確認することを強くお勧めします。驚くかもしれません。

著者紹介:

Mitchell Pondは、のデータ復旧の専門家です。 DataNumen、Inc。は、以下を含むデータ復旧技術の世界的リーダーです。 修理 SQL Server file と優れた回復ソフトウェア製品。 詳細については、次のWebサイトをご覧ください。 WWW。datanumen.com

今すぐ共有:

コメントは締め切りました。