-
Подскажите, плз, по такой теме есть запрос выдающий десятичные значения с точностью более 4 знаков после запятой, а компонент ADOQuery эти значения округляет до 4 знаков, где можно настроить точность получаемых данных, пробовал свойство EnableBCD устанавливать в false и Precision увеличивал - результата нет.
-
> а компонент ADOQuery эти значения округляет до 4 знаков
где это видно?
-
> а компонент ADOQuery эти значения округляет до 4 знаков
Не должен.
А в целом - грамотно оформляй вопрос: 1. Тип СУБД 2. Скрипт на создание поля 3. Скрипт на выборку поля 4. Код получения значения в Delphi.
-
Вот такой запрос помещаю в 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 округлено
-
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 ? :)
-
1. q.Prixod number(14,3) q.Rate number 2. Oracle 3. соответственно 0.0001, так я запрос в sqlplus'e выполняю, там в одной строке вижу 0.01215 и туже строку в ADOQuery 0.0122
-
> 1. q.Prixod number(14,3) q.Rate number
Скорее всего ответ - в этом. Первое поле - 14.3, второе - по-умолчанию (надо смотреть, что там по-умолчанию). Приведи к одинаковому типу.
-
> Patrick1968 (11.05.2011 15:04:05) [5]
Какой тип поля в ADOQuery
-
patrick1968 © (11.05.11 14:17) глюк такой есть в ADOQuery, нужно либо в запросе поле конвертировать во float, либо удалить автоматически созданное BCD поле в AdoQuery и создать с таким же именем указав тип float.
-
stas © (11.05.11 17:38) [8] Это даже не в ADOQuery а в принципе в ADO
-
В продолжении темы, предыдущее разрешил, через EnableBCD = false теперь другой затык, для отображения dbf таблицы использую известный компонент DBGridEh и там есть возможность подбивать итоги, и хотя моё поле имеет тип Float его сумма все равно округляется до 4, видимо причина кроется где-то здесь. Может кто сталкивался?
-
> а в принципе в ADO это дельфи... у него нет полноценной поддержки BCD, конвертация идет через каренси.
-
> и хотя моё поле имеет тип Float
Ты уверен, что оно именно float?
-
если верить своим глазам точно TFloatField
-
причем ставлю у поля грида ValueType в fvtSum округляет, а если fvtFieldValue ,то всё в норме
-
в генофонд лезть надо, смотреть с procedure TColumnFooterEh.EnsureSumValue; начать
а так и в демке у них сумма до 4х знаков.
> это дельфи... у него нет полноценной поддержки BCD, конвертация > идет через каренси.
имхо отсюда ноги растут
-
А можно немножко поподробней, а то что-то такой процедуры найти не могу нигде
-
unit DBGridEh ctrl + F
-
да, EhLib v3.6c
-
> OW (12.05.2011 09:07:15) [15]
Ну еще и FMTBCD, но только на словах как правило.
-
ehlib 2.5 поэтому видимо и нет
|