AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2009, 10:23   #1  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Real Data Type - No of decimals
Как известно, для Real в Аксапта максимальное количество десятичных знаков - 16. Однако поля в таблицах создаются как numeric(28,12) - т.е. 12 знаков после запятой. Что это - бага? Фича? Я дурак? AX 4.0 SP2
Старый 30.03.2009, 10:55   #2  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Сообщение от Yprit Посмотреть сообщение
Как известно, для Real в Аксапта максимальное количество десятичных знаков - 16. Однако поля в таблицах создаются как numeric(28,12) - т.е. 12 знаков после запятой. Что это - бага? Фича? Я дурак? AX 4.0 SP2
AX 3.0 Oracle - NUMBER(32,16)
За это сообщение автора поблагодарили: Yprit (1).
Старый 30.03.2009, 10:59   #3  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Может это как-то связано с этим...
Цитата:
Например, тип real хранится не как традиционное число с плавающей точкой (IEEE Double), а как Binary Coded Decimal, что позволяет избежать типичных для формата хранения IEEE Double ошибок в точном представлении дробных чисел, так осложняющих жизнь тех разработчиков, которые пытаются реализовать денежную арифметику с помощью языка C++ или Java.
Аксапта, заметки программиста

хотя, действительно, и у меня на оракле (32,16)
За это сообщение автора поблагодарили: Yprit (1).
Старый 30.03.2009, 11:02   #4  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Цитата:
Сообщение от dn Посмотреть сообщение
AX 3.0 Oracle - NUMBER(32,16)
Уже интереснее.... спасибо!

Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Может это как-то связано с этим...

Аксапта, заметки программиста
Вряд ли... Скорее наоборот

Коллеги, кто-нибудь может посмотреть на сиквеле?
Старый 30.03.2009, 11:07   #5  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Yprit Посмотреть сообщение
Коллеги, кто-нибудь может посмотреть на сиквеле?
(28,12). 3.0 SP2-SP4, 4.0 SP1-SP2.
За это сообщение автора поблагодарили: Yprit (1).
Старый 30.03.2009, 11:08   #6  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Цитата:
Сообщение от oip Посмотреть сообщение
(28,12). 3.0 SP2, SP4
Спасибо! Понятно... Запишем в баги...
Старый 30.03.2009, 11:17   #7  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Тип NUMERIC(28,12) записан в таблице SQLSYSTEMVARIABLES. Действительно для MSSQL так в коде и записано. См метод SQLDatabaseInit.insertSystemVariablesSqlServer(). Для Oracle в том же классе прописано NUMERIC(32,16).
За это сообщение автора поблагодарили: Yprit (1).
Старый 30.03.2009, 11:29   #8  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
ТСм метод SQLDatabaseInit.insertSystemVariablesSqlServer().
Что-то я там такого не увидел Можете носом тыкнуть? У меня 4-ка.
Старый 30.03.2009, 11:40   #9  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от Yprit Посмотреть сообщение
Что-то я там такого не увидел Можете носом тыкнуть? У меня 4-ка.
У меня 3.0 SP3

Класс SQLDatabaseInit

X++:
boolean insertSystemVariablesSqlServer()
{
    int indexValue =    #indexSupported+
                        #indexQualifier+
                        #recidsPerCompany+
                        #TransidsPerCompany;

    if (sqlSystem.dbRequestedUnicodeEnabled()>0)
        this.insertSystemVariable('(\'STR\',\'NVARCHAR(\%u)\',1,NULL)');
    else
        this.insertSystemVariable('(\'STR\',\'VARCHAR(\%u)\',1,NULL)');
    this.insertSystemVariable('(\'INT\',\'INT\',1,NULL)');
    this.insertSystemVariable('(\'REAL\',\'NUMERIC(28,12)\',1,NULL)');
    this.insertSystemVariable('(\'DATE\',\'DATETIME\',1,NULL)');
    this.insertSystemVariable('(\'ENUM\',\'INT\',1,NULL)');
    this.insertSystemVariable('(\'BLOB\',\'IMAGE\',1,NULL)');
    this.insertSystemVariable('(\'TEXT\',\'TEXT\',1,NULL)');
    this.insertSystemVariable('(\'TIMESTAMPTYPE\',\'\',1,NULL)');
    this.insertSystemVariable('(\'GETINDEX\',\'SELECT name FROM sysindexes WHERE indid>0 AND indid<255 AND id=object_id(\'\'\%s\'\') AND INDEXPROPERTY(id, name, \'\'IsStatistics\'\') = 0\',3,NULL)');
    this.insertSystemVariable('(\'RENAME\',\'EXECUTE SP_RENAME \%s,\%s\',3,NULL)');
    this.insertSystemVariable('(\'KEYWORDS\',\'PROC,SUM,LINENO,OPEN,TRANSACTION,BY,PERCENT,PROCEDURE,CURRENT_DATE,CURRENT_TIME,CURRENT_USER,DUMMY,PERMANENT,PIPE\',4,NULL)');
    this.insertSystemVariable('(\'SHADOW\',\'$\',5,NULL)');
    this.insertSystemVariable('(\'INDEXCLUSTER\', \'CLUSTERED\',5,NULL)');
    this.insertSystemVariable('(\'QUOTEPRE\',\'\',6,NULL)');
    this.insertSystemVariable('(\'QUOTEPOST\',\'_\',6,NULL)');
    this.insertSystemVariable('(\'DBNAME\',\'Microsoft SQL Server\',7,NULL)');
    this.insertSystemVariable('(\'DUPLICATEKEY\',\'+2601,+2627\',9,NULL)');
    this.insertSystemVariable('(\'DEADLOCKCODES\',\'+1205\',9,NULL)');
    this.insertSystemVariable('(\'TIMESTAMPCODES\',\'+532\',9,NULL)');
    this.insertSystemVariable('(\'DISCONNECTCODES\',\'+230,+10054\',9,NULL)');
    this.insertSystemVariable('(\'CTRLBRKCODES\',\'\',9,NULL)');
    this.insertSystemVariable('(\'SHARINGCODES\',\'\',9,NULL)');
    this.insertSystemVariable('(\'RECORDLOCKCODES\',\'\',9,NULL)');
    this.insertSystemVariable('(\'DONTRETRYCODES\',\'+100\',9,NULL)');
    this.insertSystemVariable('(\'INDEXEXISTCODES\',\'\',9,NULL)');
    this.insertSystemVariable('(\'ENDOFDATACODES\',\'+100\',9,NULL)');
    this.insertSystemVariable('(\'LOGFULLCODES\',\'+1105\',9,NULL)');
    this.insertSystemVariable('(\'SYNCHRONIZECODES\',\'+207,+208,+1913,+3701,+3702,+3703\',9,NULL)');
    this.insertSystemVariable('(\'TABLENAMELEN\',\'30\',10,NULL)');
    this.insertSystemVariable('(\'FIELDNAMELEN\',\'30\',10,NULL)');
    this.insertSystemVariable('(\'CHARSET\',\'1\', 11,NULL)');
    this.insertSystemVariable('(\'SORTMODE\',\'1\',11,NULL)');
    this.insertSystemVariable('(\'CONCURRENCY\',\'6\',11,NULL)');
    this.insertSystemVariable('(\'NULLSUPPORT\',\'3\',11,NULL)');
    this.insertSystemVariable('(\'DBID\',\'2\',12,NULL)');
    this.insertSystemVariable('(\'SYSVARID\',\''+ int2str(#currentSysVarId) +'\',12,NULL)');
    this.insertSystemVariable('(\'RESERVED\',\'0\',12,NULL)');
    this.insertSystemVariable('(\'ALTERTABLE\',\'1\',13,NULL)');
    this.insertSystemVariable('(\'GETDATA\',\'0\',13,NULL)');
    this.insertSystemVariable('(\'SQLFUNCTIONS\',\'0\',13,NULL)'); // 2000/8/10: MAX() and MIN() handled by the SQL backend
    this.insertSystemVariable('(\'INDEX\',\''+int2Str(indexValue)+'\',13,NULL)');
    this.insertSystemVariable('(\'APICALLSPINCNT\',\'0\',15,NULL)');
    this.insertSystemVariable('(\'APICALLSLEEP\',\'10\',15,NULL)');
    this.insertSystemVariable('(\'CASESENSITIVE\',\'0\',20,NULL)');
    this.insertSystemVariable('(\'ALLOWEMPTYSTRING\',\'1\',20,NULL)');
    this.insertSystemVariable('(\'COMMENTSTRING\',\'1\',20,NULL)');
    this.insertSystemVariable('(\'NAMETRUNCFIX\',\'0\',20,NULL)');
    this.insertSystemVariable(strFmt('(\'UNICODEENABLED\',\'%1\',20,NULL)',sqlSystem.dbRequestedUnicodeEnabled()));
    this.insertSystemVariable('(\'ORDERBYSELECT\',\'0\',21,NULL)');

    return TRUE;
}
Строка для типа REAL :

X++:
this.insertSystemVariable('(\'REAL\',\'NUMERIC(28,12)\',1,NULL)');
Старый 30.03.2009, 12:12   #10  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
В 4ке вот этой части нет:
X++:
    if (sqlSystem.dbRequestedUnicodeEnabled()>0)
        this.insertSystemVariable('(\'STR\',\'NVARCHAR(\%u)\',1,NULL)');
    else
        this.insertSystemVariable('(\'STR\',\'VARCHAR(\%u)\',1,NULL)');
    this.insertSystemVariable('(\'INT\',\'INT\',1,NULL)');
    this.insertSystemVariable('(\'REAL\',\'NUMERIC(28,12)\',1,NULL)');
    this.insertSystemVariable('(\'DATE\',\'DATETIME\',1,NULL)');
    this.insertSystemVariable('(\'ENUM\',\'INT\',1,NULL)');
    this.insertSystemVariable('(\'BLOB\',\'IMAGE\',1,NULL)');
    this.insertSystemVariable('(\'TEXT\',\'TEXT\',1,NULL)');
    this.insertSystemVariable('(\'TIMESTAMPTYPE\',\'\',1,NULL)');
Старый 30.03.2009, 12:17   #11  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
мда, действительно нет ....
Теги
баг, ax3.0, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axStart: How to convert a column in a table to a different type with the same name without losing data. Blog bot DAX Blogs 0 01.02.2008 21:21
jerry-dynamics: Where can you drag and drop an extended data type to? Blog bot DAX Blogs 0 16.06.2007 11:20
Fred Shen: Date data type in Query Range Value Expression Blog bot DAX Blogs 0 28.10.2006 16:40
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Ошибка "Restricted data type attribute violation." kalex DAX: Программирование 4 24.12.2002 14:24

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:53.