2010-03-10 2 views
7

Большинство модулей, над которыми я работаю, полагаются на модуль данных. Одна из самых неприятных вещей, которые я нахожу, - это сообщение об ошибке, сообщающее мнеПочему модуль не может быть недоступен до загрузки другого модуля?

Модуль X ссылается на другой модуль и не может быть сохранен до загрузки модуля Y.

Теперь, я уверен, что есть очень хорошая причина, почему CheckNoFixups поднимает эту ошибку при попытке WriteRootStream, и не сохранить то, что есть в действительности текстовый файл (и, надеюсь, это не следует Catastrophic Failure где Затем я должен перезапустить среду IDE, но не могу сохранить мою работу.) Но какая хорошая причина?

Почему я не могу нажать «Сохранить», не открывая текстовый файл, содержащий различные функции и объекты, как и любой другой блок? что так особенное в DataModule, что означает, что я не могу сохранить исходный код, над которым я работаю, пока он не будет открыт, почему не так важно, чтобы 45 других единиц в предложении использования так важно, чтобы они были открыты?

EDIT: Это Delphi 2007

Декларация DataModule является:

unit DataMD; 

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

ответ

1

Если DataModule не является частью открытого проекта данные осведомленные объекты в вашей форме, что ссылка DataModule, не может проверить их ссылку, и поэтому я думаю, что сообщение появляется.

Я только видел это сообщение, когда переносил старый проект в новую версию Delphi или переносился на новый набор компонентов базы данных. В обычных обстоятельствах я не сталкивался с этим сообщением.

В более ранних версиях я не видел сообщения, и форма/единица могла быть сохранена, но ссылки, которые были в вашем dfm, были уничтожены с помощью волшебства.

+0

Звучит интересно, я видел ту же проблему со старыми проектами (disappering references), как вы ее исправить? – Harriv

+1

@Harriv: Единственный способ, которым я нашел, - назначить тезисы в коде, а не во время разработки. То, что всегда работало, ничего другого не делало. Если вы используете какой-либо источник управления, вы должны всегда проверять diff dfm-файла перед фиксацией, так что по крайней мере вы можете обнаружить проблему, когда это происходит, и можете легко исправить ее, скопировав потерянные строки из предыдущей версии файла. Не идеальное решение ... – dummzeuch

1

У меня такая же проблема (Delphi 7).

У меня есть мейджолог на datamodule для использования по всему приложению. после компиляция, если есть синтаксическая ошибка. IDE открывает файл (pas), и я могу исправить ошибку.

Но попытка сохранить файл показывает это сообщение («Module 'XXX» ссылается на модуль «YYY», который не может быть найден в текущем проекте. Вы хотите удалить/перенаправить ссылки на другой модуль? »). XXX - это сам файл, а YYY - это датамодуль. Датамодуль - это, включенный в проект и отвечая «Да» на этот вопрос, удалит все ссылки в файле dfm.

Таким образом, единственное решение - «Нет», которое в основном сохраняет файл pas и закрывает файл в это время, нажимая «Нет» на вопрос, должен ли файл быть сохранен (папка фактически сохранена).

У меня есть все попытки проделать различные обходные пути, но все равно придется бороться.

0

Модуль X ссылается на другой модуль и не может быть сохранен до загрузки модуля Y.

Просто просмотрите X.dfm (X.fmx) для записей «Y».Что с ними делать, это ваш выбор.

0

Убедитесь, что DataModule является частью проекта. Недостаточно просто включить в путь поиска или войти в dpr-файл вручную. Пройдите через IDE и добавьте DataModule в проект.

Также убедитесь, что ресурс dfm DataModule имеет то же имя, что и устройство.

Смежные вопросы