Случайная ошибка при загрузке проекта в Delphi XE6

Время от времени, когда я загружаю проект в XE6 IDE, возникает следующая ошибка

Ошибка загрузки проекта при открытии проекта в delphi XE6

Эта ошибка приводит к тому, что компонент TZConnection удаляется из Datamodule по какой-то необъяснимой причине. Обратите внимание, что проект загружается без проблем уже много лет, и это происходит совершенно неожиданно.

Кто-нибудь видел это раньше и знает способ предотвратить это? Это также происходит с другими компонентами, не всегда с компонентом TZConnection, но в основном с ZConnection.

Как я уже сказал, это появляется случайно. Я мог закрыть проект A, открыть проект B, затем закрыть его и вернуться к проекту A и бац !, возникает ошибка.

Какие-нибудь подсказки? (обратите внимание, что это также происходило в Delphi 2007)


person Brendan    schedule 08.02.2016    source источник
comment
Обратите внимание, что вы можете запретить IDE удалить компонент TZConnection, нажав кнопку «Отмена». Если вы это сделаете, вы не сможете открыть форму в режиме дизайна, но, по крайней мере, вы ничего не потеряете.   -  person dummzeuch    schedule 09.02.2016


Ответы (3)


Библиотеки Zeos сами вызывают эту проблему.

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

Я написал сообщение в блоге, в котором показаны точные шаги здесь.

Ключ состоит в том, чтобы установить исполняемый файл, который будет запускаться для вашего пакета zeos, обязательно соберите их в конфигурации отладки, а затем нажмите кнопку «Выполнить» на панели инструментов IDE Delphi. Запустится второй экземпляр delphi. Откройте затронутую форму, но убедитесь, что вы используете отлаживаемый экземпляр IDE, а не тот, который в настоящее время выполняет отладку. Когда возникает исключение, которое заставляет ваш компонент удалять себя, вы сможете перейти в код пакета и увидеть проблему.

Я подозреваю, что это проблема пути DLL-ада. (Несколько копий Zeos или других основных BPL / DLL на вашем пути.)

person Warren P    schedule 09.02.2016

На самом деле это не кажется таким необъяснимым - это, вероятно, вызвано исключением, возникающим, когда DataModule (или какая-либо форма с компонентами, поддерживающими db, подключенными к нему через свойства), загружается в IDE (см. ниже). Вы пытались проверить, что где бы ни находились ваши файлы ZEOS .BPL, на вашем системном пути? Точно так же любые .BPL, от которых они зависят - см. Пункт «требует» в файлах .DPK для Zeos.

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

Таким образом, иногда, появляется ли такая проблема или нет, зависит от порядка, в котором IDE будет повторно открывать их - попробуйте закрыть проект только с открытым dm, а затем снова открыть его. Немного поэкспериментировав с тем, какие модули данных и формы открыты в среде IDE и в каком порядке, вы можете определить проблему. Если / когда у вас есть воспроизводимая последовательность шагов, которая может спровоцировать проблему, сообщите об этом авторам.

Достаточно надежный способ определить, вызвана ли проблема исключением при загрузке проекта, - запустить один экземпляр IDE внутри другого. Пока первый («внешний») экземпляр IDE имеет отладчик, установленный на «Прерывание языковых исключений», он должен иметь возможность перенаправить вас прямо к источнику исключения (при условии, что оно возникает, конечно), когда проект загружается вторым экземпляром. Конечно, может потребоваться несколько попыток, чтобы «поймать это с поличным», но когда вам это удается, это приносит огромное удовлетворение. Удачи!

person MartynA    schedule 08.02.2016

В отличие от MartynA, я сомневаюсь, что это было вызвано исключением.

Скорее всего, такие проблемы будут вызваны слишком длинным windows path environment variable.

К сожалению, до сих пор многие поставщики компонентов и даже некоторые программы изменяют "переменную среды пути Windows", чтобы сделать свои файлы доступными для других программ.

И когда windows path environment variable не может предоставить достаточную информацию, окна будут пытаться найти файлы в системном каталоге по умолчанию, который является C:\Windows\System32

Поэтому я настоятельно рекомендую проверить windows path environment variable, чтобы проверить его длину.

Самый простой способ сделать это - просто запустить command prompt и ввести директиву path или, возможно, path >> D:\path.log, чтобы экспортировать информацию о переменной среды пути в файл для облегчения чтения в случае, если он длинный.

РЕДАКТИРОВАТЬ: Кстати, я только что проверил свою переменную среды пути и вижу, что мне придется выполнить некоторую очистку, потому что она содержит записи для местоположений файлов Delphi XE8 и Delphi XE 10 Seattle, даже если я удалил Delphi XE8 со своего компьютера. Не говоря уже о некоторых записях из некоторых программ, которые я удалил некоторое время назад.

person SilverWarior    schedule 08.02.2016
comment
Не хочу спорить (потому что усечение пути, безусловно, может быть связано с основной причиной проблемы), но что еще, кроме возникновения исключения, может привести к исчезновению компонента из модуля данных при открытии проекта? И если это исключение, вызывающее исчезновение, необрезание пути может обойти проблему, но не решит ее ... - person MartynA; 09.02.2016
comment
Удаление записей пути для всех версий Delphi - действительно самый разумный подход - person David Heffernan; 09.02.2016
comment
@MartynA Не исключение, возникшее в одном из компонентов, скорее приведет к необработанному сообщению об исключении, а не помешает Delphi найти некоторые пакеты компонентов. Я имею в виду, что если какое-либо исключение, возникшее в каком-либо компоненте времени разработки, могло привести к этому, то с Delphi что-то действительно не так. - person SilverWarior; 09.02.2016
comment
Может быть, но я видел, как это происходило несколько раз за эти годы. Мне, в последние годы, это неизменно сторонние компоненты, которые делают это, хотя в iirc в эпоху D5 была общая периодическая проблема с модулями данных, но обычно это проявлялось как потеря свойств db -ware, которые были установлены в OI. - person MartynA; 09.02.2016