我们有一个遗留应用程序使用BDE。 (鉴于其年龄,BDE继续出色地工作)。
有些时候我们的应用程序需要操作文件夹(重命名,移动等),但.NET或.LCK文件仍然在文件夹中打开,以防止这种情况发生。我们无法在代码中找到任何仍然打开的表或查询。
除了将我们的程序shell发送到非BDE程序并且自身终止之外,我们是否有一种编程方式可以关闭BDE,这将解锁这些文件。
标准免责声明:是的,BDE已经死了。是的,我们应该迁移到更现代的数据库。是的,有一天BDE将不再适用。有近200万行遗留代码,迁移(即使使用像Sybase Advantage这样的插件兼容的平台)也不是一个便宜的项目,这就是为什么我们还没有完成它...
答案 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的源代码。
<强>引用强>:
通常无法删除文件,因为另一个文件正在使用它 应用。此工具允许您解锁该文件以进行删除。
外观:
功能强>
下载链接: