Приветствую.
Есть учетная программа, написаная на Дельфи и использующая Firebird 2.5 через IBX. В IBX пара модулей отредактированные, уже не помню, откуда их взял в свое время или что в них правил по каким-то рекомендациям. В Delphi 2010 с одним моментом проблем не было, в Delphi XE3 возникла.
В БД есть домен PRICES
CREATE DOMAIN PRICES AS
NUMERIC(14,4);
В Delphi, если создаю persistent поля, то получается TIBBCDField, про который в исходниках IBX написано в комментарии
{ Actually, there is no BCD involved in this type,
instead it deals with currency types.
In IB, this is an encapsulation of Numeric (x, y)
where x < 18 and y <= 4.
Note: y > 4 will default to Floats
}
Свойство Size по умолчанию для компонента TIBBCDField равно 8, но в моем случае 4 (в Delphi 2010) и работает нормально. В Delphi XE3 компилируется нормально, но во время работы программы возникает исключение в TDataSet.CheckFieldCompatibility в строчках
if (Field.DataType in CheckTypeSizes) and (Field.Size <> FieldDef.Size) then
DatabaseErrorFmt(SFieldSizeMismatch, [Field.DisplayName, Field.Size,
FieldDef.Size], Self);
Исправляю в свойствах поля свойство Size на 4, компилируется, работает без ошибок, но потом, то ли при сохранении, то ли в какой-то еще момент размер снова становится 8 и появляется эта ошибка.
|
---|
Project LesDb.exe raised exception class EDatabaseError with message 'ibqDevices: Size mismatch for field 'Цена, у.е.', expecting: 8 actual: 4'. |
Никто не сталкивался?