为什么一个模块在另一个模块加载之前无法保存?

7
我所工作的大多数单元都依赖于数据模块。我遇到的最烦人的问题之一是一个错误消息,告诉我:
“模块X引用了另一个模块,在加载模块Y之前无法保存。”
现在,我确信在尝试写入根流时,CheckNoFixups会引发此错误,并且无法保存实际上是文本文件(希望这不会导致灾难性故障,在仍然无法保存我的工作的情况下,我必须重新启动IDE)。但是,有什么好的理由呢?
为什么我不能点击保存按钮,而不打开包含各种函数和对象的其他文本文件,就像任何其他单元一样?数据模块有什么特别之处,意味着我不能保存我正在工作的源码,直到它被打开,为什么使用子句中的其他45个单元不重要,必须打开它们?
编辑:它是Delphi 2007
数据模块的声明如下:
unit DataMD;

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

我得到了另一个问题,就在我得到“模块x引用模块y”的那天。请参考此处可能的解决方案:https://dev59.com/sUzSa4cB1Zd3GeqPm3mz - Gabriel
我真的很讨厌 Delphi 假装是一个高效的开发环境,却让你花费数小时来解决这些烦人的错误。 - Gabriel
4个回答

1
如果DataModule不是已打开项目的一部分,则引用DataModule的表单中的数据感知对象无法验证其引用,因此我认为会出现此消息。
我只在将旧项目移植到新的Delphi版本或迁移到新的数据库组件集时才看到过此消息。在正常情况下,我没有遇到过这个消息。
在早期版本中,我没有看到这个消息,表单/单元可以保存,但在dfm中的引用被神奇地删除了。

听起来很有趣,我曾经在旧项目中遇到过同样的问题(引用消失),你是如何解决的? - Harriv
1
@Harriv:我找到的唯一方法是在代码中分配这些引用,而不是在设计时。那种方式一直有效,其他任何方式都行不通。如果你使用某些源代码控制工具,在提交前应该始终检查 dfm 文件的差异,这样当问题发生时,至少你可以发现它,并轻松地通过从文件的上一个版本中复制丢失的行来修复它。这也不是理想的解决方案... - dummzeuch

1

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

我在数据模块上有一个 imagelist,可用于整个应用程序。如果有语法错误,在编译之后会发生这种情况。IDE 打开 (pas) 文件,我可以更正错误。

但是尝试保存文件会显示该消息(“模块 'XXX' 链接到当前项目中找不到的模块 'YYY'。是否希望删除 / 重定向到另一个模块的链接?”)。XXX 是文件本身,YYY 是数据模块。数据模块已包含在项目中,回答“是”会删除 dfm 文件中的所有链接。

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

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


0

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

还要确保DataModule dfm资源与单元名称相同。


0
模块X引用了另一个模块Y,因此在加载模块Y之前无法保存模块X。
请查看X.dfm(或X.fmx)中是否有“Y”条目。如何处理这些条目,由您自行决定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接