Страница 1 из 3
Добавлено: 05 Июль 2004, 15:33
Гость
Доброе утро/день/вечер.
Прошу совета у многоуважаемого сообщества...
Cитуация:
Есть .dct словарь: ~500 таблиц с ~10000 полями (в сумме

.
Есть bdic.app (Target - W32 bit, Debug OFF) c этим словарем. Установлены флажки: "Объявить все файлы словаря"
Проблема:
При компиляции возникает ошибка:
(bdic.map 1,1) Link Error: Too many segdef in file: A,4000
с messageBox-ом следующего содержания:
Error(6): cif$fileclose Неверный дескриптор.
<OK>
При удалении любого одного файла или ключа в нем - ошибка исчезает. При добавлении - появляется.
Вопрос:
1. Можно ли это победить ограничение в самом кларионе? Как ?
2. Если нельзя, то кто как решал подобные проблемы. Разбивка объявлений файлов на две аппы?
Окружение: C5.5h, ШВС
Alex Kukushkin <
alex@altsoft.ru>
Написал: ClaList(2)
Добавлено: 05 Июль 2004, 17:33
Гость
Я подобную проблему решал линковкой в DLL-моде
Роман Ломасов <
velomot@sucden.ru>
Ты гигант!
1. Можно ли это победить ограничение в самом кларионе? Как ?
Поскольку это ошибка линкера, то неочевидно, что поможет разбиение на dll-ки, но можно попробовать. В частности, попробовать сделать две DLL-ки с глобалами, раскидав файлы между ними.
2. Если нельзя, то кто как решал подобные проблемы. Разбивка объявлений файлов на две аппы?
А нужны ли все 500 таблиц в одном приложении. И если это EXE, то зачем "Объявить все файлы словаря" ? Эта птичка ставится когда собирается dll глобальных данных, которая не использует ни одного файла, а должна содержать все объявления.
Наверняка спасет разбиение на несколько приложений, при этом словарь вполне м.б. общий, не надо только "Объявить все файлы словаря".
WBR,
Nick Tsigouro mailto:
nick@arsis.ru
Написал: ClaList(2)
Добавлено: 06 Июль 2004, 12:47
Гость
Именно dll и собирается и именно для того, чтобы объявить все файлы для большой системы.
Спасибо за помощь. Будем разбивать описание на две апп-ы.
С уважением, Александр Кукушкин.
Написал: ClaList(2)
Big .dct
Добавлено: 02 Ноябрь 2022, 16:49
harry
Добрый день!
Столкнулся с такой же ошибкой Too many segdef. (Clarion 6.1)
Так же имеется единый словарь с большим количеством таблиц и базовая dll , в которой генерится описание всех файлов. Не совсем понял, как разбить на две app. Выставлять индивидуально флажок "Generate File declaration" - немыслимо. Или есть какой то более простой способ решения ? Может, кто то уже решал аналогичную проблему?
Big .dct
Добавлено: 02 Ноябрь 2022, 17:21
RaFaeL
Самый простой способ - вычистить неиспользуемые поля и таблицы. Особенно алиасы, часто их добавляют по несколько на таблицу, при этом часто можно и обойтись. Наткнулись на это ограничение лет 10 назад, и все еще "держимся" с помощью чистки )
Big .dct
Добавлено: 02 Ноябрь 2022, 17:45
harry
Спасибо за совет! Попробуем, но боюсь, что этого не на долго хватит )
Big .dct
Добавлено: 02 Ноябрь 2022, 18:24
finsoftrz
У меня когда-то было подобное, только не для самих деклараций таблиц, а при генерации слоя процедур вокруг них. Решалось разбиением на несколько файлов на уровне шаблонов. Скорее всего, с декларациями аналогично.
Big .dct
Добавлено: 02 Ноябрь 2022, 18:37
finsoftrz
Хотя по декларациям не уверен, что проскочит. Можно провести эксперимент, разделить на 2 файла и приинклудить. Ошибка может выдаваться не на сами декларации, а на обслуживающие процедуры, типа ri:update и ri:delete (или аналоги в абц). Можно их попробовать разнести на разные файлы.
Big .dct
Добавлено: 02 Ноябрь 2022, 19:41
Игорь Столяров
finsoftrz писал(а): 02 Ноябрь 2022, 18:37
а на обслуживающие процедуры, типа ri:update и ri:delete (или аналоги в абц)
Можно перенести часть описаний таблиц из словаря в Embed-ы, если они не используются в классах ABC.
Там же рассмотреть возможность динамического создания рабочих таблиц через DFD.
Часто в SQL приложениях импортируют всё подряд и большая часть таблиц нужна только для SQL запрсов.
Big .dct
Добавлено: 03 Ноябрь 2022, 9:57
harry
finsoftrz писал(а): 02 Ноябрь 2022, 18:37
Ошибка может выдаваться не на сами декларации, а на обслуживающие процедуры, типа ri:update и ri:delete (или аналоги в абц). Можно их попробовать разнести на разные файлы
У нас ABC и Clarion, вроде, сам разбивает описание таких процедур по файлам типа *BC?.clw по шаблону. Или надо их как то еще мельче разбить ?
Удаление нескольких таблиц из словаря решает эту проблему, но боюсь, что это очень временно.
И непонятно, это ограничение Clarion на количество таблиц в словаре или на объем текста в clw - файле ?
Все эти файлы примерно одного размера ~ 70 Kb, только основной файл PROGRAM ~900 Kb
Игорь Столяров писал(а): 02 Ноябрь 2022, 19:41
Можно перенести часть описаний таблиц из словаря в Embed-ы, если они не используются в классах ABC
Почти все таблицы словаря используются в схемах APP, да и сейчас очень сложно провести ревизию такого количества файлов. Плюс не хотелось кардинально ничего менять в программе. Слишком много в ней всего )
Вот, на всякий случай, скрин ошибки
Big .dct
Добавлено: 03 Ноябрь 2022, 10:24
Игорь Столяров
harry писал(а): 03 Ноябрь 2022, 9:57
на объем текста в clw - файле
Больше похоже на превышение размера текста в файле.
Я бы "перевёл" ошибку как "to many segments defined in file", т.е. "многие сегменты в файле".
Аналогичная проблема есть и для размера кода в Source, она обходится через Routine.
Может быть это ошибка на размер MAP файла ? Попробуйте отключить его создание в настройках проекта.
Дальше - проверить сборку в C63. Дальше - проверить сборку в C11 с RunTime С63 ...
Big .dct
Добавлено: 03 Ноябрь 2022, 10:42
harry
Игорь Столяров писал(а): 03 Ноябрь 2022, 10:24
Дальше - проверить сборку в C63. Дальше - проверить сборку в C11 с RunTime С63 ...
На всех версия Clarion вплоть до 11.1 дает ошибку
Big .dct
Добавлено: 03 Ноябрь 2022, 10:47
Игорь Столяров
А вот эту цифру не пробовали подкручивать ?
Как-то она подозрительно похожа на цифру в ошибке ...
Big .dct
Добавлено: 03 Ноябрь 2022, 10:56
harry
Игорь Столяров писал(а): 03 Ноябрь 2022, 10:47
А вот эту цифру не пробовали подкручивать ?
Тоже обратил на нее внимание, но не она ( Выставил 50 (64 не дает) и точно такая же ошибка.
Отключение создания MAP тоже не помогает
Big .dct
Добавлено: 03 Ноябрь 2022, 11:03
Игорь Столяров
А реальный размер файла STODECL.MAP какой получается при ошибке ?
И какой при сборке "работающего" APP ? Есть связь ?