问题
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