Где bmovMyBatchMove - экземпляр класса TBatchMove из VCL.
Hеправда Ваша! ;)
Этот загадочный BatchMove имеет одну очень неприятную особенность (по крайней мере при работе с DBF-таблицами и в Delphi 1.0x), как-то:
увеличивает в создаваемых таблицах в полях типа NUMBER количество значащих цифр после запятой (не помню - возможно, что и до), если там указаны небольшие (около 1-3 цифр) значения :(.
Я эту особенность побороть не сумел, а мириться с ней в условиях нашей конторы (когда приходится бороться за место под солнцем с программистами на Clipper и FoxPro совершенно неприемлемо.
Кроме того, в предложенном выше варианте еще и запись удалять приходится...:)
Это фрагмент кода на Delphi, который создает новый таблицу с тем же структурой как существующая таблица с помощью класса TBatchMove из VCL.
Автор оригинального поста Nomadic столкнулся с проблемой, когда класс TBatchMove увеличивал количество знаков после запятой в числовых полях при создании новой таблицы. Этот код предлагает решение этой проблемы, копируя поле определения из исходной таблицы в целевую таблицу.
Вот шаг за шагом, что код делает:
Он открывает два базы данных, одну для источника таблицы и одну для целевой таблицы.
Он получает активное состояние источника таблицы и сохраняет его в переменной bActive.
Он обновляет поле определения источника таблицы и выделяет память для массива описаний полей (pSrcFldDes).
Он открывает источник таблицы и получает ее поле описания с помощью DbiGetFieldDescs.
Если целевая таблица должна быть создана с всеми полями из источника таблицы, он обновляет поле определения источника таблицы и выделяет память для массива описаний полей (CrtTableDesc.pFLDDesc).
Он проходит по каждому полю в источнике таблицы (либо всем полям, либо только тем, которые указаны в массиве cpyFields) и копирует его описание в целевую таблицу с помощью Move.
Он создает целевую таблицу с помощью DbiCreateTable.
Наконец, он освобождает память, выделяемую для описаний полей.
Альтернативное решение предлагает более ручной подход к созданию новой таблицы с тем же структурой как существующая таблица. Этот код использует класс TTable и его методы (Open, FieldDefs.Update, и т.д.) для ручного копирования поле определения из источника таблицы в целевую таблицу.
Обратите внимание, что этот код является специфичным для Delphi 1.x, который является quite старым, и может не работать с новыми версиями Delphi.
В статье рассматривается проблема создания таблиц с одинаковой структурой в Delphi, а также предлагается решение этой проблемы через создание процедуры CopyStruct.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.