каличный метод. у меня mssql2k, сделал следующее:
создал табличку (в ax)
CREATE TABLE [dbo].[TABLE2] (
[FSTR] [varchar] (10) COLLATE SQL_Ukrainian_CP1251_CI_AS NOT NULL ,
[FINT] [int] NOT NULL ,
[FREAL] [numeric](28, 12) NOT NULL ,
[FDATE] [datetime] NOT NULL ,
[FTIME] [int] NOT NULL ,
[FENUM] [int] NOT NULL ,
[FCON] [image] NULL ,
[DATAAREAID] [varchar] (3) COLLATE SQL_Ukrainian_CP1251_CI_AS NOT NULL ,
[RECID] [int] NOT NULL
)
+ пофиксил метод SysDictField.fieldSize() (по перекрестным ссылках используется только в отчетах о размере базы/компании):
X++:
int fieldSize()
{
int size;
switch (this.baseType())
{
case Types::DATETIME:
case Types::DATE:
size = 8;
break;
// case Types::DATE:
// case Types::DATETIME:
case Types::INTEGER:
size = 4;
break;
case Types::BLOB:
case Types::CONTAINER:
case Types::VARSTRING:
size = 2048; // 8192 div 4 (assumption: One out of 4 has data)
break;
case Types::REAL:
size = 13; //20;
break;
case Types::ENUM:
size = 4; //1;
break;
case Types::STRING:
case Types::RSTRING:
size = this.stringLen();
break;
}
return size*this.arraySize();
}
дык оно просчитало вот такие поля:
X++:
TableId
RecId
sequenceNum
dataAreaId
createdTransactionId
createdBy
createdTime
createdDate
modifiedTransactionId
modifiedBy
modifiedTime
modifiedDate
fCon
fEnum
fTime
fDate
fReal
fInt
fStr
думаю для более реалистичной картины надо пофиксить sysDictTable.recordSize(). предлагаю так:
X++:
int recordSize()
{
int size;
int i;
SysDictField sysDictField;
for (i=this.fieldCnt(); i; i--)
{
SysDictField = new SysDictField(this.id(), this.fieldCnt2Id(i));
if ( SysDictField.isSql() )
size += SysDictField.fieldSize();
}
return size;
}
посчитало поля:
X++:
RecId
dataAreaId
fCon
fEnum
fTime
fDate
fReal
fInt
fStr
непонимаю только зачем "большие" поля типа container считать как 1/4 страницы.