Гость_2011
Дата: 28.04.2011 10:58:25
Добрый день!
Есть программа на Delphi7. В качестве компонентов доступа к БД использую ADO (СУБД = MSSQL 2008).
Работает так: передаю параметры хранимой процедуре, та возвращает мне результат в виде рекордсета.
Вот здесь как раз и проблема, поле в БД имеет тип decimal(32,6), то есть 6 знаков после запятой, а sp.FieldByName('my_field').AsFloat возвращает только 4 знака после запятой. На форумах уже видел как пытаются решить эту проблему (через присвоение к строке, а потом обратно) - думаю, что этот вариант хорош по-своему, но он для меня неприемлем - придется переписывать ооооочень много кода. Как можно избавиться от этой проблемы? Если перейти на другие компоненты доступа, то на какие?
ёёёёёёёёёёёёёёёёёёё
Дата: 28.04.2011 11:29:10
Гость_2011, AsFloat вообще-то типа Double, поэтому тут возвращает не 4, а столько, "сколько дают".
Кроме того, лучше, чем 15 знаков, точность он не даст... а decimal(32,6) - тут и в extended можешь и не уместиться...тут действительно, читай как строки, и храни все в специальных, сверхточных типах.
Метод научного тыка: попробуй изменить свойство Precision поля TFloatField :)
Гость_2011
Дата: 28.04.2011 11:48:22
ёёёёёёёёёёёёёёёёёёё, даю я число из БД = "0,001134", а когда читаю через sp в программе, то получается как "0,0011".
Изменение свойства precision ничего не дает :(
Есть еще советы?
Anatoly Podgoretsky
Дата: 28.04.2011 12:14:36
Значит у тебя не Float а Currency
sobolenok.2004
Дата: 28.04.2011 12:15:56
sobolenok.2004
Дата: 28.04.2011 12:17:08
в смысле false поставь :)
Гость_2011
Дата: 28.04.2011 13:11:05
sobolenok.2004, помогло! Спасибо большое!
Почитаю про это подробнее. Еще раз спасибо!