少し修正した古い Delphi 7 アプリケーションがあります。Access データベースを使用します。アプリケーションをリモートで開き、並行してデータベースにアクセスする約 150 人のユーザーがいます。修正を始める前は (へー)、これは (Delphi アプリケーションのバグを除けば) うまく機能していましたが、データベースが時々少し遅くなることもありました。
いくつかの機能と 2 つの新しいテーブルを追加したところ、突然、非常に奇妙な問題が発生しました。
- MSAccess は、データベース (2010 バージョン) にアクセスできます。つまり、ファイルをダブルクリックすると、MSAccess が開き、データベース ファイルが開きます。
- Delphi 7 アプリはデータベースにアクセスできます。
- 元の ConnectionString Mode を「ReadWrite」から「Share Deny None」に変更すると、Delphi アプリの 2 つ以上のインスタンスでデータベースを共有できます(以下の接続文字列全体)。
- 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 が行ったすべての提案を確認する必要がありますが、これには管理者を発掘する必要があるため、しばらく時間がかかる場合があります。