Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
SergioRaguzini писал(а): 17 Февраль 2026, 11:57
Добрый день!
вроде версии Data Conversion Template, для С6.3 и более новых отличаются, тут все правильно?
Обычный app.exe собирается без ошибок, подключил к проекту как внешний exe, хотелось бы как dll прикрутить. )
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Я, так понимаю, помощи ждать неоткуда. Вы в какую dll шаблон добавляете? Там, где описания таблиц и ABC-классов? Есть т.н. глобальный шаблон? Ну и посмотрите как шаблон генерит описание классов? Есть там что-нибудь про "dll", "ABCDllMode"? Если что, я этот шаблон не пользую.
kreator писал(а): 17 Февраль 2026, 18:58
Я, так понимаю, помощи ждать неоткуда. Вы в какую dll шаблон добавляете? Там, где описания таблиц и ABC-классов? Есть т.н. глобальный шаблон? Ну и посмотрите как шаблон генерит описание классов? Есть там что-нибудь про "dll", "ABCDllMode"? Если что, я этот шаблон не пользую.
В myprogram.exe при помощи шаблона Data Converter, как External Mode который запускает - conv_data.exe
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Эти шаблоны используются для управления версиями словаря. Соответственно, конвертируют таблицы со старой структурой в таблицы с новой структурой. Плюс встраивают в приложение визуальное отображение истории изменений структуры базы данных. Поддерживают базы данных dat, tps и ms sql. Из того, что помню.
Я использую много лет свой похожий инструмент, но более простой, который автоматически создаёт отдельное приложение, актуализирующее структуру базы данных у клиентов со старых версий (tps и btrieve).
Это позволяет легко изменять структуру базы данных в словаре по мере развития проекта.
Интересная тема. Всегда конвертация представляет некую проблему. Но наверно не без изъянов. Особенно в SQL. Не скажу по MS, но в Firebird в последних версиях запретили некие изменения в полях БД. Т.е., если мы хотим увеличить, например, строковое поле, но создаём новое, переписываем данные из старого в новое, удаляем старое, переименовываем новое и переставляем новое на позицию старого. На стороне клиента это, естественно, через скрипт. Если говорить об универсальности решения, то я ещё понимаю пошаговую конвертацию. А вот, если изменений была куча, то могут возникнуть какие-то сложности.
Про sql не знаю, это надо в DC смотреть. Вадим писал, что там много нюансов отрабатывается, сложнее, чем в isam. У меня только tps и btrieve, генерится на каждую версию таблицы отдельная рутинка, которая переливает данные из таблицы предыдущей версии во временную с новой структурой, а затем замещает физический файл. Обрабатывается автоматически с той версии, которая у клиента (программа смогла открыть ее без ошибки), до актуальной, включая все промежуточные. Есть только оговорка, что последующие версии не должны повторять структуру предыдущих. На стороне разработчика вначале запускается утилитный шаблон, который определяет наличие изменений в словаре и помещает описание таблицы в текстовый файл версий. Затем компилируется небольшое приложение с одной процедурой (процедурный шаблон), которая на основании файла версий автоматически создает код конвертации.
finsoftrz писал(а): 19 Февраль 2026, 16:16
Затем компилируется небольшое приложение с одной процедурой (процедурный шаблон), которая на основании файла версий автоматически создает код конвертации.
По моим представлениям можно сделать автоматическую конвертацию при несложных изменениях в словаре. Допустим, при изменении размера строкового поля. Или при добавлении поля/столбца. Но во многих случаях нужно править код конвертации вручную. А если каждый раз такое? Поэтому, чтобы привести версию клиента к текущей, надо сделать несколько итераций.
У меня таких ситуаций за 20+ лет не возникало, все полностью автоматически. Возможность выстраивать ручной код есть, но эта опция не используется. Итерация на стороне клиента одна, просто запускается маленький exe. Точнее, может быть более одного exe, если очень давно не обновлялся. Периодически (раз в 2-3 года) файл версий и собранный на его основе exe переименовываются, цикл начинается заново.