Big .dct

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Гость

Сообщение Гость »

Доброе утро/день/вечер.

Прошу совета у многоуважаемого сообщества...

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)
Гость

Сообщение Гость »

Я подобную проблему решал линковкой в DLL-моде

Роман Ломасов <velomot@sucden.ru>

Ты гигант!
1. Можно ли это победить ограничение в самом кларионе? Как ?
Поскольку это ошибка линкера, то неочевидно, что поможет разбиение на dll-ки, но можно попробовать. В частности, попробовать сделать две DLL-ки с глобалами, раскидав файлы между ними.
2. Если нельзя, то кто как решал подобные проблемы. Разбивка объявлений файлов на две аппы?
А нужны ли все 500 таблиц в одном приложении. И если это EXE, то зачем "Объявить все файлы словаря" ? Эта птичка ставится когда собирается dll глобальных данных, которая не использует ни одного файла, а должна содержать все объявления.
Наверняка спасет разбиение на несколько приложений, при этом словарь вполне м.б. общий, не надо только "Объявить все файлы словаря".

WBR, Nick Tsigouro mailto:nick@arsis.ru
Написал: ClaList(2)
Гость

Сообщение Гость »

Именно dll и собирается и именно для того, чтобы объявить все файлы для большой системы.

Спасибо за помощь. Будем разбивать описание на две апп-ы.

С уважением, Александр Кукушкин.
Написал: ClaList(2)
harry
Бывалый
Сообщения: 69
Зарегистрирован: 24 Февраль 2015, 14:16
Поблагодарили: 3 раза

Big .dct

Сообщение harry »

Добрый день!
Столкнулся с такой же ошибкой Too many segdef. (Clarion 6.1)
Так же имеется единый словарь с большим количеством таблиц и базовая dll , в которой генерится описание всех файлов. Не совсем понял, как разбить на две app. Выставлять индивидуально флажок "Generate File declaration" - немыслимо. Или есть какой то более простой способ решения ? Может, кто то уже решал аналогичную проблему?
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Big .dct

Сообщение RaFaeL »

Самый простой способ - вычистить неиспользуемые поля и таблицы. Особенно алиасы, часто их добавляют по несколько на таблицу, при этом часто можно и обойтись. Наткнулись на это ограничение лет 10 назад, и все еще "держимся" с помощью чистки )
harry
Бывалый
Сообщения: 69
Зарегистрирован: 24 Февраль 2015, 14:16
Поблагодарили: 3 раза

Big .dct

Сообщение harry »

Спасибо за совет! Попробуем, но боюсь, что этого не на долго хватит )
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Big .dct

Сообщение finsoftrz »

У меня когда-то было подобное, только не для самих деклараций таблиц, а при генерации слоя процедур вокруг них. Решалось разбиением на несколько файлов на уровне шаблонов. Скорее всего, с декларациями аналогично.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Big .dct

Сообщение finsoftrz »

Хотя по декларациям не уверен, что проскочит. Можно провести эксперимент, разделить на 2 файла и приинклудить. Ошибка может выдаваться не на сами декларации, а на обслуживающие процедуры, типа ri:update и ri:delete (или аналоги в абц). Можно их попробовать разнести на разные файлы.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Big .dct

Сообщение Игорь Столяров »

finsoftrz писал(а): 02 Ноябрь 2022, 18:37 а на обслуживающие процедуры, типа ri:update и ri:delete (или аналоги в абц)
Можно перенести часть описаний таблиц из словаря в Embed-ы, если они не используются в классах ABC.
Там же рассмотреть возможность динамического создания рабочих таблиц через DFD.
Часто в SQL приложениях импортируют всё подряд и большая часть таблиц нужна только для SQL запрсов.
За теми кто отстал - не возвращаться. (С) Кодекс
harry
Бывалый
Сообщения: 69
Зарегистрирован: 24 Февраль 2015, 14:16
Поблагодарили: 3 раза

Big .dct

Сообщение 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, да и сейчас очень сложно провести ревизию такого количества файлов. Плюс не хотелось кардинально ничего менять в программе. Слишком много в ней всего )

Вот, на всякий случай, скрин ошибки
Link_Error.png
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Big .dct

Сообщение Игорь Столяров »

harry писал(а): 03 Ноябрь 2022, 9:57 на объем текста в clw - файле
Больше похоже на превышение размера текста в файле.
Я бы "перевёл" ошибку как "to many segments defined in file", т.е. "многие сегменты в файле".
Аналогичная проблема есть и для размера кода в Source, она обходится через Routine.

Может быть это ошибка на размер MAP файла ? Попробуйте отключить его создание в настройках проекта.
Дальше - проверить сборку в C63. Дальше - проверить сборку в C11 с RunTime С63 ...
За теми кто отстал - не возвращаться. (С) Кодекс
harry
Бывалый
Сообщения: 69
Зарегистрирован: 24 Февраль 2015, 14:16
Поблагодарили: 3 раза

Big .dct

Сообщение harry »

Игорь Столяров писал(а): 03 Ноябрь 2022, 10:24 Дальше - проверить сборку в C63. Дальше - проверить сборку в C11 с RunTime С63 ...
На всех версия Clarion вплоть до 11.1 дает ошибку
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Big .dct

Сообщение Игорь Столяров »

А вот эту цифру не пробовали подкручивать ?
Как-то она подозрительно похожа на цифру в ошибке ...

1.jpg
За теми кто отстал - не возвращаться. (С) Кодекс
harry
Бывалый
Сообщения: 69
Зарегистрирован: 24 Февраль 2015, 14:16
Поблагодарили: 3 раза

Big .dct

Сообщение harry »

Игорь Столяров писал(а): 03 Ноябрь 2022, 10:47 А вот эту цифру не пробовали подкручивать ?
Тоже обратил на нее внимание, но не она ( Выставил 50 (64 не дает) и точно такая же ошибка.
Отключение создания MAP тоже не помогает
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Big .dct

Сообщение Игорь Столяров »

А реальный размер файла STODECL.MAP какой получается при ошибке ?
И какой при сборке "работающего" APP ? Есть связь ?
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить