Why would a module be unsavable until another module is loaded?

流过昼夜 提交于 2020-06-24 12:36:14

问题


Most of the units I work on rely on a Data Module. One of the most annoying things I come accross is an error message telling me

Module X references another module and cannot be saved until Module Y is loaded.

Now, I'm sure there is a very good reason why CheckNoFixups raises this error while trying to WriteRootStream, and fails to save what is in effect a Text file (and hopefully this isn't followed by Catastrophic Failure where I must then restart the IDE while still unable to save my work.) but what is the good reason?

Why am I unable to click save without opening anothing text file containing various functions and objects much like any other unit? whats so special about a DataModule that means I can't save the source I'm working on until it's open, why aren't the 45 other units in the uses clause so important they must be open?

EDIT: It's Delphi 2007

the Declaration of the DataModule is :

unit DataMD;

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

回答1:


If the DataModule is not part of the opened project the data aware objects in your form that reference the DataModule, cannot verify their reference and I think therefore the message comes up.

I only seen this message when I was porting an older project to a new Delphi version or were migrating to a new set of database components. In normal circumstances I haven't encountered this message.

In earlier versions I haven't seen the message and the form/unit could be saved, but the references that were in your dfm were magicly deleted.




回答2:


I have the same issue (Delphi 7).

I have an imagelist on a datamodule for usage throughout the whole application. It happens after a compile, if there is an syntax error. The IDE opens the (pas) file and I can correct the error.

But trying to save the file shows that message ("Module 'XXX' links to module 'YYY' which cannot be found in the current project. Do you whish to remove/redirect the links to another module?"). XXX is the file itself and YYY is the datamodule. The datamodule is included in the project and answering "Yes" to that question would remove all links in the dfm file.

So the only solution is pressing "No", which basically saves the pas file and close the file in the - this time pressing "No" to the question if the file should be saved (the pas is in fact already saved).

I have allready tried various workarounds butstill struggling.




回答3:


Module X references another module and cannot be saved until Module Y is loaded.

Just look over X.dfm (X.fmx) for "Y" entries. What to do with them, it's your choise.




回答4:


Make sure DataModule is part of the project. Not enough just to include on search-path or enter into dpr-file manually. Go through IDE and add the DataModule to the project.

Also make sure the DataModule dfm-resource has the same name as the unit.



来源:https://stackoverflow.com/questions/2416127/why-would-a-module-be-unsavable-until-another-module-is-loaded

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!