30.03.2009, 10:23 | #1 |
Злыдни
|
Real Data Type - No of decimals
Как известно, для Real в Аксапта максимальное количество десятичных знаков - 16. Однако поля в таблицах создаются как numeric(28,12) - т.е. 12 знаков после запятой. Что это - бага? Фича? Я дурак? AX 4.0 SP2
|
|
30.03.2009, 10:55 | #2 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Yprit (1). |
30.03.2009, 10:59 | #3 |
MCTS
|
Может это как-то связано с этим...
Цитата:
Например, тип real хранится не как традиционное число с плавающей точкой (IEEE Double), а как Binary Coded Decimal, что позволяет избежать типичных для формата хранения IEEE Double ошибок в точном представлении дробных чисел, так осложняющих жизнь тех разработчиков, которые пытаются реализовать денежную арифметику с помощью языка C++ или Java.
хотя, действительно, и у меня на оракле (32,16) |
|
|
За это сообщение автора поблагодарили: Yprit (1). |
30.03.2009, 11:02 | #4 |
Злыдни
|
|
|
30.03.2009, 11:07 | #5 |
Axapta
|
|
|
|
За это сообщение автора поблагодарили: Yprit (1). |
30.03.2009, 11:08 | #6 |
Злыдни
|
|
|
30.03.2009, 11:17 | #7 |
Участник
|
Тип NUMERIC(28,12) записан в таблице SQLSYSTEMVARIABLES. Действительно для MSSQL так в коде и записано. См метод SQLDatabaseInit.insertSystemVariablesSqlServer(). Для Oracle в том же классе прописано NUMERIC(32,16).
|
|
|
За это сообщение автора поблагодарили: Yprit (1). |
30.03.2009, 11:29 | #8 |
Злыдни
|
|
|
30.03.2009, 11:40 | #9 |
Участник
|
У меня 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; } X++: this.insertSystemVariable('(\'REAL\',\'NUMERIC(28,12)\',1,NULL)'); |
|
30.03.2009, 12:12 | #10 |
Axapta
|
В 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 |
Злыдни
|
мда, действительно нет ....
|
|
Теги |
баг, ax3.0, ax4.0 |
|
|