【问题标题】:Why would a module be unsavable until another module is loaded?为什么一个模块在加载另一个模块之前无法保存?
【发布时间】:2010-03-10 10:34:13
【问题描述】:

我工作的大多数单元都依赖于数据模块。我遇到的最烦人的事情之一是一条错误消息告诉我

模块 X 引用了另一个模块,并且在模块 Y 加载之前无法保存。

现在,我确信CheckNoFixups 在尝试WriteRootStream 时会引发此错误,并且无法将有效的内容保存为文本文件(希望这不是@ 987654324@ 然后我必须重新启动 IDE,但仍然无法保存我的工作。)但是有什么好的理由呢?

为什么我不能点击保存而不打开包含各种功能和对象的文本文件,就像任何其他单元一样? DataModule 有什么特别之处,这意味着我无法保存我正在处理的源代码,直到它打开,为什么使用子句中的 45 个其他单元不是那么重要,它们必须打开?

编辑: 这是德尔福 2007

DataModule 的声明是:

unit DataMD;

TRepDataMod = class(TDataModule)
...
var
  RepDataMod: TRepDataMod;

【问题讨论】:

  • 在我得到这个“模块 x 引用模块 y”的那天我遇到了其他问题。请参阅此处以获取可能的修复:stackoverflow.com/questions/2416127/…
  • 我真的很讨厌 Delphi 如何假装是一个高效的环境,但它却让您因这些烦人的错误而浪费数小时。

标签: delphi datamodule


【解决方案1】:

如果 DataModule 不是打开的项目的一部分,则表单中引用 DataModule 的数据感知对象无法验证它们的引用,我认为因此会出现消息。

我只在将旧项目移植到新的 Delphi 版本或迁移到一组新的数据库组件时看到此消息。在正常情况下我没有遇到这个消息。

在早期版本中,我没有看到该消息,并且可以保存表单/单元,但是您的 dfm 中的引用被神奇地删除了。

【讨论】:

  • 听起来很有趣,我在旧项目中看到了同样的问题(引用消失),你如何解决它?
  • @Harriv:我发现的唯一方法是在代码中而不是在设计时分配这些引用。这总是奏效,其他任何东西都没有。如果您正在使用某些源代码控制,则应始终在提交之前检查 dfm 文件的差异,这样至少您可以在问题发生时发现问题,并且可以通过从文件的先前版本复制丢失的行来轻松修复它。也不是理想的解决方案...
【解决方案2】:

我有同样的问题(Delphi 7)。

我在数据模块上有一个图像列表,可在整个应用程序中使用。如果有语法错误,它会发生在编译之后。 IDE 打开 (pas) 文件,我可以更正错误。

但尝试保存文件会显示该消息(“模块‘XXX’链接到模块‘YYY’,在当前项目中找不到。你想删除/重定向到另一个模块的链接吗?”)。 XXX 是文件本身,YYY 是数据模块。数据模块 包含在项目中并且对该问题回答“是”将删除 dfm 文件中的所有链接。

所以唯一的解决方案是按“否”,这基本上会保存 pas 文件并关闭文件 - 这次按“否”来回答是否应该保存文件的问题(实际上已经保存了 pas) .

我已经尝试了各种解决方法,但仍在苦苦挣扎。

【讨论】:

    【解决方案3】:

    模块 X 引用了另一个模块,并且在模块 Y 加载之前无法保存。

    只需查看 X.dfm (X.fmx) 中的“Y”条目。如何处理它们,这是你的选择。

    【讨论】:

      【解决方案4】:

      确保 DataModule 是项目的一部分。仅仅包含在搜索路径中或手动输入 dpr 文件是不够的。通过 IDE 并将 DataModule 添加到项目中。

      还要确保 DataModule dfm-resource 与单元同名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-15
        • 1970-01-01
        • 2014-01-12
        • 2019-08-23
        • 1970-01-01
        • 2019-08-08
        相关资源
        最近更新 更多