Конференция "Базы" » Количество знаков после запятой при присваивании из поля таблицы [D7, MSSQL]
 
  • Раиса © (01.07.08 11:30) [0]
    В поле 6 знаков после запятой. Присваиваю переменной через запрос значение поля - остается 4.
    В запросе написала cast(latitude as decimal(10,6)) as LatitudeD. Не помогло.
    При присваивании написала: RoundTo(ADQ.FieldByName('LatitudeD').AsFloat,-6) - безрезультатно.
    AsVariant и  Value - никаких изменений.

    Как с этим бороться? Или в переменной (double) нормально, а так я вижу в Watch List?
  • Правильный-Вася (01.07.08 11:51) [1]
    компоненты доступа?
  • Раиса © (01.07.08 11:53) [2]
    ADOConnection,ADOQuery
  • Поросенок Винни-Пух © (01.07.08 12:56) [3]
    AsFloat это Double, то есть плавающая точка.
    То есть там вообще нет никакого фиксированного количества знаков после запятой.
  • Плохиш © (01.07.08 13:21) [4]

    > Раиса ©   (01.07.08 11:30)

    Посмотри какой тип поля в коллекции TFieldDefs в ADQ и какой тип поля в таблице бд.
  • Anatoly Podgoretsky © (01.07.08 13:21) [5]
    У Борланда серьезные проблемы с BCD и АДО
    Они определяют твой тип поля как TBcdField - но на самом деле это не BCD, а Currency.
    В тоже время правильный тип поля в АДО - TFMTBCDField
    Попробуй создать постоянное поля в дизайнтайм, но АДО, с которым у Борланда проблемы, этому сильно сопротивляется.

    Другой более сложный вариант это отказ от ADO.VCL и прямая работа с АДО + необходим ActiveX для поддержки BCD полей, вплоть до 10^38 - имя не помню, но в Интернете есть решения и по этому варианту.
  • Anatoly Podgoretsky © (01.07.08 15:01) [6]
    > Плохиш  (01.07.2008 13:21:04)  [4]

    Раз речь идет о знаках после запятой, то TBcdField, а в данном случае надо TFmtBcdField - Борланд с АДО это не умеет.
    Это частая известная ошибка.
  • MsGuns © (01.07.08 15:53) [7]
    Урезание при отображении ?
  • Anatoly Podgoretsky © (01.07.08 16:27) [8]
    > MsGuns  (01.07.2008 15:53:07)  [7]

    Если бы, тогда было бы просто.
    На самом деле вместо поля DECIMAL(N, M) Борланд использует тип MONEY это и дает четыре знака после запятой.
  • Anatoly Podgoretsky © (01.07.08 16:28) [9]
    > MsGuns  (01.07.2008 15:53:07)  [7]

    Кстати легко проверить FormatFloat('0000.000000', Value) результат будет y.xxxx00
  • Раиса © (01.07.08 16:50) [10]
    MsGuns ©   (01.07.08 15:53) [7]
    Нет, при вычислениях урезание.

    Anatoly Podgoretsky ©   (01.07.08 16:28)
    Спасибо за советы, хотя не всё понятно...

    Я сделала проще в Select-е умножила на 1000000, а потом уже делила и использовала RoundTo. Вроде не потеряла знаков...
  • Ega23 © (01.07.08 16:59) [11]

    > Вроде не потеряла знаков...


    Вообще-то потеряла.
 
Конференция "Базы" » Количество знаков после запятой при присваивании из поля таблицы [D7, MSSQL]
Есть новые Нет новых   [134470   +16][b:0][p:0]