Конференция "Базы" » Десятичные поля запроса. [D7]
 
  • patrick1968 © (11.05.11 14:17) [0]
    Подскажите, плз, по такой теме есть запрос выдающий десятичные значения с точностью более 4 знаков после запятой, а компонент ADOQuery эти значения округляет до 4 знаков, где можно настроить точность получаемых данных, пробовал свойство EnableBCD устанавливать в false и Precision увеличивал - результата нет.
  • clickmaker © (11.05.11 14:20) [1]
    > а компонент ADOQuery эти значения округляет до 4 знаков

    где это видно?
  • Ega23 © (11.05.11 14:23) [2]

    > а компонент ADOQuery эти значения округляет до 4 знаков

    Не должен.

    А в целом - грамотно оформляй вопрос:
    1. Тип СУБД
    2. Скрипт на создание поля
    3. Скрипт на выборку поля
    4. Код получения значения в Delphi.
  • Patrick1968 © (11.05.11 14:35) [3]
    Вот такой запрос помещаю в SQL

    SELECT q.CODEAP,
          SUM(ROUND(q.Prixod*q.Rate/10000, 5)) Rasxod
    FROM(
       SELECT /*+ INDEX(smdocuments smdocuments_createdat) INDEX(smsspec smcspec_displaypos) INDEX(smaltunits smcaltunits_pk)*/
       (select scp.propval from smcardproperties scp where scp.article = s.article and scp.propid='40') CodeAP,
       s.article,
       s.Quantity as Prixod,
       sma.Rate,
       case
           when d.ClientIndex is null then
                375
           else
               d.ClientIndex
       end ClientIndex,
       d.opcode,
       decode((select sm1.Article from smcard sm1 where sm1.article=s.Article and bitand(sm1.flags, 128)=128), '', 0, 1) Alco
       FROM smdocuments d, smspec s, SMAltUnits sma
       WHERE d.DocType in ('IW','WO')
           and d.DocState in (2, 3)
           and decode((select sm1.Article from smcard sm1 where sm1.article=s.Article and bitand(sm1.flags, 128)=128), '', 0, 1) = 1
           and d.createdat between to_date ( '01.01.2011', 'DD.MM.YYYY' ) and to_date ( '31.03.2011', 'DD.MM.YYYY' )
           and s.DOCID=d.ID
           and d.LocationFrom = 1
           and sma.article=s.article
           and not (d.ID Like 'СВ%')
           and d.opcode = 1
       )q
    GROUP BY q.CodeAP
    ORDER BY q.CodeAP

    Если затем результат обрабатывать то в отладчике видно, что поле RACXOD округлено
  • Ega23 © (11.05.11 14:48) [4]
    SUM(ROUND(q.Prixod*q.Rate/10000, 5)) Rasxod



    1. Какой тип полей q.Prixod и q.Rate ?
    2. Какая СУБД и что говорит хелп по ROUND?
    3. Сколько будет 0.00001 + 0.00002 + 0.00003 + 0.00004  ?  :)
  • Patrick1968 © (11.05.11 15:04) [5]
    1. q.Prixod number(14,3) q.Rate number
    2. Oracle
    3. соответственно 0.0001, так я запрос в sqlplus'e выполняю, там в одной строке вижу 0.01215 и туже строку в ADOQuery 0.0122
  • Ega23 © (11.05.11 15:09) [6]

    > 1. q.Prixod number(14,3) q.Rate number

    Скорее всего ответ - в этом.
    Первое поле - 14.3, второе - по-умолчанию (надо смотреть, что там по-умолчанию). Приведи к одинаковому типу.
  • Anatoly Podgoretsky © (11.05.11 15:34) [7]
    > Patrick1968  (11.05.2011 15:04:05)  [5]

    Какой тип поля в ADOQuery
  • stas © (11.05.11 17:38) [8]
    patrick1968 ©   (11.05.11 14:17)
    глюк такой есть в ADOQuery, нужно либо в запросе поле конвертировать во float, либо удалить автоматически созданное BCD поле в AdoQuery и создать с таким же именем указав тип float.
  • stas © (11.05.11 17:39) [9]
    stas ©   (11.05.11 17:38) [8]
    Это даже не в ADOQuery а в принципе в ADO
  • Patrick1968 © (11.05.11 17:57) [10]
    В продолжении темы, предыдущее разрешил, через EnableBCD = false теперь другой затык, для отображения dbf таблицы использую известный компонент DBGridEh и там есть возможность подбивать итоги, и хотя моё поле имеет тип Float его сумма все равно округляется до 4, видимо причина кроется где-то здесь. Может кто сталкивался?
  • sniknik © (11.05.11 17:57) [11]
    > а в принципе в ADO
    это дельфи... у него нет полноценной поддержки BCD, конвертация идет через каренси.
  • Ega23 © (11.05.11 18:00) [12]

    > и хотя моё поле имеет тип Float


    Ты уверен, что оно именно float?
  • Patrick1968 © (11.05.11 18:21) [13]
    если верить своим глазам точно TFloatField
  • Patrick1968 © (11.05.11 18:24) [14]
    причем ставлю у поля грида ValueType в fvtSum округляет, а если fvtFieldValue ,то всё в норме
  • OW © (12.05.11 09:07) [15]
    в генофонд лезть надо, смотреть
    с procedure TColumnFooterEh.EnsureSumValue; начать

    а так и в демке у них сумма до 4х знаков.

    > это дельфи... у него нет полноценной поддержки BCD, конвертация
    > идет через каренси.

    имхо отсюда ноги растут
  • Patrick1968 © (12.05.11 09:24) [16]
    А можно немножко поподробней, а то что-то такой процедуры найти не могу нигде
  • OW © (12.05.11 09:26) [17]
    unit DBGridEh
    ctrl + F
  • OW © (12.05.11 09:27) [18]
    да, EhLib v3.6c
  • Anatoly Podgoretsky © (12.05.11 09:32) [19]
    > OW  (12.05.2011 09:07:15)  [15]

    Ну еще и FMTBCD, но только на словах как правило.
  • Patrick1968 © (12.05.11 09:34) [20]
    ehlib 2.5 поэтому видимо и нет
 
Конференция "Базы" » Десятичные поля запроса. [D7]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]