Accessリンクテーブル運用の注意点|再リンク・パス管理・UNCパス推奨
サーバー移設やフォルダ変更でリンクテーブルのパスが切れる事故の備え。リンクテーブルマネージャーでの再リンク手順、ドライブレターより安定するUNCパスの設定方法、DB分割後のバックエンド再リンク、VBAによる自動化の考え方を解説します。
結論:リンクが切れたときの再リンク手順自体は難しくない
Accessのリンクテーブルとは、SQL ServerやExcelなど外部データソースのデータをAccess内から参照する仕組みです。この記事ではDB分割構成でのAccessバックエンド(accdbファイル)へのリンクを主に扱います。DB分割構成を採用すると、フロントエンドの業務データのテーブルは原則としてバックエンドへのリンクテーブルになります。リンクテーブルを参照するフォームやクエリを開いたタイミングで、バックエンドのファイルパスへアクセスします。
当社の移行支援では、リンク切れの問い合わせの多くがサーバー移設かフォルダの整理のあとに発生しています。ドライブレターの割り当て変更やファイル名の変更でも起きます。これらが起きると、フロントエンドが保持しているパスと実際のバックエンドの場所がずれて「テーブルを開けない」エラーが出ます。
修復自体は難しくありません。Microsoftの「Manage linked tables」にある通り、「外部データ」タブのリンクテーブルマネージャー(Linked Table Manager)から新しいパスを指定して再リンクできます。ただし、同じ事故を繰り返さないためには、接続情報の管理方針を決めておく必要があります。以下で順に説明します。
リンクテーブルマネージャーでの再リンク手順
リンクテーブルマネージャーは、データベース内のすべてのリンクテーブルを一覧し、接続先を更新する画面です。「外部データ」タブの中にあります。
Microsoftの公式手順にもとづく再リンクの流れは次のとおりです(主にMicrosoft 365版の操作)。
- リンクテーブルマネージャーを開く(「外部データ」タブ内)
- データソースまたは個別のリンクテーブルを選択する
- 「再リンク(Relink)」をクリックすると、新しい場所を尋ねるダイアログが表示される
- バックエンドのaccdbファイルを指定する
- 「ステータス(Status)」列が「成功(Success)」になっていることを確認する
Microsoft 365版では「更新(Refresh)」「再リンク(Relink)」「追加(Add)」「編集(Edit)」「削除(Delete)」と操作が充実しています。Access 2016以降の買い切り版ではダイアログがシンプルな構成で、テーブルを選択して「常に新しい場所を確認する」を指定して更新する操作が基本になります。いずれもリンクに問題のあるテーブルを個別に選択して再リンクする流れは共通です。
複数テーブルが同じバックエンドファイルを参照している場合、1つのデータソースを選択してまとめて再リンクできます。テーブルごとに別々に指定するより確実です。
ドライブレターよりUNCパスを使うべき理由
リンクテーブルの接続情報には、ファイルパスが記録されます。ここにドライブレター(Z:\ など)を使うと、環境が変わったときに切れやすくなります。
ドライブレターはPCごとに割り当てが異なる場合があります。あるPCではZ:がサーバーの共有フォルダを指していても、別のPCでは同じドライブレターが別の場所を指していたり、そもそも割り当てられていなかったりします。グループポリシーでドライブをマップしている場合、ポリシーの更新タイミングで一時的に切断が起きることもあります。共有フォルダ運用のリスクで触れているとおり、マップドドライブ固有の切断問題はAccess全体に影響します。
UNCパス(\\サーバー名\共有名\フォルダ名\ファイル名.accdb 形式)を使うと、ドライブレターの割り当てに依存しません。同じネットワーク内で名前解決と権限が揃っていれば、どのPCでも同じパス文字列でバックエンドに接続できます。リンクテーブルマネージャーで再リンクする際、ファイル名の欄にUNCパスを直接入力するか、ネットワーク表示からブラウズすることで設定できます。
| 接続方式 | 切れやすい場面 | 推奨度 |
|---|---|---|
| ドライブレター(Z:\…) | PC環境差異・GPO更新・アイドル切断 | 避けた方がよい |
| UNCパス(\\server\share\…) | サーバー移設・共有名変更・フォルダ名変更など | 推奨 |
DB分割構成でのバックエンド再リンク
DB分割構成では、フロントエンドの業務データのテーブルが原則としてバックエンドへのリンクテーブルになります。バックエンドファイルを別のサーバーや別フォルダに移したとき、フロントエンドが保持するパスを一括で更新する必要があります。
作業前に全ユーザーがフロントエンドを閉じていることを確認してください。全員が閉じたことをサーバー側のセッション状況やロックファイル(.laccdb)の有無で確認してから、バックエンドを移動します。その後フロントエンドを1台で開き、リンクテーブルマネージャーで新しいバックエンドのパスを指定して再リンクします。更新済みのフロントエンドを各ユーザーのPCに再配布すれば完了です。バックエンドの移動前には必ずバックアップを取っておいてください。
再配布の手間を省くために、起動時にリンクの有効性を確認してバックエンドが見つからなければダイアログで場所を尋ねるVBAを仕込む方法もあります。ただし、VBAの実装難度が上がるため、サーバー移設の頻度と利用者数を考慮して判断してください。
VBAでの再リンク自動化の考え方
バックエンドのパスが変わるたびに手動でリンクテーブルマネージャーを操作するのが手間な場合、VBAで自動化できます。基本的な仕組みは、CurrentDbのTableDefsコレクションを処理し、接続文字列に";DATABASE="が含まれるテーブルに対して新しいパスを設定しRefreshLinkを呼ぶ流れです。
概念コードのイメージは次のとおりです(簡易例です。パスワード付きバックエンドなど環境に応じて調整が必要です)。
' ※ 1つのバックエンドのみを参照する構成を前提とした簡易例です
' 複数のバックエンドを参照している場合は旧パスとの一致確認など追加が必要です
Dim dbs As DAO.Database
Dim tdf As DAO.TableDef
Dim newPath As String
newPath = "\\server\share\backend.accdb"
Set dbs = CurrentDb()
For Each tdf In dbs.TableDefs
' Accessバックエンドへのリンクは接続文字列が ";DATABASE=" で始まる
If Left$(tdf.Connect, 10) = ";DATABASE=" Then
tdf.Connect = ";DATABASE=" & newPath
tdf.RefreshLink
End If
Next tdfコード中のUNCパスについて補足します。VBAのコードエディター(VBE)ではバックスラッシュはエスケープ文字ではないため、`\\server\share\backend.accdb`と記述するとそのまま`\\server\share\backend.accdb`として扱われます。実行前にVBEのイミディエイトウィンドウで`?tdf.Connect`を確認してから本番に適用してください。
もう一つの注意点として、バックエンドのパスをコード内にハードコーディングすると、次に移設したときにまたコードを修正しなければなりません。パスをシステムテーブルや設定テーブルに持たせておくと管理がしやすくなります。
VBAによる自動化はリンク切れの復旧を早くしますが、リンク切れそのものを防ぐ仕組みにはなりません。サーバー移設の前にフロントエンドの接続情報を確認・更新しておく運用を定着させることが根本的な対策です。
接続情報の管理と事故を防ぐ運用
リンクテーブルの接続先は、意外と把握されていないことが多いです。「バックエンドがどこにあるか」を誰も知らない、ドキュメントに書かれていない、という状況でサーバー移設が行われてリンクが切れる、というケースは珍しくありません。
最低限、次の情報を社内ドキュメントに残してください。
- バックエンドファイルの正確なUNCパス
- フロントエンドを配布している場所(共有フォルダのパス)
- 再リンク担当者と連絡先
- 最後にリンクを更新した日付
サーバー移設の際は、移設前にリンクテーブルマネージャーで現在のパスを確認し、移設後の新しいパスをUNCで確定してから作業に入ると、再リンク作業がスムーズです。移設後に「どこに置いたか」から確認することになると、全ユーザーへの影響時間が伸びます。
現在のAccessファイルの構成や接続状態を把握したい場合は、無料の解析可否チェックでファイルの概況を確認できます(ファイルの送信は不要です)。
よくある質問
Q. 「テーブル'xxxx'が見つかりません」というエラーが出ます。これはリンク切れですか。
リンク切れの可能性はありますが、それだけではありません。Microsoftのサポートドキュメント(KB287696)では、このエラーの原因として「リンク先のファイルが移動または存在しない」のほかに、「テーブル名のスペル誤り」「フォームのレコードソースに削除済みのテーブル名が残っている」なども挙げています(同ドキュメントはAccess 2003/2007/2010を主な対象としています)。まずリンクテーブルマネージャーでリンクの状態を確認し、正常であれば参照名の誤りを疑ってください。
Q. リンクテーブルマネージャーのメニューが見当たりません。どこにありますか。
公式の手順では「外部データ」タブの中にあります。見つからない場合は、リボンの検索ボックスに「リンクテーブル」と入力すると候補に出ます。
Q. 再リンクすると、既存のフォームやクエリは動き続けますか。
バックエンドのファイルの場所だけが変わった場合、再リンク後にリンクテーブル名が同じであればフォームやクエリはそのまま動きます。Microsoftの公式手順にも、再リンク時に既存のリンクテーブル名を維持するか新しい名前に変えるかを選べるとあります。バックエンドのテーブル名が変わっても、フロントエンド側のリンクテーブル名を元のまま維持すれば、フォームやクエリの修正は不要です。一方、フロントエンド内のリンクテーブル名も変更した場合は、そのテーブルを参照しているフォームのレコードソースやクエリも合わせて修正が必要になります。
Q. バックエンドを移動するとき、ユーザーが使っている最中でも大丈夫ですか。
使用中のバックエンドファイルを直接移動すると、処理中の更新や未保存データに影響するおそれがあります。全ユーザーにフロントエンドを閉じてもらってから作業を始めてください。Microsoftのロックファイル解説によれば、.laccdbは通常、最後の利用者が閉じたときに削除されますが、削除権限がない場合やデータベースが破損状態とマークされている場合は残り続けます。ロックファイルの有無だけでなく、サーバー側のオープンファイルやセッションも確認しながら進めるのが安全です(当社では作業前にバックアップを取ることも必須としています)。詳しくは延命中のAccessを守るバックアップ設計を参考にしてください。
触れないAccessが「診断できるか」だけ、確かめませんか。
顧客データは送信不要。発注の義務もありません。
約2分・ファイル送信不要・発注義務なし/説明はオンライン・売り込みはしません