我们有一个遗留应用程序使用BDE。(考虑到BDEcontinues的年龄,它的工作效果令人惊讶)。
有时,我们的应用程序需要操作文件夹(重命名、移动等)。但是文件夹中的.NET或.LCK文件仍然处于打开状态,从而防止了这种情况。我们无法在代码中找到任何仍处于打开状态的表或查询。
除了让我们的程序外壳到一个非BDE程序并自行终止之外,我们是否有一种程序方法来关闭BDE,这将解锁这些文件。
标准免责声明:是的,BDE已经死了。是的,我们应该迁移到一个更现代化的数据库。是的,总有一天BDE会失效。由于有了将近200万行遗留代码,迁移(即使使用Sybase Advantage这样的插件兼容的平台)并不是一个廉价的项目,这就是为什么我们还没有这样做.
发布于 2012-04-19 17:55:20
您通常没有任何特定的做法来关闭BDE。
在DBTables的终结部分中释放所有BDE会话。这将关闭所有内容,当默认会话也被销毁时,它将在需要时调用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-19 19:13:46
解锁文件是解决问题的另一种可能(极端)解决方案:
我建议您通过文件解锁学习opc0de的源代码。
Quote
由于另一个应用程序正在使用文件,所以常常无法删除该文件。此工具允许您解锁该文件以便删除。
外观:

特性:
下载链接:
https://stackoverflow.com/questions/10233161
复制相似问题