【问题标题】:How can I make sure that BDE *.MB files are being deleted once I finish my Delphi app?完成 Delphi 应用程序后,如何确保删除 BDE *.MB 文件?
【发布时间】:2020-03-06 19:12:17
【问题描述】:

我正在开发一个 Delphi 4 应用程序(不要问我为什么,我已经知道它太老了但我不得不这样做,解释起来更复杂,只是老板的要求)。

这个 Delphi 应用程序在执行时创建了很多 *.MB 文件(现在一切都很好),它使用了很多 TQueries、TUpdatesSQL、TDataSource,所以我想这很正常。但是当我关闭这个应用程序时,这些文件应该被删除(但没有),然后当我第二次打开这个应用程序(第三次、第四次等)时,它会创建越来越多的 *.MB 文件,最后以错误结束: “打开的文件太多。您可能需要在 IDAPI 配置中增加 MAXFILEHANDLE 限制”

我刚刚在互联网上发现您必须在以下位置增加 MaxFileHandles(我的值为 48):

 BDE Administrator:
 Configuration->System->INIT->MAXFILHANDLES

这是唯一的解决方案吗?或者还有一个? 任何人都可以给我一个提示,或者在应用程序关闭时删除这些文件的提示吗?

【问题讨论】:

  • “应该删除(但没有)”中的“(但没有)”是什么意思?在 BDE 配置中增加文件句柄的数量只会延迟问题的发生,而不是解决问题。确保您的应用在关闭之前关闭所有打开的数据集(TQueries 和 TTables)(并确保在您的项目打开时 IDE 中没有打开的数据集)。然后,如果你真的想删除数据文件,你可以使用 SysUtils 单元上的 DeleteFile 函数。
  • 谢谢你的回复,对不起,我的英文不好,我只想说那些文件应该删除,但他们没有
  • 除非您采取特定步骤删除它们,否则它们不会被删除。仅关闭 TTable 或 TQuery 不会删除磁盘上的数据文件。顺便说一句,请参阅在线帮助中的 TTable.DeleteTable 和 .DeleteIndex。
  • 您可以编写代码在您的应用关闭时删除它们。更改文件句柄的最大数量并不能解决问题,就像在仪表板上贴一块胶带以隐藏 检查引擎 灯一样可以防止您崩溃。

标签: delphi bde


【解决方案1】:

正确编写和正确使用的 D4 程序不应落后 .MB 文件以您描述的方式。

我强烈建议您遵循我在下面描述的程序,以便您满足 您自己不应该在正常操作中留下杂散的 .MB 文件; hopfeully,一旦你有了,就应该很简单地找出他们为什么在你的案子中被抛在后面。

  1. 创建一个新的项目文件夹,在您的开发驱动器上将其命名为 D:\Test 并复制 现有 Paradox 数据库的文件。我使用了场地数据库,其中 D7(我没有可用的早期版本)位于 Delphi 的 Shared\Data 文件夹中。 它由数据文件 Venues.DB、索引 Venues.PX 和备忘录文件 Venues.MB 组成。 如果 D4 不附带场地数据库,请使用另一个。顺便说一句,重点 将数据库文件复制到新的项目文件夹是数据库相当 在接下来的过程中可能会受到损坏。

  2. 使用 BDE 配置程序,创建一个新的 Standard、Paradox 别名指向项目文件夹。

  3. 启动 D4 并创建一个包含 TDataBase、TQuery、TDataSource 和 TDBGrid 的新项目 显示 TQuery 的数据库。将 TQuery 的 SQL 属性设置为

    从场地中选择 *

  4. 重要提示:保存项目时,请确保 TDataBase 的 Connected 属性 设置为 False,TQuery 的 Active 属性也为 False。在 FormCreate 中插入代码 打开 Query1 的事件

  5. 在您的项目目录中打开一个 CMD 窗口。

  6. 编译并运行程序。

  7. 当程序打开时做一个

    目录 *.mb

    在 CMD 提示符下。

    你应该看到

Venues.MB

还有一个文件名像

_QSQ1.MB

这是 BDE 为 Query1 打开的临时 .MB 文件。

  1. 关闭程序并重复步骤 7。

你现在应该只能看到

Venues.MB

列出是因为 BDE 代码已关闭并删除了临时 .MB 文件。那 是假定会发生的事情。

  1. 再次运行程序。这一次,在它的表单打开后,按 Ctrl-F2 重置它(强制它关闭而不执行其正常的关闭代码。

  2. 重复第 7 步,您应该会发现有两个 .MB 文件

Venues.MB

以及名称为

的临时文件

_QSQ1.MB

因为 BDE 代码没有机会删除临时 .MB 文件

  1. 如果您不断重复步骤 9 和 10,您会发现一个额外的 .MB 文件 被抛在后面(名字后面的数字越来越多), 这就是为什么 BDE 最终会抱怨您的文件句柄已用完。

  2. 恐怕你的任务是找出发生这种情况的原因:

    • 这可能只是因为您习惯使用 Ctrl-F2 来终止 程序,在这种情况下解决方案是显而易见的,不要!

    • 否则程序关闭时一定会出现问题。它可以是任何 许多事情之一,但只有您可以看到您的代码。我会看什么 for 类似于在 FormClose 事件中设置的异常处理程序 在关机期间抑制不需要的异常。这种“快速修复” 旨在隐藏问题而不发现和解决导致的问题 这在 D4 时代相当普遍。

无论如何,祝你好运!稍作系统调试,希望你不需要/

【讨论】:

  • 嘿马丁,谢谢你,我只是作为有史以来最耐心的人进行了调试(程序真的很复杂),我刚刚发现有很多实例没有.free跨度>
  • 太好了,很高兴你修好了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多