2

少し修正した古い Delphi 7 アプリケーションがあります。Access データベースを使用します。アプリケーションをリモートで開き、並行してデータベースにアクセスする約 150 人のユーザーがいます。修正を始める前は (へー)、これは (Delphi アプリケーションのバグを除けば) うまく機能していましたが、データベースが時々少し遅くなることもありました。

いくつかの機能と 2 つの新しいテーブルを追加したところ、突然、非常に奇妙な問題が発生しました。

  1. MSAccess は、データベース (2010 バージョン) にアクセスできます。つまり、ファイルをダブルクリックすると、MSAccess が開き、データベース ファイルが開きます。
  2. Delphi 7 アプリはデータベースにアクセスできます。
  3. 元の ConnectionString Mode を「ReadWrite」から「Share Deny None」に変更すると、Delphi アプリの 2 つ以上のインスタンスでデータベースを共有できます(以下の接続文字列全体)。
  4. Delphi アプリのインスタンスが実行されると、データベース ファイルをダブルクリックして開くことができなくなります。(これを実行しても何も起こりません)。ただし、MSAccess を開き、その中からデータベース ファイルを開くことができます。それはうまくいきます。

接続文字列:

Provider=Microsoft.Jet.OLEDB.4.0;
User ID=Admin;Data Source=DBPath;
Mode=Share Deny None;
Extended Properties="";
Persist Security Info=False;
Jet OLEDB:System database="";
Jet OLEDB:Registry Path="";
Jet OLEDB:Database Password=****;
Jet OLEDB:Engine Type=5;
Jet OLEDB:Database Locking Mode=1;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don`t Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False

共有のセキュリティ設定に関して Renaud Bompuis が行ったすべての提案を確認する必要がありますが、これには管理者を発掘する必要があるため、しばらく時間がかかる場合があります。

4

1 に答える 1

1

コンピューターにデータベースのコピーがある場合は、Access を使用してエラーなしで開くことができることを確認してください。問題が発生した場合は、まずそれを修正してください。おそらく、データベースを圧縮して修復します。

データベースを開くリモート フォルダーが、Access の信頼できる場所の一覧に追加されていることを確認します (データベースを開くローカル フォルダーも同様です)。

データベースをローカルで開くことができるが、リモート共有上にあるときはできない場合は、共有のセキュリティ設定で、共有全体への読み取りおよび.laccdb書き込みアクセスが許可されていることを確認して、データベース エンジンがファイルを適切に作成または.ldbロックできるようにします。同様の問題については、
質問MS Access - 分割データベースでの「ファイルは既に使用されています」エラーを参照してください。

基本的に、他のユーザーが接続している間でも、Access がリモート データベースを開くことができない理由はありません。

ここで質問するときは、できる限り詳細を投稿することを忘れないでください。
たとえば、ここでは、使用している正確な接続文字列の詳細を投稿する必要があります。問題の特定に役立つため、Access からデータベースを開こうとしたときに表示される正確なエラー メッセージについても言及する必要があります。

于 2012-11-07T07:04:07.027 に答える