Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Десятичные поля запроса. [D7]


patrick1968 ©   (2011-05-11 14:17:00) 

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


Patrick1968   (2011-05-12 09:34:00) [1]

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


Anatoly Podgoretsky   (2011-05-12 09:32:00) [2]

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

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


OW   (2011-05-12 09:27:00) [3]

да, EhLib v3.6c


OW   (2011-05-12 09:26:00) [4]

unit DBGridEh
ctrl + F


Patrick1968   (2011-05-12 09:24:00) [5]

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


OW   (2011-05-12 09:07:00) [6]

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

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

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

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


Patrick1968   (2011-05-11 18:24:00) [7]

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


Patrick1968   (2011-05-11 18:21:00) [8]

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


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


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


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


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

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


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

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


stas   (2011-05-11 17:39:00) [12]

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


stas   (2011-05-11 17:38:00) [13]

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


Anatoly Podgoretsky   (2011-05-11 15:34:00) [14]

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

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


Ega23   (2011-05-11 15:09:00) [15]


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

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


Patrick1968   (2011-05-11 15:04:00) [16]

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 14:48:00) [17]

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 14:35:00) [18]

Вот такой запрос помещаю в 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:23:00) [19]


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

Не должен.

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


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

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо