从代码中关闭BDE

时间:2012-04-19 17:06:31

标签: delphi bde

我们有一个遗留应用程序使用BDE。 (鉴于其年龄,BDE继续出色地工作)。

有些时候我们的应用程序需要操作文件夹(重命名,移动等),但.NET或.LCK文件仍然在文件夹中打开,以防止这种情况发生。我们无法在代码中找到任何仍然打开的表或查询。

除了将我们的程序shell发送到非BDE程序并且自身终止之外,我们是否有一种编程方式可以关闭BDE,这将解锁这些文件。

标准免责声明:是的,BDE已经死了。是的,我们应该迁移到更现代的数据库。是的,有一天BDE将不再适用。有近200万行遗留代码,迁移(即使使用像Sybase Advantage这样的插件兼容的平台)也不是一个便宜的项目,这就是为什么我们还没有完成它...

2 个答案:

答案 0 :(得分:2)

您通常没有任何关于关闭BDE的具体操作 所有BDE会话都在DBTables的Finalization部分中被释放。这将关闭所有内容,当默认会话被销毁时,如果需要,它将调用DbiDLLExit,然后从BDE单元调用DbiExit

现在,如果你想在之前关闭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;

答案 1 :(得分:1)

解锁文件是您问题的另一种可能(极端)解决方案:

我建议您通过opc0de来学习File Unlock的源代码。


<强>引用

  

通常无法删除文件,因为另一个文件正在使用它   应用。此工具允许您解锁该文件以进行删除。


外观:

File Unlock by opc0de


功能

  • 解锁文件
  • 解锁&amp;删除文件
  • 查看哪些进程使用该文件
  • 终止使用该文件的进程

下载链接: