Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.045 c
1-1330436331
Chrom
2012-02-28 17:38
2015.09.10
Отработка оператора Case


15-1414578228
qpash
2014-10-29 14:23
2015.09.10
Скриншот произвольной области


15-1420229087
Дмитрий С
2015-01-02 23:04
2015.09.10
Своя программа или сервис


15-1417298499
Pavia
2014-11-30 01:01
2015.09.10
Родить объект


15-1417901404
Юрий
2014-12-07 00:30
2015.09.10
С днем рождения ! 7 декабря 2014 воскресенье





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский