我正在开发一个Delphi 4应用程序(不要问我为什么,我已经知道它这么旧了,但我必须这样做,解释起来更复杂,只是老板的要求)。
这个Delphi应用程序在执行时创建了很多*.MB文件(目前一切都很好),它使用了许多TQueries、TUpdatesSQL、TDataSource,所以我想这很正常。但当我关闭这个应用程序时,这些文件应该被删除(但不是),然后当我第二次打开这个应用程序(第三次、第四次等)时,它会创建越来越多的*.MB文件,最终以错误结束:"打开的文件太多。您可能需要增加IDAPI配置中的MAXFILEHANDLE限制">
我刚刚在互联网上发现,你必须在以下位置增加MaxFileHandles(我的值为48):
BDE Administrator:
Configuration->System->INIT->MAXFILHANDLES
这是唯一的解决方案吗?或者还有另一个?当应用程序关闭时,有人能帮我删除这些文件吗?
一个正确编写和使用的D4程序不应该落后.MB文件。
我强烈建议您遵循我下面描述的程序,以便您能够满足您自己认为,在正常操作中不应该留下零散的.MB文件;希望,一旦你做到了,就可以很容易地找到他们为什么在你的案件中被落在后面。
-
创建一个新的项目文件夹,在您的开发驱动器上称之为D:\Test,并复制现有Paradox数据库的文件。我使用了Venues数据库D7(我没有早期版本)在Delphi的Shared\Data文件夹中。它由数据文件Venues.DB、索引Venues.PX和备忘录文件Venues.MB组成。如果场馆数据库中没有D4,请使用另一个。顺便说一下,重点将数据库文件复制到新的项目文件夹是因为数据库很可能在接下来的过程中受到损坏。
-
使用BDE配置程序,创建一个新的Standard,Paradox别名,并将其指向项目文件夹。
-
启动D4并创建一个新项目,其中包括TDataBase、TQuery、TDataSource和TDBGrid以显示TQuery的数据库。将TQuery的SQL属性设置为
从场馆中选择*
-
重要提示:保存项目时,请确保TDataBase的Connected属性设置为False,并且TQuery的"活动"属性也为False。在FormCreate中插入代码事件打开Query1。
-
在项目目录上打开CMD窗口。
-
编译并运行程序。
-
当程序打开时进行
目录*.mb
在CMD提示下。
你应该看到
Venues.MB
和名为的文件
_QSQ1.MB
这是BDE为Query1打开的临时.MB文件。
- 关闭程序并重复步骤7
您现在应该只看到
Venues.MB
列出,因为BDE代码已关闭并删除临时.MB文件。那个是应该发生的。
-
再次运行程序。这一次,在窗体打开后,按Ctrl-F2重置(强制关闭而不执行正常关闭代码。
-
重复步骤7,你应该会发现有两个.MB文件
Venues.MB
和名为的临时文件
_QSQ1.MB
因为BDE代码没有机会删除临时.MB文件
-
如果你一直重复步骤9和10,你会发现一个额外的.MB文件被落在后面(名称末尾的数字越来越多),这就是为什么BDE最终会抱怨您的文件句柄用完了。
-
恐怕您的任务是找出发生这种情况的原因:
-
这可能只是因为您有使用Ctrl-F2终止程序,在这种情况下解决方案是显而易见的,不要!
-
否则程序关闭时一定出了问题。它可以是任何很多事情中的一个,但只有你才能看到你的代码。我要找什么for类似于在FormClose事件中设置的异常处理程序以在关闭期间抑制不需要的异常。这种";快速修复";哪一个旨在隐藏问题,而不发现并解决导致的问题这在D4时代相当普遍。
不管怎样,祝你好运!通过一点系统调试,希望您不需要它/