![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Десятичные поля запроса. [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 знаков
где это видно?