3

BDE を使用するレガシー アプリケーションがあります。(BDE は、その古さを考えると、驚くほどうまく機能し続けます)。

アプリでフォルダーの操作 (名前の変更、移動など) が必要な場合がありますが、.NET または .LCK ファイルがフォルダー内で開いたままになり、それが妨げられます。コードでまだ開いているテーブルまたはクエリを見つけることができませんでした。

プログラム シェルを BDE 以外のプログラムに接続し、それ自体を終了させる以外に、これらのファイルのロックを解除する BDE をシャットダウンするプログラム的な方法があります。

標準免責事項 :はい、BDE は死んでいます。はい、より最新のデータベースに移行する必要があります。はい、いつの日か BDE が機能しなくなるでしょう。ほぼ 200 万行のレガシー コードがあるため、移行は (Sybase Advantage のような多少プラグ互換性のあるプラットフォームを使用しても) 安価なプロジェクトではありません。そのため、まだ行っていません...

4

2 に答える 2

2

通常、BDE をシャットダウンするために特に行うことはありません。
すべての BDE セッションは、DBTables の Finalization セクションで解放されます。これによりすべてが閉じられ、デフォルト セッションが破棄されるとDbiDLLExit、必要に応じて呼び出さDbiExitれ、両方とも BDE ユニットから呼び出されます。

ここで、前にBDE をシャットダウンしたい場合は、DBTables のファイナライズと初期化の部分を模倣することをお勧めします (免責事項: 限定的なテスト、慎重に使用してください...)。

procedure BDEKill;
begin
// from finalization
  Sessions.Free;
  Sessions := nil;
end;

procedure BDEReStart;
begin
// from initialization
  Sessions := TSessionList.Create;
  Session := TSession.Create(nil);
  Session.SessionName := 'Default'; { Do not localize }
end;

次のように使用します。

BDEKill;
try
  // move my folders
finally
  BDEReStart;
end;
于 2012-04-19T17:55:20.400 に答える
1

ファイルのロックを解除することは、問題に対する別の可能な(極端な)解決策です。

opc0deによるFile Unlockのソース コードを調べることをお勧めします。


見積もり:

ファイルが別のアプリケーションで使用されているため、ファイルを削除できないことがよくあります。このツールを使用すると、そのファイルのロックを解除して削除できます。


ルック アンド フィール:

opc0deによるファイルロック解除


特徴:

  • ファイルのロックを解除
  • ファイルのロック解除と削除
  • ファイルを使用するプロセスを表示する
  • ファイルを使用するプロセスを終了します

ダウンロードリンク:

于 2012-04-19T19:13:46.107 に答える