【问题标题】:Random error when loading project into Delphi XE6将项目加载到 Delphi XE6 时出现随机错误
【发布时间】:2016-05-18 18:05:39
【问题描述】:

有时我在XE6 IDE中加载项目时,会出现以下错误

此错误导致 TZConnection 组件由于某些莫名其妙的原因从数据模块中删除。请注意,该项目已经加载了很长时间而没有出现问题,而且出乎意料,这种情况发生了。

有没有人见过这种情况并知道阻止它发生的方法? 它也发生在其他组件中,并不总是 TZConnection 组件,但主要是 ZConnection。

就像我之前说的,这是随机出现的。我可以关闭项目 A,打开项目 B,然后将其关闭并返回到项目 A 并砰!发生错误。

有什么线索吗? (请注意,这也曾经出现在 Delphi 2007 中)

【问题讨论】:

  • 请注意,您可以通过按取消来阻止 IDE 删除 TZConnection 组件。如果这样做,您将无法在设计模式下打开表单,但至少不会丢失任何内容。

标签: delphi delphi-xe6 zeos datamodule


【解决方案1】:

实际上,这听起来并没有 莫名其妙 - 这可能是由于 DataModule(或通过属性连接到它的具有 db-aware 组件的某种表单)正在加载到IDE(见下文)。您是否尝试过检查您的 ZEOS .BPL 文件所在的位置是否在您的系统路径上?同样,它们所依赖的任何 .BPL - 请参阅 Zeos 的 .DPK 文件中的“requires”子句。

这类问题经常出现在易碎的 DB 组件中,可能比其他类型的组件更频繁,因为 db 组件更频繁地涉及数据模块和表单之间的链接,例如当表单上的 db-aware 组件连接到数据模块上的其他组件时。

因此,有时,是否出现此类问题取决于 IDE 重新打开它们的顺序 - 尝试仅在 dm 打开的情况下关闭项目,然后重新打开它。对在 IDE 中打开哪些数据模块和表单以及以何种顺序进行一些试验可以帮助您确定问题。如果/当您有一系列可重现的步骤来引发问题时,请将其报告给作者。

确定问题是否由项目加载时的异常引起的一种相当可靠的方法是在另一个实例中运行 IDE 的一个实例。只要 IDE 的第一个(“外部”)实例将调试器设置为“中断语言异常”,它就应该能够在项目执行时直接将您带到异常的来源(当然,假设它发生了)由第二个实例加载。当然,可能需要花一些时间才能“抓住它”,但当你设法做到时,它会非常令人满意。祝你好运!

【讨论】:

    【解决方案2】:

    与 MartynA 不同,我怀疑这是否是由异常引起的。

    我更可能认为这些问题是由windows path environment variable 太长引起的。

    不幸的是,仍然有许多组件供应商甚至一些程序修改“windows路径环境变量”以使其他程序可以访问他们自己的文件。

    windows path environment variable 无法提供足够的信息时,窗口会尝试在默认系统目录C:\Windows\System32 中查找文件

    所以我强烈建议检查windows path environment variable 以检查其长度。

    最简单的方法是启动 command prompt 并输入 path 指令或 path >> D:\path.log 以将路径环境变量信息导出到文件中,以便在文件较长时更易于阅读。

    编辑:顺便说一句,我刚刚检查了我的路径环境变量,我发现我必须进行一些清理,因为它包含 Delphi XE8 和 Delphi XE 10 Seattle 文件位置的条目,即使我已经从我的计算机中删除了 Delphi XE8。更不用说我很久以前删除的某些程序中的一些条目了。

    【讨论】:

    • 没有争论的意思(因为路径截断可能肯定涉及问题的潜在原因)但是除了发生异常之外还有什么可能导致组件从打开项目时的数据模块?如果它是导致消失的异常,取消截断路径可能会解决问题,但不会解决它......
    • 删除所有版本的 Delphi 的路径条目确实是最明智的方法
    • @MartynA 不会在其中一个组件中引发异常,而是导致“未处理的异常消息”而不是阻止 Delphi 查找某些组件包。我的意思是,如果任何设计时组件中引发的任何异常都可能导致这种情况,那么 Delphi 确实有问题。
    • 也许吧,但这些年来我已经看到这种情况发生了好几次。我,近年来,这样做的总是第 3 方组件,虽然 iirc 在 D5 时代存在数据模块的普遍间歇性问题,但它通常表现为 OI 中设置的 db-ware 属性丢失。
    【解决方案3】:

    Zeos 库本身就是造成这个问题的原因。

    要了解原因并修复它,请使用 Delphi 启动 Delphi 的第二个实例,然后直接调试问题。

    我写了一篇博文,显示了确切的步骤here

    关键是为你的 zeos 包设置将要运行的可执行文件,确保在调试配置中构建它们,然后单击 Delphi IDE 工具栏上的运行按钮。第二个 delphi 实例将启动。打开受影响的表单,但确保使用的是正在调试的 IDE 实例,而不是当前正在调试的那个,当发生导致组件自行删除的异常时,您将能够进入打包代码,看看问题。

    我怀疑存在 DLL 地狱路径问题。 (路径中有多个 Zeos 或其他核心 BPL/DLL。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多