Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.09.10;
Скачать: CL | DM;

Вниз

Десятичные поля запроса.   Найти похожие ветки 

 
patrick1968 ©   (2011-05-11 14:17) [0]

Подскажите, плз, по такой теме есть запрос выдающий десятичные значения с точностью более 4 знаков после запятой, а компонент ADOQuery эти значения округляет до 4 знаков, где можно настроить точность получаемых данных, пробовал свойство EnableBCD устанавливать в false и Precision увеличивал - результата нет.


 
clickmaker ©   (2011-05-11 14:20) [1]

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

где это видно?


 
Ega23 ©   (2011-05-11 14:23) [2]


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

Не должен.

А в целом - грамотно оформляй вопрос:
1. Тип СУБД
2. Скрипт на создание поля
3. Скрипт на выборку поля
4. Код получения значения в Delphi.


 
Patrick1968 ©   (2011-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 ©   (2011-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 ©   (2011-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 ©   (2011-05-11 15:09) [6]


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

Скорее всего ответ - в этом.
Первое поле - 14.3, второе - по-умолчанию (надо смотреть, что там по-умолчанию). Приведи к одинаковому типу.


 
Anatoly Podgoretsky ©   (2011-05-11 15:34) [7]

> Patrick1968  (11.05.2011 15:04:05)  [5]

Какой тип поля в ADOQuery


 
stas ©   (2011-05-11 17:38) [8]

patrick1968 ©   (11.05.11 14:17)
глюк такой есть в ADOQuery, нужно либо в запросе поле конвертировать во float, либо удалить автоматически созданное BCD поле в AdoQuery и создать с таким же именем указав тип float.


 
stas ©   (2011-05-11 17:39) [9]

stas ©   (11.05.11 17:38) [8]
Это даже не в ADOQuery а в принципе в ADO


 
Patrick1968 ©   (2011-05-11 17:57) [10]

В продолжении темы, предыдущее разрешил, через EnableBCD = false теперь другой затык, для отображения dbf таблицы использую известный компонент DBGridEh и там есть возможность подбивать итоги, и хотя моё поле имеет тип Float его сумма все равно округляется до 4, видимо причина кроется где-то здесь. Может кто сталкивался?


 
sniknik ©   (2011-05-11 17:57) [11]

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


 
Ega23 ©   (2011-05-11 18:00) [12]


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


Ты уверен, что оно именно float?


 
Patrick1968 ©   (2011-05-11 18:21) [13]

если верить своим глазам точно TFloatField


 
Patrick1968 ©   (2011-05-11 18:24) [14]

причем ставлю у поля грида ValueType в fvtSum округляет, а если fvtFieldValue ,то всё в норме


 
OW ©   (2011-05-12 09:07) [15]

в генофонд лезть надо, смотреть
с procedure TColumnFooterEh.EnsureSumValue; начать

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

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

имхо отсюда ноги растут


 
Patrick1968 ©   (2011-05-12 09:24) [16]

А можно немножко поподробней, а то что-то такой процедуры найти не могу нигде


 
OW ©   (2011-05-12 09:26) [17]

unit DBGridEh
ctrl + F


 
OW ©   (2011-05-12 09:27) [18]

да, EhLib v3.6c


 
Anatoly Podgoretsky ©   (2011-05-12 09:32) [19]

> OW  (12.05.2011 09:07:15)  [15]

Ну еще и FMTBCD, но только на словах как правило.


 
Patrick1968 ©   (2011-05-12 09:34) [20]

ehlib 2.5 поэтому видимо и нет



Страницы: 1 вся ветка

Текущий архив: 2015.09.10;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.127 c
2-1392837011
alexdn
2014-02-19 23:10
2015.09.10
Узнать ip


3-1304500823
Atum
2011-05-04 13:20
2015.09.10
Сделать запись в поле CLOB


15-1356233809
Inovet
2012-12-23 07:36
2015.09.10
(3) О чём-то ещё


2-1392826517
dehkanin
2014-02-19 20:15
2015.09.10
Как записать в таблицу БД текст объёмом свыше 2-х мегабайт?


15-1411763403
Юрий
2014-09-27 00:30
2015.09.10
С днем рождения ! 27 сентября 2014 суббота