修正プログラムが存在し、私が管理している MS-Access アプリケーション用に修正済みです。ただし、これは便利ではなく、実装も簡単ではありません。
最初に、ファイルのロックとロックされたファイルの背景について説明します。
ロック ファイルは便利なツールですが、実際のロックではなくインジケーターです。編集することはできますが、効果はありません。
ライブ MS-Access セッションは、データの編集、オブジェクトの変更 (例: テーブルのインデックス作成)、またはメンテナンス タスクの実行時に、.accdb または .mdb バックエンド データベース ファイルのファイル ロックを維持できます。そのリストの最後の 2 つの項目はめったにありません。セッションで開いたデータベース ファイル以外の別のデータベース ファイルに影響を与えるには多少の努力が必要ですが、実際に観察されることもありますが、これらのセッションを閉じるとロックが解放され、ほとんどの場合意思。
クラッシュした MS-Access セッションは、.accdb または .mdb バックエンド データベース ファイルのファイル ロックを維持できます。問題のあるマシンを強制的に再起動すると、ロックが解放されます。ほとんどの場合、解放されます。
ロック ファイル (.ldb または .laccdb) を使用してこれらを追跡できます。
Access データベースに対して ODBC または ADO を使用するサードパーティ レポート アプリケーションは、ファイルをロックできないように、接続を読み取り専用に設定する必要があります。運が良ければ、システム所有者はあなたが制御する dsn ファイルを使用し、その設定を見ることができます。
QLikView などの一部のレポート アプリは、完全なファイル名を要求する不透明なインターフェイスであり、次に何が起こるかは誰にもわかりません。あなたは知る方法がありません。
一部のレポート アプリ (および Excel ピボット テーブル) はデータベースにリンクしている可能性があり、所有者は単にあなたに教えません。接続が正しく構成されていない場合、取得中にテーブルがロックされる可能性があります。また、クライアント セッションを終了すると、ロックがそのまま残る可能性があります。ピボットの「更新」が遅いのを見て退屈している Excel ユーザーは、常にこれを行っています。
さらに悪いことに、一部のサードパーティ システムではデータの書き込みが必要になる場合があります。これは避ける必要があります。Access クライアント アプリケーションを使用してください。-しかし、常にその決定を下せるわけではありません。
運が良ければ、接続オブジェクトが正しく構成されているため、マシン ID が接続文字列に含まれているため、ロック ファイルに確実に表示され、ロックされているマシンを見つけることができます...
多分彼らはそうしますが、しばしばそうしません。
...行ロック クエリ、ページ ロック クエリ、およびテーブル ロック クエリは、重要な問題に対して機能的に同じであることに注意してください。「ファイル」レベルで何か (圧縮や修復など) を行う必要がある場合は、ファイルはあなたに対してロックされています。そのロックが解除されるまで、あなたはロックアウトされます。
マシンを識別できる場合と識別できない場合があります。それらをネットワークから強制的に切断できる場合とできない場合があります。通常の操作ではロックを正常に解放する場合としない場合があり、クラッシュした場合はほぼ確実に解放されません。
だから:それはきれいな絵ではありません。
企業環境での最善の解決策は、データベース ファイルをロックしているユーザーを特定するための「finger」ツールを使用して、ネットワーク管理者に直接連絡し、ユーザーに連絡して、問題のセッションを切断することです。
障害のモードは次のとおりです。
- もしあなたの組織構造がコミュニケーションのラインを確立することを許さないなら、あなたはうんざりしています。
- 組織のネットワーク管理者が有効な時間枠内でそれを行う能力または権限を持っていない場合、あなたはうんざりしています.
- 組織のネットワーク管理者がそれを行わないことを選択した場合、あなたはうんざりです.
ただし、MS-Access アプリケーションの修正は行っています。
私が使用する回避策は非常に積極的です。建物の電源にシャベルを通すか、人身御供を求めるシステム管理者の要求に屈するという「核のオプション」ではありませんが、実装するには非常に不快でばかげた量の作業が必要です。
- クライアント (MS-Access フロントエンド アプリケーション) を構成して、名前付きバックエンド データベースを簡単に切り替えることができます。
- 同様に、作成して他のアプリが使用できるようにした dsn ファイルは、'DBQ=' または 'Data Source=' 句を新しいファイル名に編集する既存のスクリプトからアクセスできる必要があります。
- データベース ファイルのコピーを取得し、必要なメンテナンス作業のためにローカルの一時フォルダーに移動し、新しい名前でアプリケーションの「Data」フォルダーに戻します。
- ここで、「バックエンドの変更」スクリプトまたは VBA 関数を実行します...
- …そして、ロックされた古いバックエンド ファイルを使用している他の誰かとは地獄です。
ヒント: フロントエンド アプリケーションを実装して、バックエンド データベース (または他のリソース、最悪の場合のシナリオは完全なロックアウト) を定期的にポーリングして、「Maintenance shutdown」または「Change database」命令を取得するのが賢明です。 「メインメニュー」フォームのタイマーイベントに入れます。
また、リンクされたテーブルのソース データベースの切り替えを自動化するコードもあります。