我正在做一个 Delphi 4应用程序(不要问我为什么,我已经知道它是如此古老,但我不得不,这是更复杂的解释这一点,只是老板的要求)。
这个 Delphi 应用程序在执行时创建了很多 *.MB文件(目前一切正常),它使用了很多TQueries,TUpdatesSQL,TDataSource,所以我想这是正常的。但是当我关闭这个应用程序时,这些文件应该被删除(但没有),然后当我第二次打开这个应用程序时(第三次,第四次,等等),它创建了越来越多的 *.MB文件,最后以一个错误结束:“打开的文件太多。您可能需要在IDAPI配置中增加MAXFILEHANDLE限制”
我刚刚在互联网上发现,你必须增加MaxFileHandles(我有48的值):
BDE Administrator:
Configuration->System->INIT->MAXFILHANDLES
我这是唯一的解决方案?还是还有另一个?有没有人能给予我一盏灯,或者在应用程序关闭时删除那些文件的提示?
1条答案
按热度按时间fykwrbwg1#
一个正确编写和正确使用的D4程序不应该以您描述的方式留下.MB文件。
我强烈建议您按照下面描述的过程操作,这样您就可以确信在正常操作中不应该留下零散的.MB文件;希望一旦您找到了,就可以很容易地找到为什么在您的案例中它们被遗漏了。
1.创建一个新的项目文件夹,在你的开发驱动器上命名为D:\Test,并将现有Paradox数据库的文件复制到其中。我使用的是D 7中的Venues数据库(我没有更早的版本),它位于 Delphi 的Shared\Data文件夹中。它包括数据文件Venues.DB、索引Venues.PX和备忘录文件Venues. MB。如果D4没有提供Venues数据库,请使用另一个。顺便说一句,将数据库文件复制到新的项目文件夹的要点是,数据库很可能在接下来的过程中被损坏。
1.使用BDE配置程序,创建一个新的Standard,Paradox别名,并将其指向项目文件夹。
1.启动D4并创建一个新项目,其中包括一个TDataBase、TQuery、TDataSource和一个TDBGrid以显示TQuery的数据库。
从场馆中选择 *
1.重要事项:保存项目时,请确保TDataBase的Connected属性设置为False,并且TQuery的Active属性也设置为False。请在FormCreate事件中插入代码以打开Query 1。
1.在项目目录中打开CMD窗口。
1.编译并运行程序。
1.当程序打开时,执行
目录 *.mb
在CMD提示符下。
你应该看看
Venues.MB
和名称类似
_QSQ1.MB
这是BDE为Query 1打开的一个.MB临时文件。
1.关闭程序并重复步骤7。
您现在应该只看到
Venues.MB
因为BDE程式码已经关闭并删除了缓存的.MB档案。这是应该发生的事情。
1.再次运行该程序。这一次,在其窗体打开后,按Ctrl-F2将其重置(强制其关闭,而不执行其正常的关闭代码)。
1.重复步骤7,您应该会发现有两个.MB文件
Venues.MB
和名称类似的临时文件
_QSQ1.MB
因为BDE代码没有机会删除临时的.MB文件
1.如果您不断重复步骤9和10,您会发现留下了一个额外的.MB文件(文件名末尾的数字不断增加),这就是为什么BDE最终会抱怨您用完了文件句柄。
1.恐怕你们的任务是找出原因
无论如何,祝你好运!通过一点系统调试,希望你不会需要它/