我工作的大部分单元都依赖于数据模块。我遇到的最令人讨厌的事情之一是一条错误消息告诉我
模块X引用另一个模块,在加载模块Y之前无法保存。
现在,我确信CheckNoFixups
在尝试WriteRootStream
时引发此错误有一个很好的理由,并且无法保存文本文件的实际效果(希望这不是'然后是Catastrophic Failure
,然后我必须重新启动IDE,同时仍然无法保存我的工作。)但是有什么好理由?
为什么我不能单击保存而不打开包含各种功能和对象的任何文本文件,就像任何其他单元一样?关于DataModule有什么特别之处,这意味着我无法保存我正在处理的源,直到它打开为止,为什么use子句中的其他45个单元不是那么重要,它们必须是开放的?
修改 这是Delphi 2007
DataModule声明是:
unit DataMD;
TRepDataMod = class(TDataModule)
...
var
RepDataMod: TRepDataMod;
答案 0 :(得分:1)
如果DataModule不是已打开项目的一部分,那么表单中引用DataModule的数据识别对象无法验证其引用,因此我认为该消息会出现。
当我将旧项目移植到新的Delphi版本或迁移到一组新的数据库组件时,我才看到此消息。在正常情况下,我没有遇到过这条消息。
在早期版本中,我没有看到该消息,并且可以保存表单/单元,但是你的dfm中的引用被神奇地删除了。
答案 1 :(得分:1)
我有同样的问题(Delphi 7)。
我在数据模块上有一个图像列表,可用于整个应用程序。如果存在语法错误,则在编译之后发生。 IDE打开(pas)文件,我可以更正错误。
但是尝试保存文件会显示该消息(“模块'XXX'链接到模块'YYY',这在当前项目中找不到。你要删除/重定向链接到另一个模块吗?”)。 XXX是文件本身,YYY是数据模块。数据模块 包含在项目中,对该问题回答“是”将删除dfm文件中的所有链接。
所以唯一的解决方案是按“否”,这基本上保存了pas文件并关闭了文件 - 这次按“No”来询问是否应该保存文件(pas实际上已经保存了)
我已经尝试了各种解决方法,但仍然在苦苦挣扎。
答案 2 :(得分:1)
模块X引用另一个模块,在加载模块Y之前无法保存。
只需查看X.dfm(X.fmx)中的“Y”条目。如何处理它们,这是你的选择。
答案 3 :(得分:0)
确保DataModule是项目的一部分。仅仅包含在搜索路径上或手动输入dpr文件是不够的。通过IDE并将DataModule添加到项目中。
还要确保DataModule dfm-resource与该单元具有相同的名称。