2013-09-11 1 views
0

Я переношу версию своего приложения из Delphi 2007 в Delphi XE4, и у меня возникают проблемы с TSingleField из TClientDataSet.Delphi XE4 + Firebird 2.1 - Как использовать TFloatField вместо od TSingleField в ClientDataSet

Мое приложение использует SQL для загрузки данных в TClientDataSet, и если я использую

CAST(TABLE.FIELD AS FLOAT) AS FIELD 

Поле приходит к ClientDataSet, как TSingleField.

Есть ли способ изменить это, поскольку поле приходит в ClientDataSet как TFloatField, как в Delphi 2007?

Я использую драйвер Delphi XE4 для подключения Firebird.

Спасибо!

--- EDIT ---

Если нет никакого способа изменить, кто-нибудь знает, как создать агрегатное поле для ClientDataSet, чтобы вычислить TSingleFields? Проблема в том, что я не умею это делать, и если вручную изменить тип поля с TSingleField на TFloatField, то агрегат работает отлично.

+0

Смешно, только что встретил ситуацию в XE2 с FB2.5.2, что SimpleDataSet (используя MIDAS внутри) не может использовать поля FLOAT через DBX. Typecaste o DOUBLE работает, но тогда столбец получает только чтение ... –

+0

UPD: это произошло из-за midas.dll из Delphi 2006 около файла exe. Мой плохой ... // вы пытаетесь обнаружить, какой midas.dll загружается фактически –

ответ

0

Я просто столкнулся с этой проблемой при обновлении приложения Delphi 7 до Delphi 10.1. Одно из решений заключается в том, чтобы вывести поле FLOAT как ДВОЙНУЮ ТОЧНОСТЬ. Таким образом, тип поля в xml ClientDataSet заканчивается как «r8» (TFloatField), а не «r4» (TSingleField).

Другим решением является воссоздание TFields (и/или TFieldsDefs) в приложении, так что ожидаемым типом поля является TSingleField вместо TFloatField, как раньше.