我如何确保 BDE *.MB 文件在我完成我的 Delphi 应用程序后被删除?
How can I make sure that BDE *.MB files are being deleted once I finish my Delphi app?
我正在开发一个 Delphi 4 应用程序(不要问我为什么,我已经知道它太旧了但我不得不这样做,解释这个更复杂,只是老板的要求)。
这个 Delphi 应用程序在执行时创建了很多 *.MB 文件(目前一切正常),它使用了很多 TQueries、TUpdatesSQL、TDataSource,所以我想这是正常的。但是当我关闭这个应用程序时,这些文件应该被删除(但没有),然后当我第二次(第三次、第四次等)打开这个应用程序时,它会创建越来越多的 *.MB 文件,最后以错误结束:
"Too many open files. You may need to increase MAXFILEHANDLE limit in IDAPI configuration"
我刚刚在互联网上发现您必须在以下位置增加 MaxFileHandles(我的值为 48):
BDE Administrator:
Configuration->System->INIT->MAXFILHANDLES
这是唯一的解决办法吗?或者还有另一个?
任何人都可以给我一个提示,或者在应用程序关闭时删除这些文件的提示吗?
正确编写和正确使用的D4程序不应该留下
.MB 文件以您描述的方式。
我强烈建议您按照我在下面描述的程序进行操作,这样您就可以满意
你自己在正常操作中不应遗留杂散的 .MB 文件; hopfeully,一旦你有了,就应该相当简单地找出他们在你的案例中落后的原因。
创建一个新的项目文件夹,在你的开发驱动器上命名为 D:\Test 并复制
现有 Paradox 数据库的文件放入其中。我使用了 Venues 数据库,其中
D7(我没有可用的早期版本)在 Delphi 的 Shared\Data 文件夹中。
它由数据文件Venues.DB、索引Venues.PX和备忘录文件Venues.MB组成。
如果 Venues 数据库没有附带 D4,请使用另一个。顺便说一句,重点
将数据库文件复制到新的项目文件夹是数据库相当
可能会在接下来的过程中受到损坏。
使用 BDE 配置程序,创建一个新的 Standard,Paradox 别名指向项目文件夹。
启动 D4 并创建一个包含 TDataBase、TQuery、TDataSource 和 TDBGrid 的新项目
显示 TQuery 的数据库。将 TQuery 的 SQL 属性 设置为
select * 来自场馆
重要:保存项目时,确保TDataBase的已连接属性
设置为 False,TQuery 的 Active 属性 也为 False。在 FormCreate 中插入代码
打开 Query1 的事件
在您的项目目录中打开 CMD window。
编译并运行程序。
在程序打开时执行
目录 *.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 事件中设置的异常处理程序
在关闭期间抑制不需要的异常。这种 "fast fix"
旨在隐藏问题而不发现并解决导致的问题
在D4时代相当普遍
无论如何,祝你好运!通过一些系统调试,希望你不需要它/
我正在开发一个 Delphi 4 应用程序(不要问我为什么,我已经知道它太旧了但我不得不这样做,解释这个更复杂,只是老板的要求)。
这个 Delphi 应用程序在执行时创建了很多 *.MB 文件(目前一切正常),它使用了很多 TQueries、TUpdatesSQL、TDataSource,所以我想这是正常的。但是当我关闭这个应用程序时,这些文件应该被删除(但没有),然后当我第二次(第三次、第四次等)打开这个应用程序时,它会创建越来越多的 *.MB 文件,最后以错误结束: "Too many open files. You may need to increase MAXFILEHANDLE limit in IDAPI configuration"
我刚刚在互联网上发现您必须在以下位置增加 MaxFileHandles(我的值为 48):
BDE Administrator:
Configuration->System->INIT->MAXFILHANDLES
这是唯一的解决办法吗?或者还有另一个? 任何人都可以给我一个提示,或者在应用程序关闭时删除这些文件的提示吗?
正确编写和正确使用的D4程序不应该留下 .MB 文件以您描述的方式。
我强烈建议您按照我在下面描述的程序进行操作,这样您就可以满意 你自己在正常操作中不应遗留杂散的 .MB 文件; hopfeully,一旦你有了,就应该相当简单地找出他们在你的案例中落后的原因。
创建一个新的项目文件夹,在你的开发驱动器上命名为 D:\Test 并复制 现有 Paradox 数据库的文件放入其中。我使用了 Venues 数据库,其中 D7(我没有可用的早期版本)在 Delphi 的 Shared\Data 文件夹中。 它由数据文件Venues.DB、索引Venues.PX和备忘录文件Venues.MB组成。 如果 Venues 数据库没有附带 D4,请使用另一个。顺便说一句,重点 将数据库文件复制到新的项目文件夹是数据库相当 可能会在接下来的过程中受到损坏。
使用 BDE 配置程序,创建一个新的 Standard,Paradox 别名指向项目文件夹。
启动 D4 并创建一个包含 TDataBase、TQuery、TDataSource 和 TDBGrid 的新项目 显示 TQuery 的数据库。将 TQuery 的 SQL 属性 设置为
select * 来自场馆
重要:保存项目时,确保TDataBase的已连接属性 设置为 False,TQuery 的 Active 属性 也为 False。在 FormCreate 中插入代码 打开 Query1 的事件
在您的项目目录中打开 CMD window。
编译并运行程序。
在程序打开时执行
目录 *.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 事件中设置的异常处理程序 在关闭期间抑制不需要的异常。这种 "fast fix" 旨在隐藏问题而不发现并解决导致的问题 在D4时代相当普遍
无论如何,祝你好运!通过一些系统调试,希望你不需要它/